可是当我们运行测试数据时发现,约束并没有起作用,不约束的值也可以放在表中,所以我们要解决这个问题,下面列举两种:
比如上面的代码就可以修改为:
CREATE table Student( Sno char(8) not null PRIMARY key, Sname varchar(10) not null, Sex enum('男','女') not null DEFAULT "男", Age TINYINT(1) not null DEFAULT '20', Phonenumber char(12) UNIQUE,这样就可以控制Sex在男和女之间,如果输入的不合法就不会进入。
触发器的特性:
1、有begin end体,begin end;之间的语句可以写的简单或者复杂 2、什么条件会触发:I、D、U 3、什么时候触发:在增删改前或者后 4、触发频率:针对每一行执行 5、触发器定义在表上,附着在表上。 也就是由事件来触发某个操作,事件包括INSERT语句,UPDATE语句和DELETE语句;可以协助应用在数据库端确保数据的完整性。
创建触发器的规则:
<1>BEFORE和AFTER参数指定了触发执行的时间,在事件之前或是之后。 <2>FOR EACH ROW表示任何一条记录上的操作满足触发事件都会触发该触发器,也就是说触发器触发频率是针对每一行数据触发一次。 <3>tigger_event详解: ①INSERT型触发器:插入某一行时激活触发器,可能通过INSERT、LOAD DATA、REPLACE 语句触发(LOAD DAT语句用于将一个文件装入到一个数据表中,相当与一系列的INSERT操作); ②UPDATE型触发器:更改某一行时激活触发器,可能通过UPDATE语句触发; ③DELETE型触发器:删除某一行时激活触发器,可能通过DELETE、REPLACE语句触发。
创建触发器
查看触发器 (1)
SHOW TRIGGERS\G; //无法查看指定的触发器,只能查看所有的(2)所有触发器信息都存储在information_schema数据库下的triggers表中,可以使用SELECT语句查询,如果触发器信息过多,最好通过TRIGGER_NAME字段指定查询。
SELECT * FROM information_schema.triggers\G //显示所有触发器的详细信息;同时,该方法可以查询制定触发器的详细信息。删除触发器
DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name所以我们刚才的第一个例子用触发器就是:
create trigger studentcheck before insert on Student for each row begin if new.Age<15 or new.Age>30 then set new.Age=20; end if; end ;Tip: 触发器尽量少的使用,因为不管如何,它还是很消耗资源,如果使用的话要谨慎的使用,确定它是非常高效的: 触发器是针对每一行的;对增删改非常频繁的表上切记不要使用触发器,因为它会非常消耗资源。
以上有不对的还望指正!
