当创建约束触发器时会执行约束选项,通过约束选项我们可以设置触发器的触发时间,当约束触发器实现的约束被违反的时候,它会抛出异常
//创建触发器的语法 CTEATE TRIGGER trigger_name [BEFORE|AFTER|INSTEAD OF] event_name ON table_name [ --触发器逻辑 ]; //创建触发器实例 CREATE TRIGGER weather_trigger AFTER INSERT ON weather FOR EACH ROW BEGIN DECLARE s1 VARCHAR(40) character set utf8; DECLARE s2 VARCHAR(20) character set utf8; SET s2 = "is created"; SET s1 = CONCAT(NEW.name,s2); INSERT INTO logs(log) VALUES(s1); END $ DELIMITER; //列出当前数据库中所有的触发器 SELECT * FROM pg_trigger; //列出特定表的触发器 SELECT tgname FROM pg_trigger,pg_class WHERE tgreid=pg_class.oid AND relname='company'; //删除触发器 DROP TRIGGER 触发器名 ON 表名; 虽然本文介绍了触发器,但是日常开发中并不推荐使用触发器,原因如下: 1. 触发器隐藏在数据库中,数量不多还行,大数量的触发器对于日常开发和维护,都是一个极大地挑战,尤其是对于那些不是自己写的触发器而言; 2. 触发器会占用数据库性能; 3. 在数据库迁移时,会非常麻烦; 简而言之,触发器就像是实体外键一样,非常鸡肋...... 6.INDEX索引 索引是一种特殊的加速数据检索的特殊表查询,它是一个指向表中数据的指针。索引就像是一本书的目录。 索引可以加速SELECT语句和WHERE查询数据的速度,但是会降低UPDATE和INSERT语句的速度。 索引的创建使用的是CREATE INDEX语句,需要指定表和要添加索引的列(一或多),并指定索引是升序或降序排列。 索引是唯一的。常用的索引类型:
单列索引
组合索引
唯一索引
局部索引
隐式索引
单列索引 //语法 CREATE INDEX index_name ON table_name (column_name); --在一列上添加索引 组合索引 //语法 CREATE INDEX index_name ON table_name (column_name1,column_name2); --在多列上添加索引单列索引和多列索引必须使用在WHERE子句过滤条件非常频繁的列上
唯一索引 //语法 CREATE UNIQUE INDEX index_name ON table_name (column_name); --唯一索引可以保证数据的完整性 局部索引 //语法 CREATE INDEX index_name ON table_name (conditional_expression); --局部索引是在表的子集上创建的索引 隐式索引 隐式索引是在创建对象的时候,由数据库自动创建的索引,如主键约束和唯一约束。 DROP INDEX删除索引 DROP INDEX index_name; 索引不适合使用的场景: 1. 索引不应该创建在较小的表上; 2. 索引不能创建在有频繁更新和插入的表上; 3. 索引不能创建在有大量NULL值得列上; 4. 索引不能创建在进程操作的列上 7.TRUNCATE TABLE删除表数据 TRUNCATE TABLE会删除表数据,但是会保留表结构。 虽然DROP TABLE也能够删除表数据,但是会同时删除表结构。 虽然DELETE的效果相同,但是TRUNCATE TABLE更快,可以立即释放表空间,而且不需要后续使用VACUUM操作,因为它不需要检索数据。 (VACUUM是PGSQL用于释放、再利用被更新、删除操作占据的表空间) //语法 TRUNCATE TABLE table_name; //实例 TRUNCATE TABLE weather; 8.View 视图 视图并不是一张真正的表,而是通过名称存储在数据库中的SQL语句。 视图是一个预定义的SQL查询形式存在的表组合。 视图可以包括一个表所有的行(或一行或多行)。 视图可以通过一个或多个表查询(取决于SQL查询中有几张表)。 视图是一个虚拟表,可以允许我们限制数据访问或汇总各表中的数据。 视图是只读的,不能进行增删改操作。 //创建视图语法 CREATE [TEMP|TEMPORARY] VIEW view_name AS SELECT * FROM table_name WHERE [condition]; //实例 CREATE VIEW WEATHER_VIEW AS SELECT city,date FROM weather; //使用视图 SELECT * FROM WEATHER_VIEW; //删除视图 DROP VIEW WEATHER_VIEW; 9.TRANSACTION 事务 事务的简介: TRANSACTION事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列组成。 事务通常包含了读写操作。 当事务被提交到了DBMS(数据库管理系统),DBMS需要确保所有的操作都独立运行、互不干扰,但同时又是一个整体,如果一个操作失败,那么久整体回滚。事务的特性:
原子性:事务作为一个整体,其中的操作要么全部执行成功,要么一个失败整体回滚;
一致性:确保数据库从一个一致状态转换到另一个一致状态;
隔离性:多个事务并发执行时,一个事务的执行并不会影响到其他事务的执行;
持久性:被提交的修改应永久保存到数据库中;