旗下导航:搜·么
当前位置:网站首页 > MySQL教程 > 正文

mysql搜检束缚怎样写【MySQL教程】,mysql

作者:搜教程发布时间:2019-12-01分类:MySQL教程浏览:61评论:0


导读:MySQL搜检束缚(CHECK)能够经由过程CREATETABLE或ALTERTABLE语句完成,依据用户现实的完全性请求来定义。它能够分别对列或表实行CHECK...
MySQL 搜检束缚(CHECK)能够经由过程 CREATE TABLE 或 ALTER TABLE 语句完成,依据用户现实的完全性请求来定义。它能够分别对列或表实行 CHECK 束缚。然则mysql手册里写的很清晰:“一切的存储引擎均对CHECK子句举行剖析,然则疏忽CHECK子句。”所以虽然能够如许写可并不会起到束缚作用。

引荐教程: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搜检束缚怎样写的细致内容,更多请关注ki4网别的相干文章!

标签:mysql


欢迎 发表评论: