SQL高级特性
1、约束(constraint)
约束是表示管理如何插入或处理数据库数据的规则。DBMS通过在数据库上施加约束来实施引用完整性。有的约束是在创建表的时候定义的,有的约束可以在创建表之后再定义。下面列举一些常见的约束:
- 主键
-- 在创建表的时候定义主键 CREATE TABLE table_name { row_id char(10) NOT NULL PRIMARY KEY, sex char(2) NOT NULL }; -- 在表创建后定义主键 ALTER TABLE table_name ADD CONSTRAINT PRIMARY KEY (row_id)
- 外键
-- 在创建表的时候定义外键 CREATE TABLE table_name { row_id char(10) NOT NULL PRIMARY KEY, sex char(2) NOT NULL, other_id char(10) NOT NULL REFERENCES }; -- 在表创建后定义外键 ALTER TABLE table_name ADD CONSTRAINT FOREIGN KEY (other_id) REFERENCES other_table_name (other_id)
- 唯一约束
唯一约束用来保证一列或一组列中的数据是唯一的,可以通过关键字UNIQUE来定义;唯一约束虽然类似于主键,但是它们之间还是有差异的:
(1)表可以包含多个唯一约束,但每个表中只允许一个主键
(2)唯一约束列可以含NULL值
(3)唯一约束列可以修改或更新
(4)唯一约束列的值可以重复使用
(5)唯一约束不能用来定义外键,而主键是可以的
- 检查约束
检查约束用来保证一列或一组列中的数据满足一组指定的条件,可以通过关键字CHECK来实现,以下场景中可以用到它:
(1)检查最小值和最大值
(2)指定范围
(3)只允许特定的值,例如字段的数据类型检查
-- 在创建表的时候进行字段的检查约束定义 CREATE TABLE table_name { row_id char(10) NOT NULL PRIMARY KEY, age INTEGER NOT NULL CHECK (age > 0) } -- 在创建表后进行字段的检查约束定义 ALTER TABLE table_name ADD CONSTRAINT CHECK (field_name LIKE '[MF]')
2、索引(index)
主键数据总是排序的,所以按主键检索特定行总是一种快速有效的操作。可以在表的一列或者多列上定义索引,使得DBMS保存其内容的一个排序的列表,索引可以改善数据检索的性能。使用索引时需要注意以下几点:
(1)索引改善检索操作的性能,但是会降低数据插入、修改和删除的性能,因为这些操作过程中,DBMS必须动态地更新索引
(2)索引数据可能要占据大量的存储空间
(3)索引用于数据过滤和数据排序
(4)定期检查索引,并根据需要对索引进行调整
-- 创建索引示例 CREATE INDEX col_name_index ON table_name (col_name);
3、触发器
触发器可以用来执行运行前后的处理流程,请参考此连接
阅读是一种修养,分享是一种美德。