Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana saya bisa mendefinisikan batasan non-null bersyarat pada beberapa kolom di mySql?

Sayangnya, MySQL tidak mendukung batasan CHECK . Ini mem-parsing mereka dan kemudian diam-diam membuang kendala, seperti halnya untuk kendala kunci asing pada tabel MyISAM. Itu bahkan tidak memberi Anda peringatan tentang jenis batasan yang tidak didukung, yang menurut saya merupakan keputusan desain yang buruk di pihak mereka.

Berikut solusi menggunakan pemicu:

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

Anda juga harus membuat pemicu serupa BEFORE UPDATE di meja yang sama.

Lihat http://dev.mysql.com/doc/refman/ 5.6/en/signal.html untuk informasi lebih lanjut tentang SIGNAL pernyataan untuk memunculkan pengecualian di pemicu MySQL atau rutinitas tersimpan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Permintaan SQL untuk teman bersama

  2. MySQL MENGOPTIMALKAN semua tabel?

  3. Memasukkan teks Ibrani ke MySQL menggunakan PHP (teks sampah)

  4. Query MySQL dan Sphinx campuran

  5. Bagaimana cara mengurutkan hasil kueri berdasarkan jarak dalam paket Laravel QueryBuilder / MySQL Spatial?