MySQL快速入门

什么是SQL

SQL (Structured Query Language) 译为结构化查询语言,是一种在数据库管理系统(RDBMS,Relational Database Management System) 中查询数据,或通过 RDBMS 对数据库中的数据进行修改的语言。

常见 RDBMS :

  • Oracle Database : 甲骨文的
  • SQL Server : 微软的
  • DB2 : IBM的
  • PostgreSQL : 开源
  • MySQL : 开源
  • MariaDB : MySQL的一个分支,甲骨文收购MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险

不同 RDBMS 略有不同,由于 MySQL 是开源的,可免费获取,很多大企都在使用 MySQL ,所以本文将以 MySQL 的 SQL 对 SQL 进行讲解。

SQL 的查询过程是: 用户在客户端通过 SQL 语句,将需要的数据或对数据进行的操作请求发送给 RDBMS ,RDBMS 根据语句内容返回请求的数据,或对存储在数据库中的数据进行更新。

SQL 语句分类

  • DDL (Dtaa Definition Language , 数据定义语句) :

    用于创建修改删除存储在数据库中的数据库、表等对象

    • CREATE (创建) : 创建数据库或表等对象
    • DROP (撤销) : 删除数据库或表等对象
    • ALTER (更改) : 修改数据库或表等对象的结构
  • DML (Data Manipulation Language , 数据操作语句) :

    用于查询或更改表中的记录

    • SELECT (筛选) : 查询表中的数据
    • INSERT (插入) : 向表中插入新数据
    • UPDATE (更新) : 更新表中数据
    • DELETE (删除) : 删除表中数据
  • DCL (Data Control Language , 数据控制语句) :

    用于确认或取消数据库中的数据进行的变更。还可对 RDBMS 的用户访问数据库中对象的权限进行设定

    • COMMIT (承诺) : 确认对数据库中数据的变更
    • ROLLBACK (回滚) : 取消对数据库中数据的变更
    • GRANT (授予) : 赋予用户操作权限
    • REVOKE (撤销) : 取消用户的操作权限

某些数据库系统要求每条语句末端使用分号,用于分隔每条语句。

MySQL 基本操作

查看 MySQL 版本 SELECT VERSION();

显示当前登录用户 SELECT CURRENT_USER();

数据库基本操作

CREATE 创建数据库

CREATE DATABASE [IF NOT EXISTS] 库名;

  • DATABASE : 数据库
  • EXISTS : 存在
1
2
CREATE DATABASE d_name;
CREATE DATABASE IF NOT EXISTS d_name;

DROP DATABASE 删除数据库

DROP DATABASE 库名;

1
DROP DATABASE d_name;

USE 选择数据库

USE 库名;

  • USE : 使用
1
USE d_name;

SHOW TABLES; 查询数据库中的表

1
SHOW TABLES;

其他

设置编码

1
SET NAMES utf8;

用于设置编码,可以再在建数据库的时候设置,也可以在创建表的时候设置。

查看MySQL存储引擎

1
SHOW ENGINES;
  • SHOW : 显示
  • ENGINES : 引擎

该语句可用 ; 结束,也用 \g\G 结束。\g; 的作用相同,\G 可以让结果显示得更加美观。

查询MySQL支持的存储引擎

1
SHOW VARIABLES LIKE 'have%';
  • VARIABLES : 变量
  • LIKE : 如同

查询默认存储引擎

1
SHOW VARIABLES LIKE 'torage_engine';

常用存储引擎:InnoDBMyISAMMEMORY

表基础操作

先使用 USE 库名; 选择需要操作的数据库

SHOW TABLE; 查询数据库中的表

  • TABLE : 表格

CREATE TABLE 创建表

1
2
3
4
5
6
7
CREATE TABLE [IF NOT EXISTS] 表名(
字段名 数据类型 约束条件 [COMMENT ‘描述’],
字段名 数据类型 约束条件 [COMMENT ‘描述’],
……
字段名 数据类型 约束条件 [COMMENT ‘描述’],
[表约束]
)ENGINE=引擎 [DEFAULT CHARSET=字符集];
  • 常用数据类型:
类型大小用途
INT/INTEGER4 字节大整数值
FLOAT4 字节单精度浮点数
DOUBLE8 字节双精度浮点数
  • 常用日期和时间类型
类型大小用途
DATE3 字节日期值
DATETIME8 字节混合日期和时间值
TIMESTAMP4 字节混合日期和时间值,时间戳
TIME3 字节时间值或持续时间
YEAR1 字节年份值
  • TIMESTAMP : 时间戳
  • 常用字符串类型
类型大小用途
CHAR(M)0~255 字节,M个字符定长字符串
VARCHAR(M)0~65535 字节,M个字符变长字符串
  • CHAR : 字符
  • VARCHAR : 文本
  • 常用约束条件

UNIAUE | PRIMARY KEY | FOREIGN KEY | NOT NULL | NULL

  • UNIAUE : 唯一
  • PRIMARY : 主要
  • FOREIGN : 外部
  • 表约束: 主键约束 , 外键约束

主键和外键起约束作用:
主键标识记录为唯一性,不能有重复,不允许为空,用于保证数据完整性,主键只能有一个
外键是另一表中的主键,可有重复,可为空,用于与其他表建立联系,可有多个外键

主键能确定一条记录的唯一标识,如一条记录包括身份证号、姓名、年龄,身份证是唯一确认这个人的,其他的都可能有重复,所以这里的身份证号就是主键。

外键用于与另一表关联,是能确认另一张表记录的字段,用于保持数据的一致性。如 A 表中的字段是 B 表中的主键,那它就是可以是 A 表的外键。

索引字段没有重复值,可为空,用于提供查询排序的速度,可有多个唯一索引。

  • 主键约束: [CONATRAINT [描述字符]] PRIMARY KEY (字段名)

    • CONATRAINT : 约束

    创建数据表并设置 A_no 为主键

1
2
3
4
5
6
7
8
CREATE TABLE t_name_A(
A_no CHAR(9) NOT NULL COMMENT '学号',
A_name VARCHAR(10) DEFAULT NULL COMMENT '姓名',
A_sex CHAR(2) DEFAULT NULL COMMENT '性别',
A_age DATE DEFAULT NULL COMMENT '年龄',
A_dept VARCHAR(8) NOT NULL COMMENT '系别',
PRIMARY KEY (A_no)
) ENGINE=InnoDB DEFAULT CHARSET=utf-8;
- `COMMENT` : 注释
- `DEFAULT` : 默认
- `CHARSET` : 字符集
  • 外键表约束 : [CONATRAINT [描述字符]] FOREIGN KEY (外表字段名) REFERENCES 外表名(外表字段名) [ON DELETE|UPDATE 选项]

    选项: RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT

    • RESTRICT : 限制
    • CASCADE : 级联
    • ACTION : 动作
    • REFERENCES : 参考

    创建表并设置 A_no 字段为外键

1
2
3
4
5
6
7
CREATE TABLE t_name_B(
A_no CHAR(9) NOT NULL COMMENT ‘学号’,
B_no CHAR(4) NOT NULL COMMENT ‘课程编号’,
B_grade FLOAT DEFAULT NULL COMMENT ‘成绩’,
CONATRAINT S_fk FOREIGN KEY(A_no)
REFERENCES t_name_A(A_no)
)ENGINE=InnoDB DEFAULT CHARSET=utf-8;

删除表(没有被关联)

1
DROP TABLE 表名;

删除主表(被关联)

  • 查看副表依附于主表的外键:
1
SHOW CREATE TABLE 副表名\G;
  • 删除副表外键约束
1
ALTER TABLE 副表名 DROP FOREIGN KEYS 外键名;
  • 删除主表
1
DROP TABLE 主表名;

修改表名

1
ALTER TABLE 旧表名 RENAME [TO] 新表名;
  • RENAME : 改名

更改表的存储引擎

1
ALTER TABLE 表名 ENGINE=存储引擎名;

查询表

1
SHOW TABLES;

字段基础操作

增加字段

1
ALTER TABLE 表名 ADD 字段名1 数据类型 [完整约束条件] [FIRST | AFTER 字段名2];
  • FIRST : 首
  • AFTER : 后

删除字段

1
ALTER TABLE 表名 DROP 字段名;

修改字段的数据类型

1
ALTER TABLE 表名 MODIFY 字段名 数据名;
  • MODIFY : 变更

修改字段名及数据类型

1
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;
  • CHANGE : 改变

查看表结构(字段信息)

1
2
DESCRIBE 表名;
DESC 表名;
  • DESCRIBE : 描述

查看表详细结构(详细字段信息)

1
2
SHOW FULL COLUMNS FROM 表名;
SHOW CREATE TABLE 表名\G;

数据 (记录) 基本操作

插入数据

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

省略字段清单:

1
2
3
4
5
6
START TRANSACTION;
INSERT INTO 表名 VALUES (值1,值2,...);
INSERT INTO 表名 VALUES (值1,值2,...);
...
INSERT INTO 表名 VALUES (值1,值2,...);
COMMIT;
  • START : 开始
  • TRANSACTION : 处理
  • COMMIT : 提交

删除数据

1
DELETE FROM 表名 [WHERE 条件1 [AND|OR 条件2 ...]]
  • WHERE : 何处

若未指定 WHERE 语句,将删除所有记录

修改数据

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

查询数据

1
SELECT 字段1,字段2,... FROM1,表2... [WHERE 条件] [LIMIT N][OFFSET M]

查询所有字段数据

1
SELECT * FROM 表名;
  • LIMIT : 限制
  • OFFSET : 偏移

子句

WHERE 子句

根据条件选取表中的数据

1
SELECT 字段1,字段2,...,字段 FROM N表1,表2,... [WHERE 条件1 [AND|OR] 条件2 ...] 

LIKE 子句

WHERE 子句中可用等号 = 决定获取数据的条件 (字段=某值) ,当需要获取含有某字符的所有数据时就需要用到统配符 % ,这时就需要 LIKE 语句来代替等号 = 用于匹配获取数据,如需要含有 COM 的数据时可用 LIKE %COM% 。若没有使用 % ,LIKE 子句与 = 效果形同。

高级操作

UNION 操作符

用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中,多个 SELECT 语句会删除重复的数据。

1
2
3
4
5
6
7
SELECT 字段1,字段2...
FROM1
[WHERE 条件]
UNION [ALL | DISTINCT]
SELECT 字段
FROM2
[WHERE 条件];
  • ALL : 全部 返回所有结果,不过滤重复数据
  • DISTINCT : 清晰 删除结果中重复的数据,UNION 默认已经删除重复数据,所有 DISTINCT 对结果没有影响

DISTINCT 的其他应用

1
SELECT DISTINCT 字段名 FROM 表名;

排序

使用 ORDER BY 子句进行排序。

1
2
SELECT 字段1,字段2... FROM 表名1,表名2...
ORDER BY 字段1 [ASC|DESC] [,字段2 ASC|DESC ...]
  • ORDER : 顺序
  • ASC : (asend) 上升 升序,默认使用
  • DESC : (descend) 下降 降序

分组

使用 GROUP BY 根据一个或多个字段对结果进行分组

1
2
3
4
SELECT 字段名, 函数(字段名)
FROM 表名
WHERE 条件
GROUP BY 字段名;
  • GROUP : 组

使用 COUNT,SUM,AVG 等函数

WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)

常用函数

显示时间

1
NOW()

字符长度

1
CHAR_LENGTH('XXXXX')
  • LENGTH : 长度

日期格式

1
DAT_FORMAT(NOW(),%y-%m-%d)
  • FORMAT : 格式

%y : 年(2位)
%Y : 年(4位)
%m : 月
%d : 日
%H : 小时
%i : 分钟
%s : 秒

添加/减少日期时间

1
2
DATE_ADD(时间,INTERVAL 值 单位)
DATE_SUB(时间,INTERVAL 值 单位)

列:

1
SELECT DATE_ADD(NOW(),INTERVAL 1 day);
  • INTERVAL : 间隔

  • 单位:

    • microsecond 毫秒
    • second
    • hour 小时
    • day
    • week
    • year

类型转换

1
CAST(值 AS 类型B)

例:

1
SELECT CAST(12222232 AS CHAR);

加密函数

1
2
3
4
5
MD5()
DES_ENCRYPT(加密)
DES_DECRYPT(解密)
SHA1()
PASSWORD()

字符串连接

1
CONCAT(str1,str2,str3)

转换 JSON 字符串

1
JSON_OBJECT()

聚合函数

1
2
3
4
5
SUM()  # 求和
COUNT() # 统计
AVG() # 求平均值
MAX() # 最大
MIN() # 最小

去重

1
DISTINCT()

查考

MySQL 教程-菜鸟教程

SQL入门?只要记住这些基础语句就够了!

十个实用MySQL函数

-------------本文结束感谢阅读-------------

欢迎关注我的其它发布渠道