日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql设置check

發(fā)布時間:2025/4/16 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql设置check 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簡述

MySQL中是沒有check操作的。但是可以做類似的操作來實現(xiàn)。

文章目錄

    • 簡述
    • 方法一
    • 方法二
      • 添加id長度為某些固定的數(shù)值
    • Hint

方法一

比如說,我有一個表,teacher,我想要設置性別只能選男或者女

那么就直接將這個改成enum 數(shù)據(jù)類型

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

方法二

使用觸發(fā)器:

比如說我們這里想要挑戰(zhàn)一些稍微難點的操作。

比如我們想要設置插入的某一列的數(shù)據(jù)必須每一位都是必須是數(shù)字。

  • 下面我將會下面的teacher表中的id來進行這個操作

  • 創(chuàng)建一個篩選字符串中是否都是數(shù)字的函數(shù)
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)
  • 設置好這個函數(shù)之后再來設置一下觸發(fā)器
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)

做好上面的觸發(fā)器之后,以后設置關于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了,不是全部都是數(shù)字,所以就不能插入,報錯。

添加id長度為某些固定的數(shù)值

  • 這里設置長度也必須要為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

關于觸發(fā)器

【Mysql】trigger觸發(fā)器(一些實例)

總結

以上是生活随笔為你收集整理的mysql设置check的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。