库
定义:库是MySQL中最高层次的逻辑容器,用于集中管理一组相关的数据对象,为不同业务与模块的数据提供命名空间隔离。
作用:
- 数据分类与隔离:不同库可独立存放不同业务的数据(如user_db,order_db),实现逻辑分离。
- 权限控制:支持对库设置独立的访问权限(如用户只能访问特定的库),提升安全性。
- 资源管理:库内的对象共享相同的字符集,排序规则等等。
操作
创建库
create database [if not exists] name_db
[character set ...]
[collate ...];
[if not exists] 是为了防止在创建name_db库时,name_db已存在的情况,加上就不会ERROR了。
[character set] 是设置库的字符编码集 => 库未来储存的数据。
[collate] 是设置库的字符校验集 =>读取数据库中数据的采用的编码格式。
数据库对数据采取任何操作,都需要保证编码和校验的编码格式是一致的。
查看库列表
show databases;
显示库的创建语句
show create database name_db;
使用库
use name_db;
修改库
alter database name_db [....];
对库的修改主要指的是修改库的字符集,校验规则。
例如:将Test的字符编码集设置为gdk。
mysql> show create database Test;\
+----------+-----------------------------------------------------------------------------------------------------+
| Database | Create Database |
+----------+-----------------------------------------------------------------------------------------------------+
| Test | CREATE DATABASE `Test` /*!40100 DEFAULT CHARACTER SET utf8mb3 */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+-----------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> alter database Test charset=gbk;
Query OK, 1 row affected (0.02 sec)
mysql> show create database Test;\
+----------+-------------------------------------------------------------------------------------------------+
| Database | Create Database |
+----------+-------------------------------------------------------------------------------------------------+
| Test | CREATE DATABASE `Test` /*!40100 DEFAULT CHARACTER SET gbk */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+-------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
删除库
drop database name_db;
备份与恢复
备份:
mysqldump -P3306 -uroot -p 密码 -B name_db > path
-P 端口号, -u 谁备份, -p 密码, -B 备份的数据库名字,path 备份路径。
还原:
source path;
例如:
mysqldump -P3306 -uroot -p 密码 -B name_db > /mysql/important/name_db.sql; # 备份
source /mysql/important/name_db.sql; # 恢复
查看库的连接情况
mysql> show processlist;
+----+------+-----------+------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------+------+---------+------+-------+------------------+
| 11 | root | localhost | Test | Query | 0 | init | show processlist |
+----+------+-----------+------+---------+------+-------+------------------+
1 row in set, 1 warning (0.00 sec)
查看当前有哪些用户连接到我们的MySQL。
表
定义:表是数据库中用于存储数据的二维结构,由行和列组成;每个表属于一个特定的库,用于存放同一类业务数据;通过预定义的模式确保数据的规范性和完整性。
作用:
- 结构化存储:通过固定模式确保数据格式统一,避免随意性(如所有用户必须包含 username 字段)。
- 数据关系管理:通过外键(FOREIGN KEY)关联不同表,实现数据关系(如订单表引用用户表的 id)。
- 高效查询与操作:结合索引(INDEX)优化数据检索速度,支持复杂的SQL操作(如 JOIN、WHERE 过滤)
操作
创建表
create table [if not table] name_t(
name datatype,
d2 datatype,
...
)character set 字符集 collate 校验规则 engine 存储引擎;
# 如果没有设置字符集,校验规则,存储引擎所在库会根据默认文件来定义。
例如:建立学生信息表。
mysql> create table student(
-> id int,
-> name varchar(20),
-> age tinyint unsigned
-> );
Query OK, 0 rows affected (0.07 sec)
mysql> desc student;
+-------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| age | tinyint unsigned | YES | | NULL | |
+-------+------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
datatype 表示数据类型。
查看表的结构
desc name_t;
查看表的数据
select [...] from name_t;
# ...可自己选择, *代表所有类型
显示表的创建语句
show create table name_t;
修改表
# 在表中添加记录
insert into table name_t (datatype, datatype)value(d1, d2);
# 在表中添加列
alter table name_t add new_col datatype [comment 'xxxx'][after old_col];
# 修改某一列的单位大小为x
alter table name_t modify d1 datatype(x);
# 删除某一列
alter table name_t drop d1;
例如:
- 在student中添加一列
img_path
信息,在添加几个人。
mysql> alter table student add img_path varchar(40) comment 'Student avatars store road strength';
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show create table student;\
+---------+--------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------+--------------------------------------------------------------------------------------------+
| student | CREATE TABLE `student` (
`id` int DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
`age` tinyint unsigned DEFAULT NULL,
`img_path` varchar(40) DEFAULT NULL COMMENT 'Student avatars store road strength'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 |
+---------+--------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> insert into student (id, name, age, img_path)value(1, 'Aoi', 17, '/user/img/Aoi'),
-> (2, 'Ethan', 19, '/user/img/Ethan');
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from student;
+------+-------+------+-----------------+
| id | name | age | img_path |
+------+-------+------+-----------------+
| 1 | Aoi | 17 | /user/img/Aoi |
| 2 | Ethan | 19 | /user/img/Ethan |
+------+-------+------+-----------------+
2 rows in set (0.00 sec)
- 将img_path的单位大小修改成varchar(60),并将age删除
mysql> alter table student modify img_path varchar(60);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc student;
+----------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| age | tinyint unsigned | YES | | NULL | |
| img_path | varchar(60) | YES | | NULL | |
+----------+------------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
mysql> alter table student drop age;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc student;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| img_path | varchar(60) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> select * from student;
+------+-------+-----------------+
| id | name | img_path |
+------+-------+-----------------+
| 1 | Aoi | /user/img/Aoi |
| 2 | Ethan | /user/img/Ethan |
+------+-------+-----------------+
2 rows in set (0.00 sec)
删除表
drop table name_t;
备份表
mysqldump -u root -p 数据库名 表名1 表名2 ... > path