日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

mysql设置check

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

簡述

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

文章目錄

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

方法一

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

那么就直接將這個改成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)一些稍微難點(diǎn)的操作。

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

  • 下面我將會下面的teacher表中的id來進(jìn)行這個操作

  • 創(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è)置好這個函數(shù)之后再來設(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ā)器之后,以后設(shè)置關(guān)于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ù)值

  • 這里設(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

關(guān)于觸發(fā)器

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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。