数据库(Database) 是保存有组织的数据的容器(通常是一个文件或一组文件),是通过 数据库管理系统(DataBase- Management System,DBMS) 创建和操纵的容器。
DBMS 的主要目标是提供一种可以方便、高效地存取数据库信息的途径。目前较为流行的数据库管理系统有 MySQL、SQL Server、Oracle 等。
SQL 是 结构化查询语言(Structured Query Language) 的缩写,是一种数据库查询语言,用于存取数据、查询、更新和管理关系数据库系统。
数据库有两种类型,分别是 关系型数据库 和 非关系型数据库。
面对庞大的网络数据量,使用数据库可以高效且条理分明地存储数据,它使人们能够更加迅速和方便地管理数据。
原子性、非主键完全依赖主键、非主键只依赖主键
数据库范式是设计数据库时,需要遵循的一些规范。各种范式是条件递增的联系,越高的范式数据库冗余越小。常用的数据库三大范式为:
数据库连接泄露指的是如果在某次使用或者某段程序中没有正确地关闭 Connection、Statement 和 ResultSet 资源,那么每次执行都会留下一些没有关闭的连接,这些连接失去了引用而不能得到重新使用,因此就造成了数据库连接的泄漏。
数据库连接的资源是宝贵而且是有限的,如果在某段使用频率很高的代码中出现这种泄漏,那么数据库连接资源将被耗尽,影响系统的正常运转。
触发器(trigger)是与表相关的数据库对象,是用户定义在关系表上的一类由事件驱动的特殊的存储过程,在满足定义条件时触发,并执行触发器中定义的 语句集合。触发器的这种特性可以协助应用在数据库端确保 数据库的完整性。
使用场景
约束是一种简单地强加于表中一列或多列的限制,从而保证表中数据一致性(准确和可靠)。以下为六大约束:
SELECT * FROM A, B
SELECT * FROM A CROSS JOIN B
内连接(INNER JOIN)
内连接分为三类,分别是 等值连接:ON A.id = B.id、不等值连接:ON A.id > B.id 和 自连接:SELECT * FROM A T1 INNER JOIN A T2 ON T1.id = T2.pid。
外连接(LEFT JOIN/RIGHT JOIN)
左外连接:以左表为主,先查询出左表,按照 ON 后的关联条件匹配右表,没有匹配到的用 NULL 填充,可以简写成 LEFT JOIN;
右外连接:以右表为主,先查询出右表,按照 ON 后的关联条件匹配左表,没有匹配到的用 NULL 填充,可以简写成 RIGHT JOIN;
联合查询(UNION 与 UNION ALL)
SELECT * FROM A UNION SELECT * FROM B UNION ...
联合查询就是把多个结果集集中在一起,UNION 前的结果为基准,需要注意的是联合查询的 列数要相等,相同的记录行会合并;
如果使用 UNION ALL,不会合并重复的记录行,所以效率更高。
SELECT * FROM A LEFT JOIN B ON A.id = B.id UNION SELECT * FROM A RIGHT JOIN B ON A.id = B.id
举例说明:
表A
Aid name
1 qiu
2 rui
3 nan
表B
Bid score
1 100
2 99
4 80
交叉连接:笛卡尔积,select * from A cross join B结果如下:
Aid name Bid score
1 qiu 1 100
1 qiu 2 99
1 qiu 4 80
2 rui 1 100
2 rui 2 99
2 rui 4 80
3 nan 1 100
3 nan 2 99
3 nan 4 80
内连接
一般会有个ON条件,select * from A inner join B on A.Aid = B.Bid,结果如下:
Aid name Bid score
1 qiu 1 100
2 rui 2 99
外连接,分为左右外连接
左外连接,select * from A LEFT JOIN B on A.Aid = B.Bid,结果如下:
Aid name Bid score
1 qiu 1 100
2 rui 2 99
3 nan null null
右外连接,select * from A RIGHT JOIN B on A.Aid = B.Bid,结果如下:
Aid name Bid score
1 qiu 1 100
2 rui 2 99
null null 4 80
全连接,即左连接的结果+右连接的结果,SELECT * FROM A LEFT JOIN B ON A.Aid = B.Bid UNIONSELECT * FROM A RIGHT JOIN B ON A.Aid = B.Aid,结果:
Aid name Bid score
1 qiu 1 100
2 rui 2 99
3 nan null null
null null 4 80
多条 MySQL 语句嵌套使用时,内部的 MySQL 查询语句称为子查询。子查询是一个 SELECT 语句,它嵌套在另一个 SELECT、SELECT…INTO 语句、INSERT…INTO 语句、DELETE 语句、 UPDATE 语句或嵌套在另一子查询中。
三种都可以表示删除。在不再需要一张表的时候,采用 DROP;在想删除部分数据行时候,用 DELETE;在保留表而删除所有数据的时候用 TRUNCATE。
知识手册