欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

mysql设置check

发布时间:2025/4/16 39 豆豆
生活随笔 收集整理的这篇文章主要介绍了 mysql设置check 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

简述

MySQL中是没有check操作的。但是可以做类似的操作来实现。

文章目录

    • 简述
    • 方法一
    • 方法二
      • 添加id长度为某些固定的数值
    • Hint

方法一

比如说,我有一个表,teacher,我想要设置性别只能选男或者女

那么就直接将这个改成enum 数据类型

mysql> alter table teacher modify tsex enum('男', '女') default '男'; Query OK, 0 rows affected (0.41 sec) Records: 0 Duplicates: 0 Warnings: 0

方法二

使用触发器:

比如说我们这里想要挑战一些稍微难点的操作。

比如我们想要设置插入的某一列的数据必须每一位都是必须是数字。

  • 下面我将会下面的teacher表中的id来进行这个操作

  • 创建一个筛选字符串中是否都是数字的函数
mysql> delimiter $$ mysql> create function IsNum(str varchar(25))-> returns int deterministic-> begin-> declare iResult INT DEFAULT 0;-> if ISNULL(str) THEN return 0; END IF;-> if str='' THEN return 0; END IF;-> select str REGEXP '^[0-9]*$' INTO iResult;-> if iResult=1 THEN-> return 1;-> else-> return 0;-> end if;-> end $$ Query OK, 0 rows affected (0.07 sec)

测试一下

mysql> select IsNum('12312')$$ +----------------+ | IsNum('12312') | +----------------+ | 1 | +----------------+ 1 row in set (0.00 sec)
  • 设置好这个函数之后再来设置一下触发器
mysql> delimiter // mysql> create trigger TC_ID-> before update-> on teacher-> for each row-> begin-> if (IsNum(new.id) = 0) then-> SIGNAL sqlstate '45001' set message_text = 'No way! You cannot do this!';-> end if;-> end// Query OK, 0 rows affected (0.03 sec)mysql> create trigger TC_ID_Insert-> before insert-> on teacher-> for each row-> begin-> if (IsNum(new.id) = 0) then-> SIGNAL sqlstate '45001' set message_text = 'No way! You cannot do this!';-> end if;-> end// Query OK, 0 rows affected (0.09 sec)

做好上面的触发器之后,以后设置关于teacher的插入和更新都需要被保证了。
我们可以做一下测试

mysql> insert into teacher value('1', 'Sean', '广州', '00000001', '男', '123')// Query OK, 1 row affected (0.01 sec)mysql> insert into teacher value('2', '肥宅Sean', '广州', '00000002', '男', 'abc')// ERROR 1644 (45001): No way! You cannot do this!

第二次插入的时候,由于最后的id变成了abc了,不是全部都是数字,所以就不能插入,报错。

添加id长度为某些固定的数值

  • 这里设置长度也必须要为15位或者是18位
mysql> create trigger TC_ID_Insert-> before insert-> on teacher-> for each row-> begin-> if ((length(new.id) != 15 and length(new.id)!= 18) or IsNum(new.id)=0) then-> SIGNAL sqlstate '45001' set message_text = "No way! You cannot do this!";-> end if;-> end // Query OK, 0 rows affected (0.09 sec)mysql> create trigger TC_ID-> before update-> on teacher-> for each row-> begin-> if ((length(new.id) != 15 and length(new.id)!= 18) or IsNum(new.id)=0) then-> SIGNAL sqlstate '45001' set message_text = "No way! You cannot do this!";-> end if;-> end // Query OK, 0 rows affected (0.04 sec)

Hint

关于触发器

【Mysql】trigger触发器(一些实例)

总结

以上是生活随笔为你收集整理的mysql设置check的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。