文章目录
基础
- 模式定义了数据如何存储、存储何种数据以及数据如何分解等信息,数据库和表都有模式。
- 主键的值不允许修改,也不允许复用(不能使用已经删除的主键值赋给新数据行的主键)。
- SQL(Structured Query Language),标准 SQL 由 ANSI 标准委员会管理,从而称为 ANSI SQL
- 各个 DBMS 都有自己的实现,如 PL/SQL、Transact-SQL 等。
- SQL 语句不区分大小写,但是数据库表名、列名和值是否区分依赖于具体的 DBMS 以及配置
创建和修改表
增删改查
增加
修改
删除
查询
distinct和limit
排序与过滤
排序
SELECT *
FROM mytable
ORDER BY col1 DESC, col2 ASC;
过滤
- AND和OR用于连接多个过滤条件,优先处理AND,可食用()来决定优先级
通配符(❤)
- 只能用于文本字段
- % 匹配 >=0 个任意字符;
- _ 匹配 ==1 个任意字符;
- 可以匹配集合内的字符,例如 [ab] 将匹配字符 a 或者 b。用脱字符 ^ 可以对其进行否定,也就是不匹配集合
内的字符。 - 使用 Like 来进行通配符匹配
计算字段
- as关键字与concat连接两个字段
函数
文本处理
日期时间处理
- 日期格式:YYYY-MM-DD
- 时间格式:HH:MM:SS
## 科学数据计算
分组
- 分组就是把具有相同的数据值的行放在同一组中。
- 可以对同一组数据使用汇总函数进行处理,例如求分组数据的平均值等。
- 指定的分组字段除了能按该字段进行分组,也会自动按该字段进行排序
- 大多数 SQL 实现不支持 GROUP BY 列具有可变长度的数据类型
子查询
连接
- 连接用于连接多个表,使用 JOIN 关键字,并且条件语句使用 ON 而不是 WHERE。
- 连接可以替换子查询,并且比子查询的效率一般会更快。
- 可以用 AS 给列名、计算字段和表名取别名,给表名取别名是为了简化 SQL 语句以及连接相同表
内连接
自连接
- 自连接可以看成内连接的一种,只是连接的表是自身而已。
- 一张员工表,包含员工姓名和员工所属部门,要找出与 Jim 处在同一部门的所有员工姓名
自然连接
外连接
组合查询
视图
- 视图是虚拟的表,本身不包含数据,也就不能对其进行索引操作
- 对视图的操作和对普通表的操作一样。
- 视图好处:
- 简化SQL 操作,比如复杂的连接;
- 只使用实际表的一部分数据
- 通过只给用户访问视图的权限,保证数据的安全性
- 更改数据格式和表示
存储过程(?)
- 存储过程可以看成是对一系列 SQL 操作的批处理
- 使用存储过程的好处:
- 代码封装,保证了一定的安全性;
- 代码复用;
- 由于是预先编译,因此具有很高的性能。
- 命令行中创建存储过程需要自定义分隔符,因为命令行是以 ; 为结束符,而存储过程中也包含了分号,因此会错误把这部分分号当成是结束符,造成语法错误。
- 包含 in、out 和 inout 三种参数。
- 给变量赋值都需要用 select into 语句。
- 每次只能给一个变量赋值,不支持集合的操作
游标(?)
- 在存储过程中使用游标可以对结果集进行移动遍历。
- 游标主要用于交互式应用,其中用户需要对数据集中的任意行进行浏览和修改。
- 使用游标的四个步骤:
- 声明游标,这个过程没有实际检索出数据;
- 打开游标;
- 取出数据;
- 关闭游标;
事务处理
- 基本术语:
- 事务(transaction)指一组 SQL 语句;
- 回退(rollback)指撤销指定 SQL 语句的过程;
- 提交(commit)指将未存储的 SQL 语句结果写入数据库表;
- 保留点(savepoint)指事务处理中设置的临时占位符(placeholder),你可以对它发布回退(与回退整个事务处理不同)。
- 不能回退 SELECT 语句,回退 SELECT 语句也没意义;也不能回退 CREATE 和 DROP 语句。
- MySQL 的事务提交默认是隐式提交,每执行一条语句就把这条语句当成一个事务然后进行提交。
- 当出现 STARTTRANSACTION 语句时,会关闭隐式提交
- 当 COMMIT 或 ROLLBACK 语句执行后,事务会自动关闭,重新恢复隐式提交
- 通过设置 autocommit 为 0 可以取消自动提交;autocommit 标记是针对每个连接而不是针对服务器的。
- 如果没有设置保留点,ROLLBACK 会回退到 START TRANSACTION 语句处;如果设置了保留点,并且在 ROLLBACK中指定该保留点,则会回退到该保留点
START TRANSACTION
// ...
SAVEPOINT delete1
// ...
ROLLBACK TO delete1
// ...
COMMIT
字符集
权限管理
- myuser是账户名