mysql基础操作——库的操作和表的操作
文章目录
- mysql基础操作
- 库的操作
- 创建数据库
- 引入概念——数据库的字符集和校验规则
- 查看数据的默认字符集和校验规则
- 查看数据库支持的字符集/校验规则
- 字符集和校验规则的作用——对数据库的影响的实验
- 总结字符集和校验规则
- 删除数据库
- 操纵数据库
- 查看数据库
- 显示创建语句
- 修改数据库
- 数据库的备份恢复
- 备份恢复的细节
- 查看连接情况
- 数据表的操作
- 创建表
- 查看表 && 表的结构
- 表的删除
- 查看表的数据记录(内容)
- 修改表
- 增加新的记录
- 修改字段的值
- 对表进行重命名
- 对表的列名进行重命名
- 修改列的属性
- 增加列和删除列
mysql基础操作
库的操作
在简单理解了数据库的相关基础概念,以及了解mysql的基础架构与结构后:
本篇文章,我们将针对于mysql下的一些较为基础的、常用的操作进行学习和了解!
创建数据库
语法:
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,
create_specification] ...]
create_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
解释:
主体部分其实是:CREATE DATABASE db_name
,这就可以用来创建一个名为db_name(自己输入的名字)数据库,其他被[]
包起来的部分,是可选项,可写可不写。
[IF NOT EXISTS]
:这个表示的是,如果输入这一串选项,那么mysql就会判断该数据库是否存在,只有在不存在的情况下才会进行创建数据库!
👇
该选项使用效果如下:
create_specification
:用于定义数据库的额外属性或配置的可选参数。
常见的就是字符集和校验规则:
CHARACTER SET: 指定数据库采用的字符集
COLLATE: 指定数据库字符集的校验规则
引入概念——数据库的字符集和校验规则
这里我们引入一个概念,就是数据库的字符集和校验规则:
了解了它,我们才能以字符集和校验规则来理解数据库的额外属性配置!
查看数据的默认字符集和校验规则
在 MySQL 中,
SHOW VARIABLES LIKE 'pattern'
是一个用于 查看 MySQL 系统变量 的 SQL 命令。它允许你查询当前 MySQL 服务器的配置参数,类似于查看环境变量或运行时设置。
所以,我们可以用它来查询当前mysql数据库的默认字符集和校验规则:
SHOW VARIABLES LIKE ‘CHAR_SET_DATABASE’ -> 查询默认字符集
SHOW VARIABLES LIKE ‘COLLATION_DATABASE’ -> 查询默认校验规则
我这里查询出来的字符集和校验规则分别是:utf8mb4和utf8mb4_general_ci
其实,这个是我默认配置的:(Ubuntu 22.04 /etc/mysql/my.cnf
)
我已经手动地把字符集和校验规则设置好了! 所以,我的mysql查询出来就是这两个!
查看数据库支持的字符集/校验规则
字符集主要是控制用什么语言。比如utf8就可以使用中文。
SHOW CHARSET
SHOW COLLATION
通过上述两个指令可以查询到数据库支持的字符集和校验规则:
校验规则的支持我就不展示了,因为太多了!反正我们知道能够这么查出来就好!
但是,从图中我们能得到一个结论:
字符集和校验规则是配套的!
字符集和校验规则的作用——对数据库的影响的实验
现在,我们就结合创建数据库部分的可选配置参数进行讲解,探讨字符集和校验规则的作用!
Tips:下面会涉及到建表的操作,但是我们这里只是为了看出字符集和校验规则的作用
所以,本部分只做演示,不对操作进行解释!
还有值得说明的是:
在创建数据库时,可选参数中:
# 设置数据库的字符集
CHARACTER SET NAME or CHARSET=NAME# 设置数据库的校验规则
COLLATE NAME
对于设置字符集的操作,两种都可以!
现在,我们来做一个实验:
1.按照下图所示,创建了两个数据库d1和d2:
使用show create database db_name
:查看创建该数据库时的相关信息:
我们发现,d1的字符集和校验规则是配套的,d2的则不是!
2.分别向两个数据库插入{a,A,b,B,c,C}
字符:
d1:
d2:
3.对两个数据库进行一些操作:比如过滤/排序
从d1和d2两个数据库中分别读取出为name='a'
我们可以发现,d1在读取的时候,是不区分大小写的,而d2会:
对d1和d2中的数据,根据name来排序
我们可以发现,d1是不区分大小写排序,d2是区分的!
总结字符集和校验规则
-
所谓的字符集(编码集),其实就是未来数据库存储数据的时候采用的编码格式!
-
而当数据库进行读取数据时,或者对指定数据做一定操作的时候:
总是要去数据库中比对和用户输入数据相同的字段!但是,比较就涉及到了字符的编码!
所以,校验规则就是:
未来支持数据库进行字段比较而使用的编码!其实就是从数据库中读取数据的编码格式。
而上述的实验:
utf8mb4
的编码和utf8mb4_general_ci
是不区分你大小写的!
而utf8mb4_bin
是区分大小写的!
所以,这就是字符集和校验规则对数据库的影响!
最后用最简单的话来进行总结:
字符集,其实就是写入数据库存储时的编码格式!
校验规则,就是从数据库中读取时,以何种编码形式进行解释!
删除数据库
如果,有一个数据库我们不太想要了,应该怎么做呢?
语法:
DROP DATABASE [IF EXISTS] db_ name;
主体部分:其实就是DROP DATABASE db_ name
[IF EXISTS]
是可选项,即有该名字的数据库才会进行删除操作!
也是一样的,如果数据库不存在了,也是会报出warning的!
我们还可以看一下其对应的数据库文件:
对应的d3的目录已经被删除了!如果内部有表格数据,也是一样被删除的!
执行删除之后的结果:
- 数据库内部看不到对应的数据库
- 对应的数据库文件夹被删除,级联删除,里面的数据表全部被删
但是:
一般是不建议,也最好不要删除数据库!除非这个数据库真的是没有任何地方被使用了!
要删除前也需要做好备份操作!因为直接删除,就恢复不了了!上层还在使用的话就麻烦了!
操纵数据库
但是,对于数据库的操作远远不止是创建和删除,还有其他的操作,我们一起来看看!
查看数据库
如果我们想要查看当前系统下有哪些数据库,一共有几个,可以使用:
SHOW DATABASES;
如果是想要查看当前是处在哪个数据库内进行操作:
SELECT DATABASE();
显示创建语句
SHOW CREATE DATABASE db_name;
该指令用于显示创建指定数据库的 SQL 语句,我们可以用它来查看当前数据库的一些设置:
# 如果mysql的版本大于4.01,执行下面这句话
/*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */ # 如果mysql的版本大于8.0016,执行下面这句话
/*!80016 DEFAULT ENCRYPTION='N' */
最主要的就是查询字符集和校验规则!
修改数据库
数据库还有一个很重要的操作就是修改,其语法:
ALTER DATABASE db_name
[alter_spacification [,alter_spacification]...]
其中,alter_spacification是要进行修改的操作!
常见的操作有:
CHARACTER SET 字符集名 || CHARSET=字符集名
COLLATE 校验规则
修改数据库的字符集和校验规则:
在早期版本的mysql,是可以支持数据库重命名的!
但是,一般是不建议对数据库进行重命名的!
原因还是一样,上层如果正在使用,突然修改了,那么使用原名数据库的所有软件都得崩!
所以,在mysql 5.17后的版本,就没有重命名数据库的操作了!
数据库的备份恢复
数据库的备份和删除需要使用到一个工具——mysqldump!
这个工具我们不用自行下载,在下载mysql软件的时候就已经一起下载好了,直接使用即可!
1.备份
mysqldump -u(username) -P3306(默认端口号我这里是) -p(password) -B > 文件路径
# 注意:最后需要以文件结尾,其实就是要手动输入备份数据库的名字!
需要注意的几个点:
1.mysqldump不是mysql客户端工具,是需要在命令行终端使用的!
2.备份的文件名是需要手动指定的!文件路径不能以目录结尾!
3.备份,其实备份的是创建该数据库以来的所有操作语句!而不是简单地拷贝粘贴!
上述的红色部分是可以显现出一个结论的:即备份文件,保存的是数据库的所有操作语句!
而且,我刻意把-B选项圈出来,是因为它是有需要注意的地方的!
但是我们现在这里说不清楚,等我们讲完数据库的备份再来!
当然,也可以一次性备份多个数据库:
其实就是一次性地把要备份的多个数据库的记录都加入到该备份文件下!
到时候恢复的时候,只需要恢复工具,一次性可以恢复多个数据库!
2.恢复
恢复需要使用的工具是source:
先删除刚刚备份过的数据库:
我们可以看到,确实是执行记录好的语句,然后进行恢复,被删除的数据库又回来了!
(上述演示的是恢复多个被备份的数据库,对于单个数据库来说也是一样的!)
备份恢复的细节
-
-B选项带与不带差别是很大的:
还记得上面备份的时候,我特意把-B选项和其备份记录中一部分圈出来:
就是因为,带了-B选项,备份的时候会把创建数据库的语句带上!所以,直接使用source工具就能恢复同名数据库!
但如果没带,就不会有那部分语句,我们就得先手动地创建同名的数据库! -
如果备份的不是整个数据库,而是其中的一张表,怎么做?
# mysqldump -u root -p 数据库名 表名1 表名2 > D:/mytest.sql
如果备份的是表,那么备份文件内只有关于该表的操作记录,-B选项就是是否带创建语句!恢复的时候就是直接执行备份语句即可。
-
备份多个数据库:
# mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径
-
mysqldump工具是在命令行终端使用,不是mysql客户端!source实在mysql客户端用的!
查看连接情况
如果我们想查看当前有哪些用户连接到我们的MySQL,我们可以使用:
SHOW PROCESSLIST;
如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了。以后大家发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况。
数据表的操作
创建表
CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;
注意:
- 1.创建表的时候,内部会有很多的列名:fieldx,datatype是该列的类型!
(其实可以把它看成是结构体内的成员变量名和数据类型!)- 2.创建表的时候,至少需要包含一列!
- 3.表也是可以设置配置选项的:字符集、校验规则、存储引擎
(如果不手动设置,表就会跟随其所在数据库的选项!数据库是什么,表的就是什么)
一般来说,如果不是特殊情况,我们不需要手动设置配置的!直接跟随数据库即可。
数据的类型我们先不进行讲解,我们知道varchar是字符类型即可!
查看表 && 表的结构
如果我们想知道当前数据库内有哪些表:
SHOW TABLES; # 和show databases;一样
但是,如果我们是想查看表的结构:
DESC table_name;
从左向右分别是:
字段名称 字段类型 是否允许为空 索引类型 默认值 扩充内容
注意事项:
1.创建每一列字段的时候,可以在最后面加上comment ‘自己填写内容’,表示注释!
2.在创建表的时候,我们没有完全的把每一个字段的描述给写完!但是系统会帮我们做:
具体的我们可以通过show create table table_name来进行查看!
表的删除
删除表也是也是很简单的:
DROP TABLE table_name;
当然,一般是不建议删除表的!和删除数据库的原因一致!
查看表的数据记录(内容)
SELECT * FROM table_name;
修改表
有了上面的基础,其实我们发现,操作表和操作库是很类似的!只不过在关键字上有点区别!
项目实际开发中,经常修改某个表的结构,如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。
ALTER TABLE tablename ADD (column datatype [DEFAULT expr][,column
datatype]...);ALTER TABLE tablename MODIfy (column datatype [DEFAULT expr][,column
datatype]...);ALTER TABLE tablename DROP (column);
增加新的记录
insert into table_name value(/*根据该表的结构结构来填充值:*/ '', '', ''...)
需要说明的是:
如果使用
insert into table_name value()
的语法,就必须为每一列输入一个值!
如果想要有选择性的输入,应该是:
insert into table_name (field1, field2, filed3...)value(value1, value2, value3...)
如:INSERT INTO student (id, name, birth) VALUE (6, ‘zhaoliu’, ‘2004-8-6’);
修改字段的值
如何修改字段的值呢?也就是,我们指向改变表中某个位置的内容!
UPDATE table_name
SETvalue1=xxx,value2=xxx,value3=xxx
WHERE condition
注意,WHERE条件是用来判断需要修改的行的,比如指定name=zhangsan的进行修改!
修改的内容,就是SET和WHERE之间的部分!
如果不加WHERE进行条件的判断,就会把所有的行进行修改!
对表进行重命名
alter table table_name rename [to] new_table_name;
to是可以省略的:
对表的列名进行重命名
alter table table_name change field new_field datatype; # 需要完整字段:
为了不搞混淆,在修改列名和表名的时候,我们统一不带to!
修改列的属性
ALTER table table_name modify field datatype;
注意:这里不是给整个列进行替换(重命名):
而是针对已经存在表中的列,进行后序字段属性的修改!如果不存在是修改不了的!
增加列和删除列
使用下述语句,可以给表格增加一列:
ALTER TABLE table_name add new_field datatype [comment ''] [after field]
新增一列后:
以往所有存在于表中数据在该字段的值为NULL!
若想要给这些字段进行赋值,我们可以手动的使用update进行字段值的修改!
或者也可以在创建新列的时候,就给该字段带上默认值!但其实不如直接创建完后更新结果!
细节:
[after field]
代表的是要在哪一列后面增加新的一列!默认是在最后一列!自行选择即可。
如果是想要删除一列呢?
ALTER TABLE table_name DROP field;
删除列是很简单的!但是,一般是不建议直接删除!