MySQL使用觸發(fā)器如何實(shí)現(xiàn)CHECK檢查約束的功能
MySQL觸發(fā)器實(shí)現(xiàn)CHECK檢查約束
在MySQL中,提供了CHECK檢查約束用來(lái)指定某列的可取值的范圍,它通過(guò)限制輸入到列中的值來(lái)強(qiáng)制域的完整性。
但是目前的MySQL版本只是對(duì)CHECK約束進(jìn)行了分析處理,但會(huì)被直接忽略,并不會(huì)報(bào)錯(cuò)。
示例
創(chuàng)建學(xué)生信息表tb_student時(shí),將年齡(age)的值設(shè)置在1至100之間的數(shù)值。
-- 學(xué)生信息表 CREATE TABLE tb_student ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30), age INT NOT NULL CHECK(age>0 AND age<100) );
上述示例中,雖然給年齡(age)字段設(shè)置了CHECK檢查約束,但是仍然可以往該數(shù)據(jù)表中添加不符合要求的年齡數(shù)組
例如:-1或者120。
解決方法
使用觸發(fā)器實(shí)現(xiàn)CHECK檢查約束的功能。
(1)創(chuàng)建tb_student(學(xué)生信息表)。
-- 創(chuàng)建學(xué)生信息表 CREATE TABLE tb_student ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30), age INT NOT NULL );
(2)創(chuàng)建檢查年齡(age)字段是否有效的觸發(fā)器。
-- 創(chuàng)建觸發(fā)器
CREATE TRIGGER trg_tb_student_insert_check BEFORE INSERT
ON tb_student FOR EACH ROW
BEGIN
DECLARE msg varchar(100);
IF NEW.age <= 0 OR NEW.age >= 100
THEN
SET msg = CONCAT('您輸入的年齡值:',NEW.age,' 為無(wú)效的年齡,請(qǐng)輸入0到100以內(nèi)的有效數(shù)字。');
SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = msg;
END IF;
END;(3)編寫測(cè)試語(yǔ)句。
INSERT INTO tb_student(name,age) VALUES('pan_junbiao的博客',120);執(zhí)行結(jié)果:

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
微信昵稱帶符號(hào)導(dǎo)致插入MySQL數(shù)據(jù)庫(kù)時(shí)出錯(cuò)的解決方案
Mysql的utf8編碼最多3個(gè)字節(jié),而Emoji表情或者某些特殊字符是4個(gè)字節(jié),所以會(huì)導(dǎo)致帶有表情的昵稱插入數(shù)據(jù)庫(kù)時(shí)出錯(cuò),下面給大家分享下解決方案,需要的朋友參考下吧2016-12-12
手動(dòng)管理MySQL8.0中的Undo表空間的使用
本文主要介紹了MySQL 8.0中手動(dòng)管理Undo表空間,包括創(chuàng)建、配置、使用和維護(hù)這些表空間的具體步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07
mysql5.7.19 解壓版安裝教程詳解(附送純凈破解中文版SQLYog)
Mysql5.7.19版本是今年新推出的版本,最近幾個(gè)版本的MySQL都不再是安裝版,都是解壓版了,大家在使用過(guò)程中遇到很多問(wèn)題,下面小編給大家?guī)?lái)了MySQL5.7.19 解壓版安裝教程詳解,感興趣的朋友一起看看吧2017-10-10
MySQL實(shí)現(xiàn)兩張表數(shù)據(jù)的同步
本文將介紹mysql 觸發(fā)器實(shí)現(xiàn)兩個(gè)表的數(shù)據(jù)同步,需要學(xué)習(xí)MySQL的童鞋可以參考。2016-10-10
MySQL中數(shù)據(jù)庫(kù)監(jiān)控核心要素與實(shí)施策略詳解
數(shù)據(jù)庫(kù)監(jiān)控是系統(tǒng)穩(wěn)定性的基石,作為核心組件,數(shù)據(jù)庫(kù)的穩(wěn)定性直接決定系統(tǒng)可用性,因此監(jiān)控至關(guān)重要,下面小編就和大家詳細(xì)講講MySQL中數(shù)據(jù)庫(kù)監(jiān)控核心要素與實(shí)施策略吧2025-11-11

