1 简介

Mysql是一种开放源代码的关系型数据库管理系统,使用最常用的数据库管理语言——结构性查询语句进行数据库管理

Mysql是开源的,因此任何人都可以下载并根据个性化的需要进行修改

Mysql因为其速度、可靠性和适应性而备受关注。

2 基础知识

2.1 连接Mysql

1
mysql -h主机地址 -u用户名 -p用户密码

2.2 数据库的启停

2.2.1 启动数据库

1
service mysql start

2.2.2 停止数据库

1
service mysql stop

2.2.3 重启数据库

1
service mysql restart

2.3 数据库密码的更改

2.3.1 更改密码

1
2
3
4
use mysql; 选择数据库
update user set password=password("新密码") where user="用户名";# 5.7以下mysql数据库字段名:authentication_string
flush privileges;
quit;

2.3.2 更改用户名

1
2
3
4
use mysql;
update user set user="新用户名" where user="root";
flush privileges;
exit;

3 数据的备份与还原

3.1 mysqldump工具备份

1
mysqldump -u root -h host -p dbname > backdb.sql
  • -u: 用户名
  • -p: 密码
  • -P: 端口号
  • —all-databases,-A: 备份所有数据库
  • —databases,-B: 用于备份多个数据库,如果没有该选项,mysqldump把第一个名字参数作为数据库名,后面的作为表名。使用该选项,mysqldump会把每个名字都作为数据库名
  • -d: 只导出数据库的表结构
  • -t: 只导出数据库的数据
  • —quick,-q: 快速导出
  • —xml,-X: 导出位xml文件


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1. 备份所有数据库的数据和结构(-A)
mysqldump -uroot -p 123456 -A > 0101.sql
2. 备份全部数据库的结构(-d)
mysqldump -uroot -p 123456 -A -d > 0102.sql
3. 备份全部数据库的数据(-t)
mysqldump -uroot -p 123456 -P 3306 -A -t > 0103.sql
4. 备份单个数据库的数据和结构(sakila为数据库名)
mysqldump -uroot -p 123456 -P 3306 sakila > 0104.sql
5. 备份单个数据库结构(sakila为数据库名,-d)
mysqldump -uroot -p 123456 -P3306 sqkila -d > 0105.sql
6. 备份单个数据库数据(sakila为数据库名,-t)
mysqldump -uroot -p 123456 -P3306 sakila -t > 0106.sql
7. 备份多个数据库的结构和数据(table1,table2为表名)
mysqldump -uroot -p 123456 -P3306 saklia table1 table2 > 0107.sql
8. 一次备份多个数据库
mysqldump -uroot -p 123456 --databases db1 db2 > 0108.sql

3.2 数据库还原

3.2.1 系统命令行

1
mysqldump -u root -p test < /var/www/html/test.sql

3.2.2 source方法

1
2
use db
source /var/www/html/test.sql

4 基本操作

4.1 库

mysql数据库中库就相当于是文件系统中的文件夹,主要操作有增、删、查、改

4.1.1 增

1
create databases db;

4.1.2 删

1
drop databases db;

4.1.3 查

1
show databases; //查看这个mysql里面有多少库

4.1.4 改

1
alter databases db CHARACTER SET utf8;

4.2 表

4.2.1 增

4.2.1.1 增加表

1
create table msg (id int,name char(10));

4.2.1.2 增加字段

1
alter table 表名 add 新字段名 数据类型;

4.2.2 删

4.2.2.1 删除表

1
drop table 表名

4.2.2.2 删除字段

1
alter table 表名 drop 字段名;

4.2.3 查

4.2.3.1 查库信息

1
show tables;

4.2.3.2 查看建表语句

1
show create table 表名;

4.2.3.3 查看表结构

1
desc 表名;

4.2.4 改

4.2.4.1 修改字段

1
alter table 表名 change 字段名 新字段名 数据类型;

4.2.4.2 改库类型

1
alter table 表名 modify 字段名 数据类型;

4.2.4.3 修改名称

1
alter table 表名 rename 新表名;

4.3 数据(数据库文件内容)

数据层面的操作相当于针对文件系统中具体文件内的文本行进行编辑。核心操作涵盖增、删、查、改。

4.3.1 增

向数据表中追加新的数据行(记录)。

1
2
3
4
5
6
7
8
# 1. 插入完整行(需严格按照表中字段定义的顺序提供所有值)
insert into 表名 values (值1, 值2, ...);

# 2. 插入指定字段(推荐做法,容错率高且不受表结构增减字段的影响)
insert into 表名 (字段1, 字段2) values (值1, 值2);

# 3. 批量插入多行数据(相比多次执行单条插入,能显著减少网络I/O与事务开销)
insert into 表名 (字段1, 字段2) values (值1, 值2), (值3, 值4), (值5, 值6);

4.3.2 删

移除数据表中的已有记录。执行删除操作时需格外谨慎,通常建议先进行 select 确认目标范围。

1
2
3
4
5
6
7
8
9
# 1. 删除满足条件的特定数据行(强烈建议DML操作始终附带 WHERE 子句)
delete from 表名 where 条件;

# 2. 删除表内所有数据(DML操作,逐行删除并记录日志,支持事务回滚,但效率极低)
delete from 表名;

-- 【底层机制】:属于数据操纵语言(DML)。执行时会在缓冲池中逐行删除记录,并将每一行的删除操作写入事务日志(Undo/Redo Log),因此执行效率较低,但在事务提交前支持回滚(Rollback)。
-- 【自增 ID 行为:保留状态】:不会重置 AUTO_INCREMENT 自增计数器。后续新插入的数据行,其 ID 会继续沿用被删除数据的最大 ID 号向后递增,产生 ID 断层。

1
2
3
4
# 3. 清空表数据(DDL操作,实质是销毁旧表并重建新表,不可回滚,但执行速度极快)
truncate table 表名;
-- 【底层机制】:属于数据定义语言(DDL)。实质是直接释放表所占用的数据页(Data Pages)并重新初始化表结构,不记录单行删除的事务日志。因此执行速度极快,但操作不可回滚。
-- 【自增 ID 行为:彻底重置】:会完全重置 AUTO_INCREMENT 计数器。后续新插入的数据行,其 ID 将重新从定义表的初始值(通常为 1)开始重新编号。

4.3.3 查

查询操作是数据库中最复杂、使用频率最高的模块。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 1. 查询表中所有列数据(生产环境中应严禁使用 *,建议明确指定列名以降低内存与网络开销)
select * from 表名;

# 2. 查询特定字段
select 字段1, 字段2 from 表名;

# 3. 基础条件筛选查询
select 字段1 from 表名 where 字段2 = '指定值';

# 4. 排序查询(asc 默认升序,desc 降序排列)
select * from 表名 order by 排序字段名 desc;

# 5. 分页查询/限制返回行数(常用于海量数据下的截断读取,offset为偏移量,rows为返回条数)
select * from 表名 limit offset, rows;

# 6. 多表联合查询(以左外连接为例,获取主表全量数据及关联表的匹配数据)
select a.字段, b.字段 from 表A a left join 表B b on a.关联id = b.id;

4.3.4 改

更新表内已存在的数据行的具体字段值。

1
2
3
4
5
6
7
8
# 更新指定条件的数据行
update 表名 set 字段1 = 新值1, 字段2 = 新值2 where 条件;
或者
update 库名.表名 set 字段=值 where 条件


# 警告示例:若省略 where 子句,将导致全表该字段数据被覆盖(极度危险)
update 表名 set 字段1 = 新值1;

4.4 注释

有三种:

1
2
3
#后面是注释
--后面是注释
/*里面是注释*/