读书笔记--SQL必知必会22--高级SQL特性
22.1 约束
约束(constraint),管理如何插入或处理数据库数据的规则。
DBMS通过在数据库表上施加约束来实施引用完整性。
大多数约束是在表定义中定义的。
22.1.1 主键
主键,用来保证一列(或一组列)的值唯一标识表中的每一行。
有了主键,可以安全地UPDATE或DELETE特定行。
- 任意两行的主键都不相同。
- 每行都具有一个主键值(即列中不允许NULL值)。
- 主键值不能重用。如果从表中删除某一行,其主键值不能分配给新行。
22.1.2 外键
外键是表中的一列,其值必须列在另一表的主键中。
外键有助防止意外删除。在定义外键后,DBMS不允许删除在另一个表中具有关联的行。
有些DBMS支持称为级联删除(cascading delete)的特性。如果启用,该特性在从一个表中删除行时删除所有相关的数据。
22.1.3 唯一约束
唯一约束用来保证一列(或一组列)中的数据时唯一的。
不同于主键,唯一约束列可包含NULL值、可修改或更新、可重复使用、不能用来定义外键。
表可以包含多个唯一约束,但每个表只允许一个主键。
22.1.4 检查约束
检查约束用来保证一列(或一组列)中的数据满足一组指定的条件。
- 检查最大值或最小值
- 指定范围
- 只允许特定的值
检查约束在数据类型内又做了进一步的限制,可以确保数据有效。
有些DBMS允许用户自定义数据类型,可以在定义数据类型时包含检查约束,然后将此数据类型用于表的定义。
22.2 索引
索引用来排序数据以加快搜索和排序操作的速度。
索引必须唯一命名。
可以在一个或多个列上定义索引,使DBMS保存其内容的一个排过序的列表。
DBMS搜索排过序的索引,找出匹配的位置,然后检索这些行。
- 索引改善检索操作的性能,但降低数据操作的性能
- 索引数据可能占用大量存储空间
- 索引适用取值较多的数据过滤和排序
- 索引中可以定义多个列
表数据的变化可能会导致索引难以长时间高效适用,建议定期检查索引并调整。
22.3 触发器
触发器是特殊的存储过程,在特定的数据库活动发生时自动执行。
触发器可以与特定单个表上的INSERT、UPDATE和DELETE操作(或组合)相关联。
常见用途:
- 保证数据一致
- 基于某个表的变动在其他表上执行活动
- 进行额外的验证并根据需要回退数据
- 计算列的值或更新时间戳
不同的DBMS的触发器定义和语法差异巨大。
一般来说,约束的处理比触发器快,建议使用约束。
22.4 数据库安全
任何安全系统的基础都是用户授权和身份确认。
大多数DBMS利用提供给管理员的管理机制授予或限制对数据的访问。
安全性使用SQL的GRANT和REVOKE语句来管理。
大多数DBMS也提供了交互式的管理实用程序。
最新文章
- No Entity Framework provider found for the ADO.NET provider with invariant
- 学习的目的:理解<;转>;
- linux启动执行某个脚本
- SSH三大框架的工作原理及流程
- Android抽象布局——include、merge 、ViewStub
- set_include_path详细解释
- Alljoyn 概述(2)
- Spring学习笔记--依赖注入
- hdu1052 Tian Ji -- The Horse Racing 馋
- 计算机网络之IP协议族
- lua的多种实现方式(1-100的和)
- Git(创建与合并分支)
- IDApython教程(五)
- ebs 12.1.1 单节点多用户安装
- nodejs+nginx获取真实ip
- SolrCloud集群配置
- FCC JS基础算法题(7):Chunky Monkey(分割数组)
- Structs 2 session 学习
- iterms 快捷键
- OpenVAS漏洞扫描基础教程之创建用户
热门文章
- 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新
- MVVM模式和在WPF中的实现(二)数据绑定
- SQL Server 致程序员(容易忽略的错误)
- iOS开发系列--打造自己的&ldquo;美图秀秀&rdquo;
- nodejs创建http服务器
- HTML文档声明
- 初探Vue
- Exception in thread ";main"; java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
- 设计模式C#合集--工厂方法模式
- 品牌营销:不要Beat,要逼格!