外键的使用:
语法:
[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)
REFERENCES tbl_name (index_col_name, ...)
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
已有表的基础上修改:
ALTER TABLE check_out ADD FOREIGN KEY rid (reader_id) REFERENCES areader(id)
Check检查的使用:
语法:
Constraint check_name check(谓词)
已有表的基础上修改:ALTER TABLE Persons ADD CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
删除已有的约束:ALTER TABLE Persons DROP CHECK chk_Person
触发器的使用:
示例:
DELIMITER //
CREATE
TRIGGER sell_out
AFTER UPDATE/INSERT ON product
FOR EACH ROW --不加这句则更新n条数据只触发一次
BEGIN
IF(new.num<1)
THEN SET new.state=0
END IF
END//
DELIMITER ;
Trigger顺序:
- 把执行后的值赋给new
- 执行before类trigger
- 执行完before后,将new赋给结果,更新表
- 执行after类trigger
从上面我们可以看出,after类触发器对new行的set操作是没有用的,因此这样的语法也不被认可,不能通过。