首頁  >  文章  >  資料庫  >  mysql檢查約束怎麼寫

mysql檢查約束怎麼寫

(*-*)浩
(*-*)浩原創
2019-05-10 11:49:0113938瀏覽

MySQL 檢查約束(CHECK)可以透過 CREATE TABLE 或 ALTER TABLE 語句實現,根據使用者實際的完整性要求來定義。它可以分別對列或表實施 CHECK 約束。但mysql手冊裡寫的很清楚:「所有的儲存引擎都對CHECK子句進行分析,但是忽略CHECK子句。」所以雖然可以這樣寫可並不會起到約束作用。

推薦教學:MySQL教學

mysql檢查約束怎麼寫

#檢查約束使用 CHECK 關鍵字,具體的語法格式如下:

CHECK <表达式>

其中:<表達式>指的就是SQL 表達式,用來指定需要檢查的限定條件。
若將 CHECK 約束子句置於表中某個列的定義之後,則這種約束也稱為基於列的 CHECK 約束。
在更新表格資料的時候,系統會檢查更新後的資料行是否符合 CHECK 限制中的限定條件。 MySQL 可以使用簡單的表達式來實現 CHECK 約束,也允許使用複雜的表達式作為限定條件,例如在限定條件中加入子查詢。

注意:若將 CHECK 約束子句置於所有列的定義以及主鍵約束和外鍵定義之後,則這種約束也稱為基於表的 CHECK 約束。此約束可以同時對錶中多個列設定限定條件。

在建立表格時設定檢查約束

建立表格時設定檢查約束的語法規則如下:

CHECK(<检查约束>)

在test_db 資料庫中建立tb_emp7 數據表,要求salary 欄位值大於0 且小於10000,輸入的SQL 語句和運行結果如下所示。

mysql> CREATE TABLE tb_emp7
-> (
   -> id INT(11) PRIMARY KEY,
   -> name VARCHAR(25),
   -> deptId INT(11),
   -> salary FLOAT,
   -> CHECK(salary>0 AND salary<100),
   -> FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
   -> );
Query OK, 0 rows affected (0.37 sec)

在修改表時新增檢查約束

修改表時設定檢查約束的語法規則如下:

ALTER TABLE tb_emp7 ADD CONSTRAINT <检查约束名> CHECK(<检查约束>)

修改tb_dept 資料表,要求id 欄位值大於0,輸入的SQL 語句和執行結果如下所示。

mysql> ALTER TABLE tb_emp7
   -> ADD CONSTRAINT check_id
   -> CHECK(id>0);
Query OK, 0 rows affected (0.19 sec)
Records: 0  Duplicates: 0  Warnings: 0

解決方法:使用觸發器實作CHECK檢查約束的功能。

(1)建立tb_student(學生資訊表)。

-- 创建学生信息表
CREATE TABLE tb_student
(
   	id INT AUTO_INCREMENT PRIMARY KEY,
   	name VARCHAR(30),
   	age INT NOT NULL
);

(2)建立檢查年齡(age)欄位是否有效的觸發器。

 -- 创建触发器 
CREATE TRIGGER trg_tb_student_insert_check BEFORE INSERT
ON tb_student FOR EACH ROW
BEGIN
   	DECLARE msg varchar(100);
 
   	IF NEW.age <= 0 OR NEW.age >= 100 
   	THEN
   	SET msg = CONCAT('您输入的年龄值:',NEW.age,' 为无效的年龄,请输入0到100以内的有效数字。');
   	SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = msg;
   	END IF;
END;

(3)寫測試語句。

INSERT INTO tb_student(name,age) VALUES('Kevin',120);

以上是mysql檢查約束怎麼寫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn