MySQL数据库介绍
SQL
s:结构化
q:查询
l:语言
SQL语言组成
- 数据定义语言(**DDL:Data Definition Language)**
- 核心作用:定义、修改或删除数据库及数据库对象
| 常用命令 | 功能说明 |
|---|---|
| CREATE | 创建新的数据库对象,如:-CREATE DATABASE 数据库名;(创建数据库)-CREATE TABLE 表名(字段 类型 约束);(创建表)-CREATE INDEX 索引名 ON 表名(字段);(创建索引) |
| ALTER | 修改已有数据库对象的结构,如:-ALTER TABLE 表名 ADD 字段 类型;(给表加字段)-ALTER TABLE 表名 MODIFY 字段 新类型;(修改字段类型)-ALTER TABLE 表名 DROP 字段;(删除表字段) |
| DROP | 删除数据库或数据库对象(彻底删除,无法恢复),如:-DROP DATABASE 数据库名;(删除数据库)-DROP TABLE 表名;(删除表)-DROP INDEX 索引名 ON 表名;(删除索引) |
| TRUNCATE | 清空表中所有数据(保留表结构,比DELETE效率高,且无法撤销),如:-TRUNCATE TABLE 表名; |
| RENAME | 重命名数据库对象,如:-RENAME TABLE 旧表名 TO 新表名;(重命名表) |
- 数据操纵语言(**DML:Data Manipulation Language)**
- 核心作用 :对表中的 具体数据 进行增、删、改操作(不改变表结构)
| 常用命令 | 功能说明 |
|---|---|
| INSERT | 向表中插入新数据,如:- 插入单行:INSERT INTO 表名(字段1,字段2) VALUES(值1,值2);- 插入多行:INSERT INTO 表名 VALUES(值1,值2),(值3,值4); |
| UPDATE | 修改表中已有数据(需加WHERE条件,否则会修改所有行),如:-UPDATE 表名 SET 字段1=新值1,字段2=新值2 WHERE 条件; |
| DELETE | 删除表中数据(需加WHERE条件,否则会删除所有行),如:-DELETE FROM 表名 WHERE 条件; |
- 数据查询语言(DQL:Data Query Language)
- 核心作用 :从一个或多个表中 查询和检索数据,是 SQL 中最常用的部分,核心命令为SELECT,可结合多种子句实现复杂查询。
- 数据控制语言(**DCL:Data Control Language)**
- 核心作用:控制数据库的访问权限,管理用户对数据库对象的操作权限(如增删改查权限),以及数据库的安全性。
| 常用命令 | 功能说明 |
|---|---|
| GRANT | 给用户授予指定权限,如:-GRANT SELECT, INSERT ON 数据库.表 TO 用户名;(授予用户对某表的查询和插入权限)-GRANT ALL PRIVILEGES ON . TO 用户名;(授予用户所有数据库的所有权限) |
| REVOKE | 撤销用户已有的权限,如:-REVOKE INSERT ON 数据库.表 FROM 用户名;(撤销用户对某表的插入权限) |
| CREATE USER | 创建数据库用户,如:CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码'; |
| DROP USER | 删除数据库用户,如:DROP USER '用户名'@'主机名'; |
MySQL库操作
系统数据库
- show databases:查看数据库中的表
初始化数据库后默认建立四个数据库
-
sys:简化 MySQL 性能诊断(监控数据)
-
mysql:存 MySQL 用户、权限等核心系统信息
-
information_schema:提供表结构等元数据访问(虚拟表)
-
performance_schema:监控 MySQL 性能,收集性能指标
数据库操作
创建数据库
语法:
create database 数据库名
例如:

数据库命名规则
-
可以由字母、数字、下划线、@、#、$
-
区分大小写
-
唯一性
-
不能使用关键字
-
不能单独使用数字
-
最长128位
选择数据库--use
语法:
use 数据库名
例如:

查看数据库--show/select
例如:
查看当前数据库中有哪些表
show databases;
显示创建名为dbl的数据库是所使用的SQL语句
show create database db1;
返回当前选中的数据库的名称
select database();
删除数据库--drop
语法:
drop database 数据库名;
MySQL表操作
表介绍
查看表
先使用use切换到数据库
use mysql;
再使用show tables查看数据库中的表
show tables;
创建表
语法:
create table 表名 (
字段名1 类型 [ (宽带) 约束条件],
字段名2 类型 [ (宽带) 约束条件],
字段名3 类型 [ (宽带) 约束条件]
)
例如:

注意:
-
同一个表中,字段不能相同
-
宽度和约束条件可选
-
字段名和类型是必须的,字段的类型宽度和约束条件是可选项
-
表中最后一个字段不要加逗号
类型介绍
数值类型
| 类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
|---|---|---|---|---|
| INT | 4 字节 | (-2 147 483 648, 2 147 483 647) | (0, 4 294 967 295) | 大整数值 |
| DOUBLE | 8 字节 | (-1.797E+308, -2.22E-308) | (0, 2.22E-308,1.797E+308) | 双精度浮点数值 |
| DOUBLE(M,D) | 8 个字节,M 表示长度,D 表示小数位数 | 同上,受 M 和 D 的约束 DOUBLE (5,2) -999.99-999.99 | 同上,受 M 和 D 的约束 | 双精度浮点数值 |
| DECIMAL(M,D) | DECIMAL(M,D) | 依赖于 M 和 D 的值,M 最大值为 65 |
日期类型
| 类型 | 大小 | 范围 | 格式 | 用途 |
|---|---|---|---|---|
| DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
| TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | 时间值或持续时间 |
| YEAR | 1 | 1901/2155 | YYYY | 年份值 |
| DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
| TIMESTAMP | 4 | 1970-01-01 00:00:00/2038 结束时间是第 2147483647 秒北京时间 2038-1-19 11:14:07,格林尼治时间 2038 年 1 月 19 日 凌晨 03:14:07 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
字符串类型
| 类型 | 大小 | 用途 |
|---|---|---|
| CHAR | 0-255 字符 | 定长字符串 char (10) 10 个字符 |
| VARCHAR | 0-65535 字节 | 变长字符串 varchar (10) 10 个字符 |
| BLOB (binary large object) | 0-65535 字节 | 二进制形式的长文本数据 |
| TEXT | 0-65535 字节 | 长文本数据 |
约束条件
- 用于保证数据的完整性和一致性
| 约束条件 | 说明 |
|---|---|
| PRIMARY KEY (PK) | 标识该字段为该表的主键,可以唯一的标识记录 |
| FOREIGN KEY (FK) | 标识该字段为该表的外键 |
| NOT NULL | 标识该字段不能为空 |
| UNIQUE KEY (UK) | 标识该字段的值是唯一的 |
| AUTO_INCREMENT | 标识该字段的值自动增长(整数类型,而且为主键) |
| DEFAULT | 为该字段设置默认值 |
| UNSIGNED | 无符号 |
| ZEROFILL | 使用 0 填充 |
| ENUM() | 限制字段可以存储的值集合 |
创建表实例
create database db1;
use db1;
create table t1(
id int,
name varchar(50),
age int(3),
sex enum('male','female')
);
查看表结构
describe

例如:

show create table t1\G; -- 查看详细表结构或者创建表所使用的语句
\G:表示以长格式展示的结果
修改表名
语法:
alter table 表名 rename 新表名;
增加字段:
ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件...],ADD 字段名
数据类型 [完整性约束条件...];
ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件...] FIRST;
ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件...] AFTER 字段名;
删除字段:
语法:
alter table 表名 drop 字段名;
修改字段:
ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件...];
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条
件...];
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条
件...];
复制表
只复制表结构,不复制表中数据
create table t3 like t2;
复制表结构+记录(key不会复制:主键、外键和索引)
create table t4 select * from t2;
删除表
删除数据库中的表,需要指定"数据库名.表名"作为参数
如果只指定表名参数,则需要先通过USE语句切换到目标数据库
drop table t2;
drop table db1.t3;
-
用于显示表的结构
-
需要指定'数据库名.表名'
MySQL数据操作
插入数据--INSERT
insert into语句:先表中插入新的数据记录
可以用 select * from t1 验证
顺序插入
语法:
insert into 表名 values (值1,值2,值3......字段n)
例如:

指定字段插入数据
语法:
insert into 表名(字段1,字段2,字段3......字段n) values (值1,值2,值3......字段n)
例如:

插入多条记录
语法:
insert into 表名 values (值1,值2,值3......值n),(值1,值2,值3......值n),(值1,值2,值3......值n);
例如:

删除数据--delete/truncate table
不带条件where条件会删除所有记录
- 用于删除指定的数据记录
语法:
delete from 表名 where 条件表达式
例如:

更新数据--update
不带条件where条件会修改所有记录
- 用于修改、更新表中的数据记录
语法:
update 表名 set 字段名1=字段值 [,字段名2=字段值2] where 条件表达式
例如:

查询数据--select
单表查询
单表查询:
语法:
SELECT 字段 1,字段 2... FROM 表名
WHERE 条件
GROUP BY 字段
HAVING 筛选
ORDER BY 字段
LIMIT 限制条数
关键字执行的优先级
-
from
-
where
-
group by
-
having
-
select
-
order by
-
limit
模糊查询:where 列名 like '模式字符串'
例如:
where name like '成%'
group by分组
什么是分组:以组为单位进行分组
例如:

count (*):聚合该函数,统计总数量
max(列名)
min(列明)
sum(列明)
avg():平均值

having过滤
having和where不一样的地方
-
WHERE :在 GROUP BY 分组前 过滤原始数据行(先筛行,再分组聚合)。
-
HAVING :在 GROUP BY 分组后 过滤分组结果(先分组聚合,再筛组)。
-
WHERE :只能用原始表的列 (如 score > 60),不能用聚合函数(如 SUM()/AVG())。
- HAVING :可直接用聚合函数结果 (如 AVG(score) > 70)或分组字段(如 HAVING class = '一班',需该字段在 GROUP BY 中)。

order by排序
asc:升序
desc:降序

limit限制结果条目
正则表达式--regexp
^:以谁开头
$:以谁结尾
+:
例如:

多表查询
多表连接查询
内连接(只连接匹配的行)--inner join

左连接(优先显示左表全部记录)--left join

右连接(优先显示右表全部记录)--right join

MySQL数据库用户授权
创建用户
CREATE USER 用户名@来源地址 IDENTIFIED BY '密码'

授权操作
GRANT 权限列表 ON 数据库名.表名 TO 用户名@来源地址
查看权限
SHOW GRANTS FOR 用户名@来源地址
用root登录mysql
设置用户的权限
gran all on . to 'zhangsan'@'localhost';
撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址
create user root@'%' identified by 'pwd123'
grant all privileges on *.* to root@'%'
总结
- MySQL 核心操作分为库操作 、表操作 、数据操作三层,其中数据增删改查(CRUD)是日常开发最常用的部分;
- 操作数据时,
WHERE条件是核心,批量操作(如批量插入)更高效,分页查询是列表页必备; - 权限管理遵循最小权限原则 ,生产环境避免使用 root 用户直接操作,且禁止无条件的
UPDATE/DELETE。