【MySQL】库的操作

【MySQL】库的操作

创建数据库

语法:

c 复制代码
create database [if not exists] db_name [create_specification , [create_specification]......];

create_specification
	[default] character set charset_name	// 默认字符集
	[default] collate collation_name		// 默认校验规则

当创建数据库时没有指定使用哪种字符集和校验规则时,默认时utf8为字符集,以及utf8_general_ci校验规则

说明:
大写的表示关键字
[] 是可选项
CHARACTER SET: 指定数据库采用的字符集
COLLATE: 指定数据库字符集的校验规则
  • 创建一个utf8字符集的数据库
c 复制代码
create database db charset=utf8;
  • 创建一个utf8字符集,并且带utf8_general_ci校验规则的数据库
c 复制代码
create database db charset=utf8 collate utf8_general_ci;

字符集和校验规则

创建数据库时,有两个编码集:

  1. 字符集:规定了数据库中存储数据的方式
  2. 校验集:规定了字段比较时的编码,本质也是一种读取数据库中数据采用的编码集。
  3. 数据库中无论是对数据的任何操作,读也好,写也好,都需要保证编码集是一致的。

查看系统默认的字符集和校验规则

c 复制代码
1. show variables like 'character_set_database;
mysql> show variables like 'character_set_database';
+------------------------+---------+
| Variable_name          | Value   |
+------------------------+---------+
| character_set_database | utf8mb4 |
+------------------------+---------+

2. show variables like 'collation_database;
mysql> show variables like 'collation_database';
+--------------------+--------------------+
| Variable_name      | Value              |
+--------------------+--------------------+
| collation_database | utf8mb4_0900_ai_ci |
+--------------------+--------------------+

查看数据库支持的字符集和校验规则

c 复制代码
1. show charset;
2. show collation;

校验规则对表的影响

  1. 不区分大小写
    创建一个数据库,校验和是utf8_general_ci[不区分大小写]
c 复制代码
create database db1 collate utf8_general_ci;
c 复制代码
use db1;
c 复制代码
create table person(name varchar(20));
c 复制代码
insert into person (name) values ('a');
insert into person (name) values ('A');
insert into person (name) values ('b');
insert into person (name) values ('A');

查询单个字符

c 复制代码
mysql> select * from person;
+------+
| name |
+------+
| a    |
| A    |
| b    |
| B    |
+------+
4 rows in set (0.00 sec)

mysql> select * from person where name='a';
+------+
| name |
+------+
| a    |
| A    |
+------+
2 rows in set (0.00 sec)

对名字进行排序

c 复制代码
mysql> select * from person order by name;
+------+
| name |
+------+
| a    |
| A    |
| b    |
| B    |
+------+
4 rows in set (0.01 sec)
  1. 区分大小写
    创建一个数据库,校验和是utf8_bin[区分大小写]
c 复制代码
create database db2 collate utf8_bin;
c 复制代码
use db2;
c 复制代码
create table person(name varchar(20));
c 复制代码
insert into person (name) values ('a');
insert into person (name) values ('A');
insert into person (name) values ('b');
insert into person (name) values ('A');

查询单个字符

c 复制代码
mysql> select * from person;
+------+
| name |
+------+
| a    |
| A    |
| b    |
| B    |
+------+
4 rows in set (0.00 sec)

mysql> select * from person where name='a';
+------+
| name |
+------+
| a    |
+------+
1 row in set (0.00 sec)

对名字进行排序

c 复制代码
mysql> select * from person order by name;
+------+
| name |
+------+
| A    |
| B    |
| a    |
| b    |
+------+
4 rows in set (0.00 sec)

操纵数据库

查看数据库

c 复制代码
shwo database;

注意,我们不能直接使用创建好的数据库,而是要使用use使用数据库后才能进行使用

复制代码
use database 数据库的名称

显示创建语句

c 复制代码
show create database 数据名称
c 复制代码
mysql> show create database test;
+----------+--------------------------------------------------------------------------------------------------------------------------------+
| Database | Create Database                                                                                                                |
+----------+--------------------------------------------------------------------------------------------------------------------------------+
| test     | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+--------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

说明:
MySQL 建议我们关键字使用大写,但是不是必须的。
数据库名字的反引号``,是为了防止使用的数据库名刚好是关键字
/*!40100 default.... */ 这个不是注释,表示当前mysql版本大于4.01版本,就执行这句话

显示当前所处的表结构

c 复制代码
select database();
c 复制代码
mysql> select database();
+------------+
| database() |
+------------+
| db2        |
+------------+
1 row in set (0.00 sec)

修改数据库

语法

c 复制代码
alter database db_name
[alter_spacification [,alter_spacification]...]

alter_spacification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name

说明:
对数据库的修改主要指的是修改数据库的字符集,校验规则
c 复制代码
mysql> show create database test;
+----------+--------------------------------------------------------------------------------------------------------------------------------+
| Database | Create Database                                                                                                                |
+----------+--------------------------------------------------------------------------------------------------------------------------------+
| test     | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+--------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> alter database test charset=gbk;
Query OK, 1 row affected (0.01 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)

删除数据库

c 复制代码
DROP DATABASE [IF EXISTS] db_ name;

执行删除之后的结果:
数据库内部看不到对应的数据库
对应的数据库文件夹被删除,级联删除,里面的数据表全部被删
注意:不要随意删除数据库

库的备份和恢复

备份

语法:

c 复制代码
mysqldump -P端口号 -u root -p -B 数据库名称 > 数据库备份存储的路径

我们使用vim命令打开文件其实是可以看到一些对库的操作的。

恢复

语法:

c 复制代码
source 路径;
c 复制代码
mysql> drop database db1;
Query OK, 1 row affected (0.02 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| db2                |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
6 rows in set (0.00 sec)

mysql> source /root/MySQL_apt/db1.sql;

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| db1                |
| db2                |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
7 rows in set (0.01 sec)

注意事项

如果备份的不是整个数据库,而是一张表,就执行下面的指令:

c 复制代码
mysqldump -u root -p 数据库名称 表1 表2 ...... > 备份路径;

如果同时备份多个数据库

c 复制代码
mysqldump -u root -p -B 数据库名称1 数据库名称2 ...... > 备份路径;

如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原。

查看连接情况

语法:

c 复制代码
show processlist;

mysql> show processlist;
+----+-----------------+-----------+------+---------+--------+------------------------+------------------+
| Id | User            | Host      | db   | Command | Time   | State                  | Info             |
+----+-----------------+-----------+------+---------+--------+------------------------+------------------+
|  5 | event_scheduler | localhost | NULL | Daemon  | 105661 | Waiting on empty queue | NULL             |
| 17 | root            | localhost | db1  | Query   |      0 | init                   | show processlist |
+----+-----------------+-----------+------+---------+--------+------------------------+------------------+
2 rows in set, 1 warning (0.00 sec)

可以告诉我们当前有哪些用户连接到我们的MySQL,如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了。以后大家发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况。

总结

从上面我们可以对数据库做一个总结。首先我们讲了数据库中存放在两种编码集,一种是字符集:主要用于设置数据存储到数据库中的格式,另一种是校验集:主要用于数据从数据库中读取时,以什么形式进行读取操作。再后来就是学习了数据库的基本操作,增删改查,数据库的增加很简单,至于删除,其实一旦我们创建好了数据库后时不太敢进行删除的,因为如果将数据库删除了不说之前写的数据没了不说,一旦进行删除了上层的应用就找不到数据库了,也就没法将数据提供给用户了。而至于修改,一般都是对数据库的编码集进行修改,这里提示一下,我们是不太建议修改数据库的名称的,因为一旦数据库的名称确定了,上层应用就只认识这个数据库,一旦进行修改,上层应用就找不到该数据库了。对于数据库的查找,我们也介绍了几种查找的命令。再到对数据库的备份和恢复。最后讲解了查看链接情况,这个可以让我们看到有谁在连接数据库,在一定程度上防止了其他不必要的人连接,将数据窃取。

相关推荐
九分源码14 分钟前
基于PHP+MySQL组合开发开源问答网站平台源码系统 源码开源可二次开发 含完整的搭建指南
mysql·开源·php
程序员岳焱43 分钟前
Java 与 MySQL 性能优化:MySQL分区表设计与性能优化全解析
后端·mysql·性能优化
天天摸鱼的java工程师1 小时前
MySQL表设计实战指南:从业务场景到表结构优化
java·后端·mysql
混乱意志2 小时前
dgraph example数据导入
数据库·后端
Web极客码2 小时前
WordPress 站点漏洞利用:数据库恶意注入与多重感染的案例分析
数据库·wordpress·网站安全·数据库注入·wordpress漏洞·wordpress安全插件
刺客xs2 小时前
MySQL数据库----DML语句
数据库·mysql
嘉讯科技HIS系统2 小时前
嘉讯科技:医疗信息化、数字化、智能化三者之间的关系和区别
大数据·数据库·人工智能·科技·智慧医疗
爱上语文3 小时前
Redis基础(4):Set类型和SortedSet类型
java·数据库·redis·后端
lifallen3 小时前
Paimon vs. HBase:全链路开销对比
java·大数据·数据结构·数据库·算法·flink·hbase
Brookty4 小时前
【MySQL】JDBC编程
java·数据库·后端·学习·mysql·jdbc