Mysql
 sql >> база данни >  >> RDS >> Mysql

Как мога да дефинирам условни ненулеви ограничения за няколко колони в mySql?

За съжаление, MySQL не поддържа ограничения CHECK . Той ги анализира и след това мълчаливо отхвърля ограничението, точно както прави за ограничения на външен ключ на MyISAM таблица. Дори не ви дава предупреждение за неподдържания тип ограничение, което според мен е лошо дизайнерско решение от тяхна страна.

Ето решение с помощта на тригер:

mysql> DELIMITER //
mysql> CREATE TRIGGER check_one_not_null BEFORE INSERT ON mytable FOR EACH ROW 
    IF COALESCE(NEW.D, NEW.E, NEW.F) IS NULL 
    THEN SIGNAL SQLSTATE '45000' 
      SET MESSAGE_TEXT = 'One of D, E, or F must have a non-null value.';
    END IF //

Трябва също да създадете подобен тригер BEFORE UPDATE на същата маса.

Вижте http://dev.mysql.com/doc/refman/ 5.6/en/signal.html за повече информация относно SIGNAL израз за предизвикване на изключения в MySQL тригери или съхранени рутинни процедури.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да вкарам една колона с резултати от mysql_query в масив?

  2. MySQL база данни попълнена падащо поле и PHP търсене

  3. Индексирайте MySQL база данни с Apache Lucene и ги поддържайте синхронизирани

  4. Joda Time - Hibernate вмъква вчерашната дата в базата данни

  5. Хибернация Запазете странно поведение