教程:廖雪峰SQL教程
主键是关系表中记录的唯一标识。选取主键的一个基本原则是:不使用任何业务相关的字段作为主键。
ALTER TABLE <student> ADD CONSTRAINT <pk_id> PRIMARY KEY (<id>);外键是用来关联 2 个表结构的,表直接的约束分为以下 3 种:
一对一一对多 - 外键建立在‘多’的表中(即从表)多对多 - 需要建立中间表 创建外键ALTER TABLE <student> ADD CONSTRAINT <fk_class_id> FOREIGN KEY (<class_id>) REFERENCES classes (<id>); 删除外键ALTER TABLE <students> DROP FOREIGN KEY <fk_class_id>;索引是关系数据库中对某一列或多个列的值进行预排序的数据结构。通过使用索引,可以让数据库系统不必扫描整个表,而是直接定位到符合条件的记录,这样就大大加快了查询速度。
ALTER TABLE <students> ADD INDEX <idx_name_score> (<name>, <score>);唯一索引
ALTER TABLE <students> ADD UNIQUE INDEX <uni_name> (<name>);根据业务要求,像身份号、手机号、邮箱地址等,它们具有业务含义不易作为主键,但是又具有唯一性:即不能出现两条记录存储了同一个身份证号。这个时候,就可以给该列添加一个唯一约束。
ALTER TABLE <students> ADD CONSTRAINT <uni_name> UNIQUE (<name>);不带 FROM 子句的 SELECT 语句有一个有用的用途,就是用来判断当前到数据库的连接是否有效。许多检测工具会执行一条 SELECT 1; 来测试数据库连接。
基本查询 - SELECT * FROM <students>
条件查询 - SELECT * FROM <students> WHERE id = 1
投影查询 - SELECT id, name FROM <students>
排序 - SELECT * FROM <students> ORDER BY id DESC NOTE: OREDER BY 要在 WHERE 条件后
分页查询 - SELECT * FROM <students> LIMIT <10> OFFSET <0> pageSize - LIMIT pageIndex - OFFSET=pageSize * (pageIndex - 1), pageIndex 从 1 开始,而 OFFSET 从 0 开始。
聚合查询 聚合函数:COUNT(), SUM(), AVG(), MAX(), MIN() 通过 GROUP BY 进行分组 SELECT <class_id>, <gender>, COUNT(*) num FROM <students> GROUP BY <class_id>, <gender>;
多表查询 - SELECT * FROM <students>, <classes>; 获得的集合为 A 表行数 * B 表行数
连接查询
内连接(INNER JOIN)外连接(OUTER JOIN) 左连接(LEFT OUTER JOIN)右连接(RIGHT OUTER JOIN)全连接(FULL OUTER JOIN) INNER JOINLEFT OUTER JOINRIGHT OUTER JOINFULL OUTER JOIN两张表都存在的记录左表存在的记录右表存在的记录左右表都存在的记录关系数据库的基本操作就是增删改查,即 CRUD:Create、Retrieve、Update、Delete。 对于增、删、改,对应的SQL语句分别是:
INSERT:插入新记录 - INSERT INTO <表名> (字段1, 字段2, ...) VALUES (值1, 值2, ...);UPDATE:更新已有记录 - UPDATE <表名> SET 字段1=值1, 字段2=值2, ... WHERE ...;DELETE:删除已有记录 - DELETE FROM <表名> WHERE ...;多条语句作为一个整体进行操作的功能,被称为数据库事务。数据库事务可以确保该事务范围内的所有操作都可以全部成功或者全部失败。如果事务失败,那么效果就和没有执行这些 SQL 一样,不会对数据库数据有任何改动。
BEGIN 开启一个事务COMMIT 提交一个事务ROLLBACK 回滚事务Serializable 虽然隔离级别最高,但是效率会大大下降