Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL触发器实现CHECK检查约束

MySQL使用触发器如何实现CHECK检查约束的功能

作者:pan_junbiao

这篇文章主要介绍了MySQL使用触发器如何实现CHECK检查约束的功能,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

MySQL触发器实现CHECK检查约束

在MySQL中,提供了CHECK检查约束用来指定某列的可取值的范围,它通过限制输入到列中的值来强制域的完整性。

但是目前的MySQL版本只是对CHECK约束进行了分析处理,但会被直接忽略,并不会报错。

示例

创建学生信息表tb_student时,将年龄(age)的值设置在1至100之间的数值。

-- 学生信息表
CREATE TABLE tb_student
(
	id INT AUTO_INCREMENT PRIMARY KEY,
	name VARCHAR(30),
	age INT NOT NULL CHECK(age>0 AND age<100)
);

上述示例中,虽然给年龄(age)字段设置了CHECK检查约束,但是仍然可以往该数据表中添加不符合要求的年龄数组

例如:-1或者120。

解决方法

使用触发器实现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('pan_junbiao的博客',120);

执行结果:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文