2010-08-24 20 views
8

Tôi có một tập lệnh SQL để chạy với một cơ sở dữ liệu lớn. Tôi muốn đặt một vài truy vấn đơn giản ngay từ đầu, giống như kiểm tra sự tỉnh táo.Xác nhận trong MySQL

Có cách nào để viết xác nhận trong MySQL không? Hoặc bất kỳ loại "chọn ..., và nếu nó không phù hợp với giá trị này, sau đó hủy bỏ toàn bộ kịch bản"?

+0

Chi tiết hơn - chính xác bạn đang tìm gì để sử dụng cho logic quyết định - một bảng, cột, giá trị cụ thể? –

+1

Tôi hơi linh hoạt vào thời điểm này, vì tôi chỉ muốn đảm bảo đó là cơ sở dữ liệu phù hợp và dữ liệu không phải là sai lầm khủng khiếp. Nhìn vào một số (*) hoặc min (trường) (trong một phạm vi cụ thể), hoặc đảm bảo trường <> 'const', hoặc một cái gì đó, sẽ là tuyệt vời. – Ken

Trả lời

3

Bạn có thể đưa toàn bộ kịch bản trong một câu lệnh if, tùy thuộc vào loại giá trị mà bạn cần phải kiểm tra, đây là một ví dụ:

DECLARE @value int 
SET @value = (SELECT COUNT(*) FROM dbo) 

IF @value >0 
BEGIN 
--Do Stuff Here 
END 
+2

MySQL không cho phép luồng điều khiển bên ngoài các chương trình được lưu trữ, bực bội. – Deebster

+0

@Brett, Tính năng này không hoạt động đối với MySQL. Xem các câu trả lời dưới đây. – Pacerier

1

Bạn cũng có thể làm được điều này thông qua một thủ tục/chức năng lưu trữ, như trong ví dụ bên dưới:

CREATE FUNCTION `RunProcess`() RETURNS INT(11) 
runProcess:BEGIN 

DECLARE check_value INT; 
DECLARE error_code INT; 

SELECT COUNT(*) FROM dbo INTO check_value; 

IF check_value = 0 THEN set error_code = 666; 
    LEAVE runProcess; 
    RETURN error_code; 
END IF; 

... 
... 
END; 
+0

Điều này có thể tạo ra một số vấn đề nếu bạn đang cố gắng chạy các sprocs khác ........... – Pacerier

5

Một số mã điên. Điểm chính là: SET có thể làm tăng lỗi cho biến mysql.

Ví dụ:

SET @value = 0; 
SET SESSION sql_mode = if(@value, @@SESSION.sql_mode, 'something wrong uphere'); 

Đầu ra sẽ ERROR 1231 (42000): Variable 'sql_mode' can't be set to the value of 'something wrong uphere' và thực thi sẽ bị dừng.

Cách tiếp cận này không phải ngữ nghĩa nhưng nó hoạt động.

+0

khéo léo ~! Một số thủ thuật khác là gì? – Pacerier

Các vấn đề liên quan