数据库系统知识点整理
一、基础查询、视图与数据完整性
1. 视图的定义
视图是一种虚拟的表,其本质是对应于一条 SELECT 语句并将结果集赋予一个名字。可以对视图进行
增,删,改,查等操作。特别地,对视图的修改不影响基本表。相比多表查询,它使得我们获取数据更容
易。
2. Drop、Delete 与 Truncate 的区别
� DELETE 用来删除表的全部或者一部分数据行,可以回滚,可以带 WHERE 子句,会触发触发器
� TRUNCATE 删除表中的所有数据,不能回滚,不会触发触发器,不可带 WHERE 子句,速度更快
� DROP 命令从数据库中删除表,不能回滚,不会触发触发器,不可带 WHERE 子句,速度最快
CREATE、TRUNCATE、DROP 属于 DDL(Data Definition Language)
INSERT、DELETE、UPDATE 属于 DML(Data Manipulation Language)
SELECT、FROM、WHERE 属于 DQL(Data Query Language)
GRANT、ROLLBACK、COMMIT 属于 DCL(Data Control Language)
3. 查询语句不同元素的执行先后顺序
� Select
� From:From 的表关联的解析顺序是从右向左的,因此尽量将数据量小的表放在最右边
� Where:Where 条件的解析顺序是自下而上的
� Group By
� Having
� Order By
4. 临时表
� 临时表用于保存一些临时数据,仅在当前连接可见,关闭连接时 MySQL 会自动删除表并释放所有
空间,其 SQL 语句为 create temporary table
5. 内连接、外连接、交叉连接(笛卡尔积)
� 内连接:用于返回连接表中符合连接条件和查询条件的数据行,通常有等值连接和不等连接
� 外连接:分左外连接(返回左表中的所有行,如果左表中行在右表中没有匹配行,则结果中右表中的
列返回空值)、右外连接(返回右表中的所有行,如果右表中行在左表中没有匹配行,则结果中左表
中的列返回空值)和全外连接(返回左表和右表中的所有行,当某行在另一表中没有匹配行,则另一
表中的列返回空值)
� 笛卡尔积:返回左表中的所有行,左表中的每一行与右表中的所有行组合。
6. 内连接和 WHERE 的区别
� 使用 JOIN 和 ON 对两表进行连接时,在对两表的数据行进行匹配时,会先判断数据行是否符合 ON
语句后面的条件,再决定是否 JOIN
� 使用 FROM T1, T2 WHERE 时,会先在内存中先生成一张数据量比较大的笛卡尔积表,再进行筛选
因此当两张表的数据量比较大,又需要连接查询时,应该使用 JOIN
7. VARCHAR 和 CHAR 的使用场景
VARCHAR
� 用于存储变长字符串,只占用必要的存储空间
� 应该使用最小符合需求的长度最为长度,存储效率低于 CHAR
� 适合字符串最大长度比平均长度大很多,字符串列很少被更新