Ограничение CHECK в MySQL не работает

Сначала я составил таблицу как

CREATE TABLE Customer (
  SD integer CHECK (SD > 0),
  Last_Name varchar (30),
  First_Name varchar(30)
);

и затем вставленные значения в той таблице

INSERT INTO Customer values ('-2','abc','zz');

MySQL не показывает ошибку, он принял значения.

126
задан Pratyusha Terli 4 October 2012 в 04:30
поделиться

2 ответа

Проверка ограничение , похоже, не будет реализована в MySQL.

См. Этот отчет об ошибке: https://bugs.mysql.com/bug.php?id=3464

15
ответ дан 24 November 2019 в 00:51
поделиться

MySQL 8.0.16 - первая версия, поддерживающая ограничения проверки.

Прочитайте https://dev.mysql.com/doc/refman/8.0/rue/create-table-Check-constraints.html

Если вы используете MySQL 8.0.15 или более раннее, MySQL справочное руководство говорит:

Пункт PREATE анализируется, но игнорируется всеми двигателями хранения.

Попробуйте триггер ...

mysql> delimiter //
mysql> CREATE TRIGGER trig_sd_check BEFORE INSERT ON Customer 
    -> FOR EACH ROW 
    -> BEGIN 
    -> IF NEW.SD<0 THEN 
    -> SET NEW.SD=0; 
    -> END IF; 
    -> END
    -> //
mysql> delimiter ;

Надеюсь, что поможет.

137
ответ дан 24 November 2019 в 00:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: