Mysql中怎樣實現check約束?

時間 2021-05-29 22:28:12

1樓:愛可生雲資料庫

現在要說的是在列這一層次過濾的基於表定義之前就規範好的 CHECK 約束。(MySQL 版本 >= 8.0.16)

mysql> create table f1 (r1 int constraint tb_f1_r1_chk1 check (mod(r1,3)=0));

Query OK, 0 rows affected (0.03 sec)

mysql> create table f2 (r1 int constraint tb_f2_r1_chk1 check (mod(r1,3)=0) not enforced);

Query OK, 0 rows affected (0.02 sec)

1. constraint 名字在每個資料庫中唯一。

也就是說單個資料庫裡不存在相同的兩個 constraint,如果不定義,系統自動生成乙個唯一的約束名字。

2. check 約束針對語句 insert/update/replace/load data/load xml 生效;針對對應的 ignore 語句失效。

3. 並非每個函式都可以使用,比如函式結果不確定的:NOW(),CONNECTION_ID(),CURRENT_USER()。

4. 不適用於儲存過程和儲存函式。

5. 系統變數不適用。

6. 子查詢不適用。

7. 外來鍵動作(比如 ON UPDATE, ON DELETE) 不適用。

8. enforced 預設啟用,如果單獨加上 not enforced ,check 約束失效。

mysql 索引是怎麼實現的?

說起索引就必須要先說下資料結構和演算法。資料結構和演算法是相互依存的,資料怎樣的儲存就意味著你需要可以使用什麼樣的演算法進行查詢。比如你是乙個無序陣列,你想查詢某乙個name A 的資料有哪些,你只能進行資料遍歷查詢了 但是這個陣列是按name排序的,這樣你就可以使用二分查詢或者同樣的是順序查詢,時...

mysql中not in和not exists兩種查詢到底哪種快

聿明leslie 看了這個問題的不少答案,給我的感覺就是回答得都太過表面。雖然在OceanBase我是從事SQL方向研發工作的,但總的來說,我實在害怕回答SQL方向的問題,給我的感覺就是每次看到這類問題,都太難回答了。混跡知乎的資料庫板塊好幾年,看了好多問題,總體感覺就是國內研究資料庫的環境太差,大...

怎樣深入學習mysql?

程式設計師偽架師 1.先給推薦一本Mysql 的書吧。程式設計師偽架師 一本作者自費出版,然後賣爆的MySQL書籍2.對於想做DBA的話,可能只學Mysql不是夠。還需要學習其它資料庫。3.如果想做乙個厲害的DBA,最好再深入學習一下資料庫原理,Linux相關操作等。 執著zz 給親推薦個阿里雲大學...