MYSQL触发器实现check约束0—100

记录一下今天创建数据库遇到的问题
在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约束啦!
谢谢,希望有用!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值