SQL笔记:
1 常用数据类型
INT | 整型 | 4字节整数类型,范围约+/-21亿 |
---|---|---|
BIGINT | 长整型 | 8字节整数类型,范围约+/-922亿亿 |
REAL | 浮点型 | 4字节浮点数,范围约+/-1038 |
DOUBLE | 浮点型 | 8字节浮点数,范围约+/-10308 |
DECIMAL(M,N) | 高精度小数 | 由用户指定精度的小数,例如,DECIMAL(20,10)表示一共20位,其中小数10位,通常用于财务计算 |
CHAR(N) | 定长字符串 | 存储指定长度的字符串,例如,CHAR(100)总是存储100个字符的字符串 |
VARCHAR(N) | 变长字符串 | 存储可变长度的字符串,例如,VARCHAR(100)可以存储0~100个字符的字符串 |
BOOLEAN | 布尔类型 | 存储True或者False |
DATE | 日期类型 | 存储日期,例如,2018-06-22 |
TIME | 时间类型 | 存储时间,例如,12:20:59 |
DATETIME | 日期和时间类型 | 存储日期+时间,例如,2018-06-22 12:20:59 |
TINYINT | 整形 | 0~255 |
2 约定:SQL关键字总是大写,以示突出,表名和列名均使用小写。
3 表的每一行称为记录(Record),记录是一个逻辑意义上的数据。
表的每一列称为字段(Column),同一个表的每一行记录都拥有相同的若干字段。
4 通常情况下,字段应该避免允许为NULL。
5 主键是关系表中记录的唯一标识。主键的选取非常重要:主键不要带有业务含义,而应该使用BIGINT自增或者GUID类型。主键也不应该允许NULL
。
可以使用多个列作为联合主键,但联合主键并不常用。
6 关系数据库通过外键可以实现一对多、多对多和一对一的关系。外键既可以通过数据库来约束,也可以不设置约束,仅依靠应用程序的逻辑来保证。
7 通过对数据库表创建索引,可以提高查询速度。
通过创建唯一索引,可以保证某一列的值具有唯一性。
8 使用SELECT查询的基本语句
SELECT * FROM <表名>
可以查询一个表的所有行和所有列的数据。
许多检测工具会执行一条SELECT 1;
来测试数据库连接。
9 通过WHERE
条件查询,可以筛选出符合指定条件的记录。条件有NOT、
AND、
OR。注意字符串需要用单引号括起来。
10 使用SELECT *
表示查询表的所有列,使用SELECT 列1, 列2, 列3
则可以仅返回指定列,这种操作称为投影。
SELECT
语句可以对结果集的列进行重命名。
11 使用ORDER BY
可以对结果集进行排序;
可以对多列进行升序、倒序排序,对应ASC 与 DESC。
12 使用
LIMIT <M> OFFSET <N>
可以对结果集进行分页,每次查询返回结果集的一部分;
分页查询需要先确定每页的数量和当前页数,然后确定LIMIT
和OFFSET
的值。随着N
越来越大,查询效率也会越来越低。
13 聚合函数
COUNT | 表示查询行数 |
---|---|
SUM | 计算某一列的合计值,该列必须为数值类型 |
AVG | 计算某一列的平均值,该列必须为数值类型 |
MAX | 计算某一列的最大值 |
MIN | 计算某一列的最小值 |
分组使用GROUP BY
14 多表查询又称笛卡尔查询。可以获取M x N行记录;
15 注意INNER JOIN查询的写法是:
-
先确定主表,仍然使用
FROM <表1>
的语法; -
再确定需要连接的表,使用
INNER JOIN <表2>
的语法; -
然后确定连接条件,使用
ON <条件...>
,这里的条件是s.class_id = c.id
,表示students
表的class_id
列与classes
表的id
列相同的行需要连接; -
可选:加上
WHERE
子句、ORDER BY
等子句
INNER JOIN是最常用的一种JOIN查询,它的语法是
SELECT ... FROM <表1> INNER JOIN <表2> ON <条件...>;
16 在执行
UPDATE语句时要非常小心,最好先用
SELECT语句来测试
WHERE条件是否筛选出了期望的记录集,然后再用
UPDATE`更新。
17 命令行程序mysql
实际上是MySQL客户端,真正的MySQL服务器程序是mysqld
,在后台运行。MySQL Client和MySQL Server的关系如下:
┌──────────────┐ SQL ┌──────────────┐
│ MySQL Client │───────>│ MySQL Server │
└──────────────┘ TCP └──────────────┘
在MySQL Client中输入的SQL语句通过TCP连接发送到MySQL Server。默认端口号是3306,即如果发送到本机MySQL Server,地址就是127.0.0.1:3306
。
也可以只安装MySQL Client,然后连接到远程MySQL Server。假设远程MySQL Server的IP地址是10.0.1.99
,那么就使用-h
指定IP或域名:
mysql -h 10.0.1.99 -u root -p
MySQL Client的可执行程序是mysql,MySQL Server的可执行程序是mysqld。
18 数据库事务具有ACID这4个特性:
-
A:Atomic,原子性,将所有SQL作为原子工作单元执行,要么全部执行,要么全部不执行;
-
C:Consistent,一致性,事务完成后,所有数据的状态都是一致的,即A账户只要减去了100,B账户则必定加上了100;
-
I:Isolation,隔离性,如果有多个事务并发执行,每个事务作出的修改必须与其他事务隔离;
-
D:Duration,持久性,即事务完成后,对数据库数据的修改被持久化存储。
使用BEGIN
开启一个事务,使用COMMIT
提交一个事务,这种事务被称为显式事务