0%

Mysql基础大全

一、MySql的语法规范

  • 不区分大小写,但建议关键字大写,表名、列名小写
  • 每条命令最好用分号结尾

二、注释

  • #注释文字(单行注释)
  • — 注释文字(单行注释)
  • /* 注释文字 */(多行注释)

三、查询

1
2
3
4
5
6
7
# 分组查询推荐尽可能使用分组前筛选,即在group by前使用where
SELECT [字段名,...]
FROM [表名,...]
WHERE [条件]
GROUP BY [字段名]
HAVING [条件]
ORDER BY ASC/DESC

3.1 连接查询

3.1.1 内连接

1
2
3
4
5
6
7
8
9
10
11
12
/*
这属于sql99语法,作用等同于不加inner join时的查询
不加inner join属于隐式连接,用inner join时,inner可以省略
等值连接在WHERE子句中判断中写
*/
SELECT [字段名,...]
FROM1 别名1
inner join2 别名2 on 连接条件
WHERE [条件]
GROUP BY [字段名]
HAVING [条件]
ORDER BY ASC/DESC

3.1.2 外连接

1
2
3
4
5
6
7
SELECT  [字段名,...]
FROM1 别名1
left/right/full join2 别名2 on 连接条件
WHERE [条件]
GROUP BY [字段名]
HAVING [条件]
ORDER BY ASC/DESC

3.1.3 内连接与外连接的区别

内连接:内连接匹配的是两个表符合连接条件的交集,不存在匹配的内容为NULL的情况

外连接:外连接分为左外连接与右外连接,左连接表示左表中记录全部查询出来,右表只显示符合条件的数据,没有匹配到右表的数据,则右表数据显示为NULL;右连接则反之。以以下示例做下说明:

  • 以下是a表
a_id a_name
1 路飞
2 索隆
3 香吉士
  • 以下是b表
b_id b_name
2 索隆
3 香吉士
4 乔巴
  • 内连接语句:select * from a a inner join a a on a.a_id = b.b_id
a_id a_name b_id b_name
2 索隆 2 索隆
3 香吉士 3 香吉士
  • 左外连接语句:select * from A A left outer join B B on a.a_id = b.b_id
a_id a_name b_id b_name
1 路飞 NULL NULL
2 索隆 2 索隆
3 香吉士 3 香吉士

3.1.4 交叉连接(笛卡尔积)

1
2
3
4
5
6
7
SELECT  [字段名,...]
FROM1 别名1
cross join2 别名2
WHERE [条件]
GROUP BY [字段名]
HAVING [条件]
ORDER BY ASC/DESC

3.1.5 子查询

3.1.6 分页查询

  • offset要显示条目的起始索引(起始索引从0开始)
  • size要显示的条目个数
  • 网页的分页显示数据需要对数据库进行分页查询
1
2
3
4
5
6
7
8
SELECT  [字段名,...]
FROM1 别名1
cross join2 别名2
WHERE [条件]
GROUP BY [字段名]
HAVING [条件]
ORDER BY ASC/DESC
LIMIT offset,size;

3.1.7 联合查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*
适用于要查询的结果来自多个表,且多个表没有直接的连接关系,但查询的信息一致时可以使用联合查询,类似于数学的并集
*/
查询语句1
union
查询语句2

# 示例
SELECT id,cname,csex FROM t_ca
UNION
SELECT t_id,tName,tGender FROM WHERE tGender='male';

# 加ALL表示会包含重复的内容
SELECT id,cname,csex FROM t_ca
UNION ALL
SELECT t_id,tName,tGender FROM WHERE tGender='male';

3.2 示例

3.2.1 查询前五条员工信息

1
2
3
SELECT * FROM employees LIMIT 0,5;  
#或者
SELECT * FROM employees LIMIT 5;

3.2.2 分页查询规律

  • page表示第几页,(page-1)*size表示每一页的起始查询位置
1
2
3
SELECT 查询列表
FROM
LIMIT (page-1)*size,size;

四、增删改

4.1 插入数据

1
2
3
4
5
6
INSERT INTO 表名 VALUES(元组值);
INSERT INTO 表名(列名序列) VALUES(元组值);
INSERT INTO 表名(列名序列) VALUES(元组值),(元组值),...;
INSERT INTO 表名 SET 列名=值,列名=值,... #用的少
INSERT INTO 表名(列名序列) SELECT 查询语句;
INSERT INTO 表名(列名序列) TABLE 表名2;

4.2 删除数据

1
DELETE FROM 表名 WHERE 条件表达式

4.3 修改数据

1
2
UPDATE 表名 SET 列名=值表达式,列名=值表达式,... WHERE 条件表达式
UPDATE 表名 SET ROW=元组 WHERE 条件表达式

五、视图

5.1 视图的创建

1
CREATE VIEW 视图名(列名序列) AS SELECT查询语句

5.2 视图的撤销

1
DROP VIEW 视图名

六、Mysql数据类型

6.1 数值型

类型 大小 范围(有符号) 范围(无符号)
TINYINT 1 byte (-128,127) (0,255)
SMALLINT 2 bytes (-32 768,32 767) (0,65 535)
MEDIUMINT 3 bytes (-8 388 608,8 388 607) (0,16 777 215)
INT或INTEGER 4 bytes (-2 147 483 648,2 147 483 647) (0,4 294 967 295)
BIGINT 8 bytes
FLOAT 4 bytes
DOUBLE 8 bytes
DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2

6.2 日期型

6.3 字符型