记录一下今天创建数据库遇到的问题
在Mysql低版本中,check约束会被忽略,如何实现约束一个值只能取一个范围内的呢?我查找资料学习了触发器,分享一下。
mysql> create table Choice
-> (S_no Char(6),
-> Course_no Char(5),
-> Score smallint,
-> foreign key(S_no) references student(S_no),
-> foreign key(Course_no) references Course(Course_no));
Query OK, 0 rows affected (0.01 sec)
mysql> DELIMITER $//DELIMITER 命令(DELIMITER 是定界符,分隔符的意思)
mysql> CREATE TRIGGER trg_check BEFORE INSERT
-> ON Choice FOR EACH ROW
-> BEGIN
-> DECLARE msg varchar(100);//使用 DECLARE 来定义一局部变量,该变量只能在 BEGIN … END 复合语句中使用,并且应该定义在复合语句的开头
-> IF NEW.Score<0 OR NEW.Score>100
-> THEN
-> SET msg = CONCAT('您输入的年龄值:',NEW.Score,' 为无效的年龄,请输入0到100以内的有效数字。');
-> SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = msg;//MySQL SIGNAL语句是一种错误处理机制,用于处理意外事件
-> END IF;
-> end$
DELIMITER ;//修改回来
Query OK, 0 rows affected (0.01 sec)
mysql> insert into Choice values('322111','5',70);
Query OK, 1 row affected (0.01 sec)
我分享一下查到的资料,大体就应该可以看明白QAQ
https://www.cnblogs.com/duodushu/p/5446384.html 触发器详解
https://blog.csdn.net/weixin_32531655/article/details/113911235 signal语句
https://blog.csdn.net/pan_junbiao/article/details/86241390 原版例子,但没有隔离符
我看到在Mysql8.几版本后就支持check约束啦!
谢谢,希望有用!