视图和基表vs视图与select
视图中保存的仅是一条select语句,源数据来自于基表
检查视图
通过检查视图更新基表数据时,只有满足检查条件的更新语句才能成功执行。
local 检查视图
通过检查视图对表进行更新操作时,只有满足了视图的检查条件时才能正常执行更新语句。(with_check_option 的值为1)
通过级联视图对表进行更新操作时,只有满足所有针对该视图的所有视图的检查条件的更新语句才能正常执行。(with_check_option 的值为2)
MySQL中的触发事件与时间
触发事件有3 种
- insert
- update
- delete
触发时间有2 种
- before
- after
使用触发器的注意事项
- 触发器中的select语句不能返回结果集
- 同个表不能创建两个相同触发时间、触发事件的触发程序
- 触发程序不能使用事务相关语句(start transaction,commit,rollback等)
- MySQL触发器针对记录进行操作,批量更新数据时,引入触发器会导致批量更新操作性能降低。
- MyISAM引擎中,触发器不能保证原子性。而在InnoDB中可以。
- InnoDB存储引擎实现外健约束关系时,可使用级联选项维护外健数据;而在MyISAM中可以使用触发器实现级联修改和删除。
- MySQL触发器不能对本表执行update操作。
- 在before触发程序中,自增长的字段的new值为0,不是实际插入新纪录时自动生成的自增型字段值。
临时表
作为主查询的派生表,为了完成查询,需要自动创建临时表存储临时结果集,这样的临时表由MySQL自行创建、自行维护,称为自动创建的临时表
视图、子查询、临时表、派生表
视图通常在子查询语句的from子句中使用,而子查询在主查询的where子句或having子句中使用。
如果视图的主查询的语句是update、delete、insert时,且主查询语句执行了特定字段的更新操作,主查询语句将出错。
派生表相较临时表的生命周期更短,本次select语句执行结束,派生表立即清除。