Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak zdefiniować warunkowe ograniczenia niezerowe na kilku kolumnach w mySql?

Niestety MySQL nie obsługuje ograniczeń CHECK . Analizuje je, a następnie dyskretnie odrzuca ograniczenie, podobnie jak w przypadku ograniczeń kluczy obcych w tabeli MyISAM. Nie daje nawet ostrzeżenia o nieobsługiwanym typie ograniczenia, co moim zdaniem jest złą decyzją projektową z ich strony.

Oto rozwiązanie wykorzystujące wyzwalacz:

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 //

Powinieneś także utworzyć podobny wyzwalacz BEFORE UPDATE na tym samym stole.

Zobacz http://dev.mysql.com/doc/refman/ 5.6/pl/sygnał.html aby uzyskać więcej informacji na temat SIGNAL instrukcja zgłaszania wyjątków w wyzwalaczach MySQL lub przechowywanych procedurach.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy mysqli_real_escape_string wystarczy, aby uniknąć wstrzyknięcia SQL lub innych ataków SQL?

  2. Policz zawartość w latach, miesiąc archiwum za pomocą PHP

  3. Ostrzeżenie:mysqli_connect():(HY000/1045):Odmowa dostępu dla użytkownika 'username'@'localhost' (przy użyciu hasła:TAK)

  4. Wstawianie milionów rekordów z hostingu lokalnego do hostingu godaddy

  5. Ustaw wartość AUTOINCREMENT w tabeli django