mysql学习之check无效的解决及触发器的使用

时间:2024-11-29 12:37:37

SQL的约束种类:

一、非空约束 not null

二、唯一约束 unique

三、主键约束

四、外键约束

五、check约束

该约束可用于列之间检查语义限制的,实际应用过程中非常常用!!

然鹅,MySQL中的check约束是无效的,哭哭

好在,经过多方搜索,找到了另一种代替方法,简单易学,上手好用。。。那就是触发器,一起来学习学习嗷┗|`O′|┛ 嗷~~

  • 触发器的设置

触发器(trigger):监视某种情况,并触发某种操作。

触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/before) 4.触发事件(insert/update/delete)

语法:

create trigger triggerName

after/before insert/update/delete on 表名

for each row   #这句话在mysql是固定的

begin

sql语句;

end;

  

注意一点哦

在MySQL中,BEGIN … END 语句的语法为:

BEGIN
[statement_list]
END

其中,statement_list 代表一个或多个语句的列表,列表内的每条语句都必须用分号(;)来结尾。
而在MySQL中,分号是语句结束的标识符,遇到分号表示该段语句已经结束,MySQL可以开始执行了。因此,解释器遇到statement_list 中的分号后就开始执行,然后会报出错误,因为没有找到和 BEGIN 匹配的 END。

这时就会用到 DELIMITER 命令(DELIMITER 是定界符,分隔符的意思),它是一条命令,不需要语句结束标识,语法为:
DELIMITER new_delemiter
new_delemiter 可以设为1个或多个长度的符号,默认的是分号(;),我们可以把它修改为其他符号,如:DELIMITER:DELIMITER
在这之后的语句,以分号结束,解释器不会有什么反应,只有遇到了$,才认为是语句结束。注意,使用完之后,我们还应该记得把它给修改回来。

最后来一个小例子:

delimiter $
create trigger S_P after insert on books for each row begin delete from books where sale_price < purchase_price;
#设置商品售价不得小于进货价格
end$
#显示插入成功后 Query OK, 0 rows affected (0.30 sec)
delimiter ;

 希望可以帮助到大家哦 Thanks♪(・ω・)

爱大家ノ(づ ̄3 ̄)づ╭❤~