Maalesef MySQL, SQL kontrol kısıtlamalarını desteklemez. Uyumluluk nedeniyle bunları DDL sorgunuzda tanımlayabilirsiniz, ancak bunlar yok sayılır.
Basit bir alternatif var
Veri gereksinimleri karşılanmadığında bir hataya neden olan veya alanı varsayılan değerine ayarlayan oluşturabilir BEFORE INSERT
ve BEFORE UPDATE
tetikleyebilirsiniz.
BEFORE INSERT
MySQL 5.5'ten sonra çalışma örneği
DELIMITER $$
CREATE TRIGGER `test_before_insert` BEFORE INSERT ON `Test`
FOR EACH ROW
BEGIN
IF CHAR_LENGTH( NEW.ID ) < 4 THEN
SIGNAL SQLSTATE '12345'
SET MESSAGE_TEXT := 'check constraint on Test.ID failed';
END IF;
END$$
DELIMITER ;
MySQL 5.5'ten önce, bir hataya neden olmanız gerekiyordu, örneğin tanımsız bir prosedürü çağırmak.
Her iki durumda da bu, örtük bir işlem geri dönüşüne neden olur. MySQL, prosedürler ve tetikleyiciler içinde ROLLBACK ifadesinin kendisine izin vermez.
İşlemi geri almak istemiyorsanız (INSERT / UPDATE, başarısız bir "kontrol kısıtlaması" olsa bile geçmelidir. Kullanarak SET NEW.ID = NULL
, kimliği alanların varsayılan değerine ayarlayacak olan değerin üzerine yazabilirsiniz, bir id için gerçekten mantıklı değildir tho
Düzenleme:
Başıboş alıntı kaldırıldı.
Hakkında :=
operatörü:
Aksine =
, :=
operatör hiçbir zaman bir karşılaştırma operatörü olarak yorumlanmaz. Bu :=
, bir değişkene bir değer atamak için herhangi bir geçerli SQL ifadesinde (yalnızca SET ifadelerinde değil) kullanabileceğiniz anlamına gelir .
https://dev.mysql.com/doc/refman/5.6/en/assignment-operators.html
Backtick tanımlayıcı alıntılarıyla ilgili olarak:
Tanımlayıcı tırnak karakteri geri işarettir ("" ")
ANSI_QUOTES SQL modu etkinleştirilirse, tanımlayıcıların çift tırnak işareti içinde alınmasına da izin verilir
http://dev.mysql.com/doc/refman/5.6/en/identifiers.html