MySQL-关系型数据库
本文最后更新于70 天前,其中的信息可能已经过时,如有错误请发送邮件到qiqin-chang@qq.com

基础配置:

依赖:

<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <scope>runtime</scope>
</dependency>

配置:

spring:  
datasource:    
url: jdbc:mysql://127.0.0.1:3306/mp?useUnicode=true&characterEncoding=UTF- 8&autoReconnect=true&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true    
driver-class-name: com.mysql.cj.jdbc.Driver    
username: root    
password: 123456

第一章 DDL-创建操作

DDL-数据库操作:

查询:

查询所有数据库:

SHOW DATASHOW;

查询当前数据库:

SELECT DATABASE();

创建:

CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];

删除:

DROP DATABASE [IF EXISTS] 数据库名;

使用:

USE 数据库名;

DDL-表操作:

查询:

查询当前数据库所有表:

SHOW TABLE;

查询表结构:

DESC 表名;

查询指定表的建表语句:

SHOW CREATE TABLE 表名;

创建:

CREATE TABLE 表名( 字段名 字段类型 [COMMENT 字段注释],字段名 字段类型 [COMMENT 字段注释]) [COMMENT 表注释];

修改:

添加字段:

ALTER TABLE 表名 ADD 字段名 类型(长度)[COMMENT 注释] [约束];

修改数据类型:

ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);

修改字段名和字段类型:

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度)[COMMENT 注释] [约束]

删除字段:

ALTER TABLE 表名 DROP 字段名;

修改表名:

ALTER TABLE 表名 RENAME TO 新表名;

删除表:

DROP TABLE [IF EXISTS] 表名;

删除指定表,并重新创建该表:

TRUNCATE 表名;

数值类型:

类型大小描述
tinyInt1小整数值
smallInt2大整数值
mediumInt3大整数值
int或integer4大整数值
bigInt8极大整数值
flaoat4单精度浮点数值
double8双精度浮点数值
decimal小数值(精确定点数)

字符串类型:

类型大小描述
char255定长字符串
varChar65535边长字符串
tinyBlob255不超过255个字符的二进制数
tinyText255短文本字符串
blob65535二进制形式的长文本数据
text65535长文本数据
mediumBlob16777215二进制形式的中等长度文本数据
mediumText16777215中等长度文本数据
longBlob4294967295二进制形式的极大文本数据
longText4294967295极大文本数据

日期类型:

类型大小格式描述
DATA3YYYY-MM-DD日期值
TIME3HH:MM:SS时间值或持续值
YEAR1YYYY年份值
DATETIME8YYYY-MM-DD HH:MM:SS混合日期和时间值
TIMESTAMP4YYYY-MM-DD HH:MM:SS混合日期和时间值,时间戳

第二章 DML-更新操作

DML-添加数据:

给指定字段添加数据:

INSERT INTO 表名 (字段名1,字段名2...)VALUE(值1,值2...);

给全部字段添加数据:

INSERT INTO 表名 VALUE(值1,值2...);

添加批量数据: I

NSERT INTO 表名(字段名1,字段名2)VALUES(值1,值2...),(1,值2...);

NISERT NITO 表名 VALUE(值1,值2...)(值1,值2...);

DML-修改数据:

UPDATE 表名 SET 字段名1=值1;字段名2=值2,...[WHERE 条件];

DML-删除数据

DELETE FROM 表名 [WHERE 条件];

第三章 DQL-查询操作

语法:

SELECT 字段列表 FROM 表名列表 WHERE 条件列表 GROUP BY 分组字段列表 HAVING 分组后条件列表 ORDER BY 排序字段列表  LIMIT 分页参数

执行顺序: FROM->WHERE->GROUP BY->HAVING->SELECT->ORDER BY->LIMIT

DQL-基本查询:

查询多个字段:

SELECT 字段1,字段2...FROM 表名;

SELECT * FROM 表名;

设置别名:

SELECT 字段1[AS 别名],字段2[AS 别名2]...FROM 表名;

去除重复记录:

SELECT DISTINCT 字段列表 FROM 表名;

DQL-条件查询:

SELECT 字段列表 FROM 表名 WHERE 条件列表;

条件:

比较运算符功能
>大于
>=大于等于
<小于
<=小于等于
=等于
<>或!=不等于
BETWEEN…AND在某个范围之间(最小值,最大值)
IN(…)在in之后的列表中的值,多选一
LIKE 占位符模糊匹配(匹配单个字符,%匹配任意个字符)
IS NULL是NULL
AND 或 &&并且(多个条件同时成立)
OR 或 ||或者(多个条件任意一个成立)
NOT 或 !非,不是

DQL-聚合查询:

SELECT 聚合查询(字段列表) FROM 表名;

聚合函数:

函数功能
count统计数量
max最大值
min最小值
avg平均数
sum求和

DQL-分组查询:

SELECT字段列表 FROM 表名[WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];

where: 过滤后分组,不可用聚合函数

having 分组后过滤,可用聚合函数

DQL-排序查询:

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2;

排序方式: ASC 升序(默认值)

DESC 降序

DQL-分页查询:

SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;(起始索引为0,不同数据库略有不同,如查询为第一页,则起始索引可省略)

第四章 DCL-管理数据库

DCL-管理用户:

查询用户:

USE mysql;
SELECT * FROM user;

创建用户:

CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';

修改用户密码:

ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';

删除用户:

DROP USER '用户名'@'主机名';

DCL-权限控制:

权限说明
ALL,ALL PRIVILEGES所有权限
SELECT查询数据
INSERT插入数据
UPDATE修改数据
DELETE删除数据
ALTER修改表
DROP删除数据库/表/视图
CREATE创建数据库/表

查询权限:

SHOW GRANTS FOR '用户名'@'主机名';

授予权限:

GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';

撤销权限:

REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

第五章 函数

字符串函数:

函数功能
CONCAT(S1,S2…Sn)字符串拼接,将S1,S2…Sn拼接成一个字符串
LOWER(str)将字符串str全部转换为小写
UPPER(str)将字符串str全部转换为大写
LPAD(str,n,pad)左填充,用字符串pad对str的左边进行填充,达到n个字符串长度
RPAD(str,n,pad)右填充,用字符串pad对str的右边进行填充,达到n个字符串长度
TRIM(str)去掉字符串头部和尾部的空格
SUBSTRING(str,start,len)返回从字符串str从start位置起的len个长度的字符串

数值函数:

函数功能
CEIL(x)向上取整
FLOOR(x)向下取整
MOD(x,y)返回x/y的模
RAND()返回0~1内的随机数
ROUND(x,y)求参数x的四舍五入的值,保留y位小数

日期函数:

函数功能
CURDATE()返回当前日期
CURTIME()返回当前时间
NOW()返回当前日期和时间
YEAR(date)获取指定date的年份
MOUNTH(date)获取指定date的月份
DAY(date)获取指定date的日期
DATE_ADD(date,INTERVAL expr type)返回一个日期/时间值+时间间隔expert后的时间值
DATEDIFF(date1,date2)返回起始时间date1和结束时间date2之间的天数

流程函数:

函数功能
IF(value,t,f)如果value为true,则返回t,否则返回f
IFNULL(value1,value2)如果value1不为空,返回value1,否者返回value2
CASE WHERE [val1] THEN [val2] …ELSE[default] END如果val1为true,返回res1,…否则返回default默认值
CASE [expe] WHEN [val1] THEN [val2] …ELSE[default] END如果expr的值等于val1,返回res1,…否则返回default默认值

第六章 约束

基础约束:

说明:约束作用于表中字段上,可以在创建表/修改表的时候添加约束

约束描述关键字
非空约束限制该字段的数据不为nullNOT NULL
唯一约束保证该字段的所有数据都是唯一,不重复的UNIQUE
主键约束主键是一行数据的唯一标识,要求非空且唯一PRUMARY KEY
默认约束保存数据时,如果未指定该字段的值,则采用默认值DEFAULT
检查约束(8.0.16版本后)保证字段值满足某一个条件CHECK
外键约束用来让两张表的数据之间建立连接,保证数据的一致性和完整性FOREIGN KEY

外键约束:

语法:

添加外键:

#创建表时添加
CREATE TABLE 表名(
字段名 数据类型
...
[CONSTRAINT] [外键名称] FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名);
)
#创建表后添加
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名);

删除外键:

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

更新删除行为:

行为说明
NO ACTION当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。(与RESTRICT一致)
RESTRICT当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。(与NO ACTION一致)
CASCADE当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录。
SET NULL当在父表中删除对应记录时,首先检查该记录是否有外键,如果有,则设置子表中的该外键值为null(要求外键值可为null)
SET DEFAULT父表有更变时,子表将外键列设置成一个默认的值(innodb不支持)
#设置更新/删除行为
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表名(主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;

第七章 多表查询

内连接:

说明:连接结果为两表交集部分

隐式内连接:

SELECT 字段列表 FROM 表1,表2 WHERE 条件...;

显示内连接:

SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件 ...;

外连接:

说明:查询左/右表全部数据,包含两表交集部分

左连接:

SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件...;

右外连接:

SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件...;

自连接:

说明:可以是内连接查询,也可是外连接查询

SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件...;

联合查询:

说明:联合查询需要保证各表查询列数与字段类型保持一致,union会将合并后的数据去重,union all则不会

SELECT 字段列表 FROM 表A ...
UNION [ALL]
SELECT 字段列表 FROM 表B ...;

子查询:

说明:在sql语句中嵌套SELECT语句,称为嵌套查询或子查询

SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);

子查询外部语句可以是INSERT/UPDATE/SELECT的任何一个

根据子查询的查询结果不同,分为:

  • 标量子查询(查询结果为单个值) 常用操作符:=, <>, >, >=, <, <=
  • 列子查询(查询结果为一列) 常用操作符:IN, NOT, IN ANY, SOME, ALL
  • 行子查询(查询结果为一行) 常用操作符:=, <>, IN, NOT, IN
  • 表子查询(查询结果为多行多列) 常用操作符:IN
操作符描述
IN在指定的集合范围之内,多选一
NOT IN在不指定的集合范围之内
ANY子查询返回列表中,有任意一个满足即可
SOME与ANY相同,使用SOME的地方都可以使用ANY
ALL子查询返回列表的所有值都必须满足

子查询位置:

  • WHERE之后
  • FROM之后
  • SELECT之后

第八章 事务

事务操作:

查看/设置事务提交方式:

SELECT @@autocommit; #查看事务提交方式
SET @@autocommit=0; #设置事务提交方式

开启事务:

START TRANSACTION 或 BEGIN

提交事务:

COMMIT;

回滚事务:

ROLLBACK;

事务隔离级别:

查看事务隔离级别:

SELECT @@TRANSACTION_ISOLATION;

设置事务隔离级别:

SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE} #隔离级别依次为:读未提交 | 读已提交-解决脏读 | 可重复读-解决不可重复读 | 串行化-解决幻读

返回顶部

暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇