读书笔记--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也提供了交互式的管理实用程序。
读书笔记--SQL必知必会22--高级SQL特性的更多相关文章
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 读书笔记--SQL必知必会18--视图
读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...
- 读书笔记--SQL必知必会--建立练习环境
书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL in 10 Minutes - Fourth Edition> MyS ...
- 读书笔记--SQL必知必会12--联结表
12.1 联结 联结(join),利用SQL的SELECT在数据查询的执行中联结表. 12.1.1 关系表 关系数据库中,关系表的设计是把信息分解成多个表,一类数据一个表,各表通过某些共同的值互相关联 ...
- SQL语法语句总结(《SQL必知必会》读书笔记)
一.SQL语句语法 ALTER TABLE ALTER TABLE 用来更新已存在表的结构. ALTER TABLE tablename (ADD|DROP column datatype [NULL ...
- 《mysql必知必会》读书笔记--存储过程的使用
以前对mysql的认识与应用只是停留在增删改查的阶段,最近正好在学习mysql相关内容,看了一本书叫做<MySQL必知必会>,看了之后对MySQL的高级用法有了一定的了解.以下内容只当读书 ...
- MySQL必知必会1-20章读书笔记
MySQL备忘 目录 目录 使用MySQL 检索数据 排序检索数据 过滤数据 数据过滤 用通配符进行过滤 用正则表达式进行搜索 创建计算字段 使用数据处理函数 数值处理函数 汇总数据 分组数据 使用子 ...
- 《SQL必知必会》学习笔记二)
<SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...
- 【SQL必知必会笔记(3)】SELECT语句的WHERE子句数据过滤操作
上个笔记主要介绍了利用SELECT语句检索单个/多个/所有列,并利用DISTINCT关键字检索具有唯一性的值.利用LIMIT/OFFSET子句限制结果:以及利用ORDER BY子句排序检索出的数据,主 ...
- 【SQL必知必会笔记(2)】检索数据、排序检索数据
上个笔记中介绍了一些关于数据库.SQL的基础知识,并且创建我们后续练习所需的数据库.表以及表之间的关系,从本文开始进入我们的正题:SQL语句的练习. 文章目录 1.检索数据(SELECT语句) 1.1 ...
随机推荐
- 【AR实验室】ARToolKit之制作自己的Marker/NFT
0x00 - 前言 看过example后,就会想自己动动手,这里改改那里修修.我们先试着添加自己喜欢的marker/nft进行识别. 比如我做了一个法拉利的marker: 还有网上找了一个法拉利log ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- ASP.NET Core HTTP 管道中的那些事儿
前言 马上2016年就要过去了,时间可是真快啊. 上次写完 Identity 系列之后,反响还不错,所以本来打算写一个 ASP.NET Core 中间件系列的,但是中间遇到了很多事情.首先是 NPOI ...
- 几个比较”有意思“的JS脚本
1.获取内网和公网真实IP地址(引用地址) <!DOCTYPE html> <html> <head> <meta http-equiv="Cont ...
- 旺财速啃H5框架之Bootstrap(一)
接下来的时间里,我将和大家一起对当前非常流行的前端框架Bootstrap进行速度的学习,以案例的形式.对刚开始想学习Bootstrap的同学而找不着边的就很有帮助了.如果你想详细的学习Bootstra ...
- 自定义搭建PHP开发环境
学习了一段时间php了,因为之前是刚接触php,所以用的是集成安装包(wamp).现在想进一步了解apache.mysql.php之间的关系以及提升自己所以进行自定义搭建PHP开发环境.废话不多说,请 ...
- 个人网站对xss跨站脚本攻击(重点是富文本编辑器情况)和sql注入攻击的防范
昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无限循环弹出框的脚本,估计 ...
- Git分布式版本控制教程
Git分布式版本控制Git 安装配置Linux&Unix平台 Debian/Ubuntu $ apt-get install git Fedora $ ) $ dnf and later) G ...
- Git的四个基本概念及 git的工作流程
- 在centos7(EL7.3 即 kernel-3.10.0-514.X )上安装BCM4312无线网卡驱动要注意的问题
我新装的centos7主机无法使用里面自带的网卡,查询后发现网卡型号为BCM4312.我在看资料安装的过程中遇到了些问题,纠结了好久,现在分享下要注意的点,为后来的遇到同样问题的人提供点帮助.现在开始 ...