快速回顾

语句 语法
AND / OR SELECT column_name(s) FROM table_name WHERE condition AND|OR condition
ALTER TABLE (add column) ALTER TABLE table_name ADD column_name datatype
ALTER TABLE (drop column) ALTER TABLE table_name DROP COLUMN column_name
AS (alias for column) SELECT column_name AS column_alias FROM table_name
AS (alias for table) SELECT column_name FROM table_name AS table_alias
BETWEEN SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2
CREATE DATABASE CREATE DATABASE database_name
CREATE INDEX CREATE INDEX index_name ON table_name (column_name)
CREATE TABLE CREATE TABLE table_name ( column_name1 data_type, column_name2 data_type, ……. )
CREATE UNIQUE INDEX CREATE UNIQUE INDEX index_name ON table_name (column_name)
CREATE VIEW CREATE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition
DELETE FROM DELETE FROM table_name (Note: Deletes the entire table!!)orDELETE FROM table_name WHERE condition
DROP DATABASE DROP DATABASE database_name
DROP INDEX DROP INDEX table_name.index_name
DROP TABLE DROP TABLE table_name
GROUP BY SELECT column_name1,SUM(column_name2) FROM table_name GROUP BY column_name1
HAVING SELECT column_name1,SUM(column_name2) FROM table_name GROUP BY column_name1 HAVING SUM(column_name2) condition value
IN SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,..)
INSERT INTO INSERT INTO table_name VALUES (value1, value2,….)orINSERT INTO table_name (column_name1, column_name2,…) VALUES (value1, value2,….)
LIKE SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern
ORDER BY SELECT column_name(s) FROM table_name ORDER BY column_name [ASC|DESC]
SELECT SELECT column_name(s) FROM table_name
SELECT * SELECT * FROM table_name
SELECT DISTINCT SELECT DISTINCT column_name(s) FROM table_name
SELECT INTO (used to create backup copies of tables) SELECT * INTO new_table_name FROM original_table_name or SELECT column_name(s) INTO new_table_name FROM original_table_name
TRUNCATE TABLE (deletes only the data inside the table) TRUNCATE TABLE table_name
UPDATE UPDATE table_name SET column_name=new_value [, column_name=new_value] WHERE column_name=some_value
WHERE SELECT column_name(s) FROM table_name WHERE condition

基本操作

1
2
net start mysql		-- 启动服务(windows命令行操作)
mysql -h 地址 -P 端口 -u 用户名 -p 密码 -- 连接服务器

数据库操作

创建库

CREATE DATABASE[IF NOT EXISTS] 数据库名 数据库选项

查看库

SHOW DATABASES[ LIKE 'PATTERN']

修改库

ALTER DATABASE 库名 选项信息

删除库

DROP DATABASE[ IF EXISTS] 数据库名

表操作

创建表

1
2
3
4
5
6
7
8
CREATE [TEMPORARY] TABLE[IF NOT EXISTS] [库名]表名 ( 表的结构定义 )[表选项]
-- 表选项:
CHARSET = charset_name -- 字符集
ENGINE = engine_name -- 存储引擎
AUTO_INCREMENT = 行数 -- 自增起始数
DATA DIRECTORY = '目录' -- 数据文件目录
INDEX DIRECTORY = '目录' -- 索引文件目录
COMMENT = 'string' -- 表注释

查看表

1
2
3
SHOW CREATE TABLE 表名 -- 信息更详细
DESC 表名 -- 查看表结构
SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern']

修改表

1
2
3
4
5
6
7
8
9
10
11
ALTER TABLE 表名 操作名
-- 操作名
ADD[ COLUMN] AFTER|First -- 增加字段
ADD PRIMARY KEY(字段名) -- 创建主键
ADD UNIQUE|INDEX [索引名] (字段名) -- 创建唯一索引或者普通索引
DROP[ COLUMN] 字段名 -- 删除字段
MODIFY[ COLUMN] 字段名 字段属性 -- 支持对字段属性进行修改,不能修改字段名(所有原有属性也需写上)
CHANGE[ COLUMN] 原字段名 新字段名 字段属性 -- 支持对字段名修改
DROP PRIMARY KEY -- 删除主键(删除主键前需删除其AUTO_INCREMENT属性)
DROP INDEX 索引名 -- 删除索引
DROP FOREIGN KEY 外键 -- 删除外键

删除表

1
2
DROP TABLE[ IF EXISTS] 表名
TRUNCATE [TABLE] 表名

区别:

truncate delete
删除表再创建 逐条删除
重置auto_increment的值 不重置auto_increment的值
不知道删除了几条 知道删除了几条
保留分区 不保留分区

其他表操作

1
2
3
4
5
6
CREATE TABLE 表名 LIKE 要复制的表名						-- 复制表结构
CREATE TABLE 表名 [AS] SELECT * FROM 要复制的表名 -- 复制表的结构与数据
CHECK TABLE tbl_name [, tbl_name] ... [option] ... -- 检查表是否有错误
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... -- 优化表
REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... [QUICK] [EXTENDED] [USE_FRM] -- 修复表
ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... -- 分析表

数据操作

1
2
3
INSERT [INTO] 表名 [(字段列表)] VALUES (值列表)[, (值列表), ...]

INSERT [INTO] 表名 SET 字段名=值[, 字段名=值, ...]

1
DELETE FROM 表名[ 删除条件子句]		-- 没有删除条件子句,则会删除全部

1
UPDATE 表名 SET 字段名=新值[, 字段名=新值] [更新条件]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SELECT [ALL|DISTINCT] select_expr FROM -> WHERE -> GROUP BY [合计函数] -> HAVING -> ORDER BY -> LIMIT

/*
ALL|DISTINCT:
ALL:显示全部,默认为ALL
DISTINCT:去除重复数据
select_expr:
1.可以用 * 表示所有字段。
2.可以使用表达式(计算公式、函数调用、字段也是个表达式)
3.可以为每个列使用别名
GROUP BY:
分组子句
合计函数:
需要配合GROUP BY使用
count、sum、max、min、avg……
HAVING:
相当于命令行中的管道符 “|”,懂我意思吧
ORDER BY:
升序:ASC
降序:DESC
LIMIT:
限制结果条数
*/

常见函数

字符函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#1.length 获取参数值的字节个数
SELECT LENGTH('join');
SELECT LENGTH('张三丰') #一个汉字占三个字节;

#2.concat 拼接字符串
SELECT CONCAT(last_name,'_',first_name) 姓名 FROM employees;

#3.upper、lower
SELECT UPPER('john');
SELECT LOWER('JOHN');

#4.substr、substring
#索引从1开始
SELECT SUBSTR('李莫愁爱上陆展元',7) out_put; #截取从指定索引处后面的所有字符
SELECT SUBSTR('李莫愁爱上陆展元',1,3) out_put; #截取从索引处开始指定字符长度的字符

#5.instr 返回子串在大字符串中的起始索引,找不到则返回0
SELECT INSTR('杨不悔爱上了殷六侠','殷六侠') AS out_put FROM employees;

#6.trim 去除两边字符
SELECT TRIM(' 张翠山 ');
SELECT TRIM('a' FROM 'aaa张翠山aaa');

#7.lpad、rpad 用指定的字符左/右填充指定的长度
SELECT LPAD('殷素素',10,'*');

#8.replac 替换
SELECT REPLACE('(周芷若)张无忌爱上了周芷若','周芷若','赵敏')

数学函数

1
2
3
4
5
round()		#取整
ceil() #向上取整
floor() #向下取整
truncate() #截断
mod() #取余

日期函数

1
2
3
4
5
6
7
8
9
10
11
12
13
now()
curdate()
curtime()
year()
mouth()
mouthname() #英文月份名
day()
hour()
minute()
second()

str_to_date('9-13-1999','%m-%d-%Y') #将日期格式的字符转化成指定格式的日期
date_fromat('2018/6/6','%Y年%m月%d日') #将日期转换成字符
格式符 功能
%Y 四位年份
%y 两位年份
%m 月份(01,02…)
%c 月份(1,2…)
%d 日(01,02,…)
%H 小时(24小时)
%h 小时(12小时)
%i 分钟
%s

控制函数

1
2
3
4
5
6
7
8
9
10
1.if()    #相当于java三目运算
if(10>5,'大','小')

2.case
case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1
when 常量2 then 要显示的值2或语句2
...
else 要显示的值n或语句n
end;

分组函数

1
2
3
4
5
6
7
8
9
10
11
12
13
功能:用作统计使用,又称聚合函数或统计函数

分类:sum、avg、max、min、count

特点: 1.sum、avg一般用于处理数值型
count、min、max可以处理任何类型
2.分组函数都忽略null值
3.可以和distinct搭配实现去重
select sum(distinct salary),sum(salary) from employees;
4.count函数详细介绍
select (*) from employees;
//统计行数
5.和分组函数一同查询的字段要求是group by后的字段

参考:

w3school:https://www.w3school.com.cn/sql/sql_quickref.asp

格物:https://shockerli.net/post/1000-line-mysql-note/

javaGuide:https://snailclimb.gitee.io/javaguide/#/docs/database

尚硅谷:https://www.bilibili.com/video/BV12b411K7Zu?from=search&seid=12749719158094983926