Tôi có một bảng có chứa một url và một chuỗi đại diện cho các tham số của nó. Vấn đề là tôi muốn một url và một chuỗi tham số là ràng buộc duy nhất cho bảng - aka không có mục nào có thể có cùng chuỗi url và tham số. Chuỗi tham số có thể có độ dài tùy ý (dài hơn 800byte hoặc lâu hơn là độ dài tối đa cho khóa MySql, vì vậy tôi không thể sử dụng Unique (url, params) vì nó ném lỗi ...).Làm thế nào để hủy bỏ hoạt động INSERT trong kích hoạt MySql?
Tôi đã nghĩ đến việc sử dụng trình kích hoạt để thực hiện việc này, nhưng làm cách nào để ném một ngoại lệ/tăng lỗi nếu trình kích hoạt phát hiện ra chèn là sắp chèn mục nhập trùng lặp? Tôi tưởng tượng tôi muốn có một MySqlException ném như MySql không trùng lặp với các phím chính vv vì vậy tôi có thể bắt nó trong mã C# của tôi.
Tôi có hai phần trong trình kích hoạt tôi cần trợ giúp: ... Hủy bỏ ngoại lệ cho C# ... Làm cách nào để ném ngoại lệ, v.v ... sang C#? ... Cho phép chèn ... - làm thế nào để tôi chỉ cho phép chèn nếu không có mục trùng lặp?
Heres mã kích hoạt:
CREATE TRIGGER urls_check_duplicates
BEFORE INSERT ON urls
FOR EACH ROW
BEGIN
DECLARE num_rows INTEGER;
SELECT COUNT(*)
INTO num_rows
FROM urls
WHERE url = NEW.url AND params = NEW.params;
IF num_rows > 0 THEN
... ABORT/throw exception to C# ...
ELSE
... Allow insert ...
END
từ MySQL 5.5, có thể là trước đó, bạn có thể sử dụng tín hiệu, [xem câu trả lời của tôi ở đây] [1] [1]: http://stackoverflow.com/questions/24/throw-error- in-mysql-trigger/7189396 # 7189396 – RuiDC