mysql檢查約束怎麼寫

(*-*)浩
發布: 2020-09-15 13:44:44
原創
13941 人瀏覽過

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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!