文章目录
很高兴和大家见面,给生活加点impetus!!开启今天的编程之路
作者:٩( 'ω' )و260
我的专栏:Linux,C++进阶,C++初阶,数据结构初阶,c语言,mysql
欢迎点赞,关注!!
MySQL操作库/表
该节主要介绍MySQL中的一些指令操作,熟悉基本的操作
MySQL操作库
数据库的编码集和校验集
编码集和校验集是什么?表示数据在数据库中存储的格式是怎样的。
编码集:决定数据以什么文字存,如汉语,英文等等,常见的比如utf8
校验集:决定数据的比较规则,排序规则等等。
指令:
查询服务器所有的编码集和校验集:
show charset 与 show collation:
有点长,这里就不截图了
结论:字符集和校验集是相互对应的,为什么?排序,比较都是依靠具体的编码实现的
查看系统默认的字符集与编码集;

为什么在此处我会使用当前生效的?难道还有默认的?对的。
安装数据库时,我们可能会操作配置文件,会向配置文件中增加默认的编码集和校验集。

这里我配置的就是utf8 + 对应的校验集。
同时还配置了默认端口号3306。
如果我们创建数据库时,不指定编码集和校验集,就使用默认配置的,否则就使用手动传递的。
不同编码集和校验集和差别:
每个编码集和校验集有不同的特点,不同的特点会导致某些操作的结果不同。
例如:collate utf8_general_ci(不区分大小写)和collate utf8_bin(区分大小写):导致排序,查询的结果可能不同。

不区分大小写此时会显示'a' 和 'A'。

区分大小写的话只会显示'a'。
库的增删查改
增:create database if not exists db_name charset=utf8 collate utf8_general_ci;
创建名称为db_name,编码集和校验集为utf8和utf8_general_ci数据库目录文件
if not exists:表示如果这个库已经存在的话就啥也不干了。
当然后面也可以不跟charset 和collate,就使用默认的嘛。

删:drop database if exists db_name;
删除名称为db_name的数据库目录文件
if exists:如果该库存在的话,就删了,不存在就啥也不干。

查:show create database db_name \G;查看创建db_name数据库时更加详细的信息
\G:为格式化输出。

这些字段在mysql字符类型章节时会涉及讲解的。
改:对数据库的修改主要是修改编码集和字符集:
alter database db_name charset=新的编码集 collation=新的字符集
如alter database db_name charset=gbk;
因为编码集和字符集都是对应的,写一个的话也没啥问题。

也能执行成功。
一般来说:数据库不要随便删除,删了里面的数据咋办
数据备份与恢复
备份数据库文件:
mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径
P:表示服务器绑定的端口号
u:表示连接数据库的用户
这句代码是在linux终端执行的!!且该文件路径最终能够指向一个普通文件

将数据库目录文件d1删除后,使用备份文件还原d1。
指令:mysql> source 备份文件路径

为什么有这么多的query ok指令呢?
数据库目录文件中不仅仅存储的是数据,还会存储一些操作信息,所以还原的时候执行的是存储在数据库目录文件中的操作信息,每次操作都对应一个query。
上面备份的时候有一个参数没懂 -B参数是为什么?
-B参数会存储创建数据库的操作信息,如果不带,还原数据库时需要手动创建数据库,然后在该数据库中还原数据即可。
这样,我们可以实现对数据库进行修改名称的操作,但是这样属实有点麻烦。
查看库的连接情况
指令:show processlist,可以查看哪些人连接了我的数据库。
当数据库响应变慢时,可以使用该指令查看哪些人连了。

上面显示只有我一个root用户连接了
MySQL操作表
增删查改
增与查:

desc tb_name:查看表结构
show tables:查看数据库中有哪些表
select * from tb_name;查看表中数据
show create table tb_name:查看建表时更加细节的信息
fileld1/2/3表示列名,datatype表示该列类型。

desc能够查看表结构,field就是列名称,type就是类类型,其余的我们后面说。
能够发现虽然创建时没有传字符集,校验集,存储引擎这些,其实默认是有的。因为我们没传有默认的。这些默认的就是我们配置文件时写的。

\G:表示格式化输出的意思,我们发现字符集为utf8,校验集确实default?
字符集和编码集都是对应的,这里写默认的问题也不大。
改:
对于表,我们一般是修改表的结构一些信息。
改表名:alter table tb_name rename to new_tb_name

向表中插入数据:
insert into tb_name values(数据);该指令是全列插入,就是给表中存在的每一列都插入值
insert into tb_name (列名1,列名2,...) values(列名1数据,列名2数据,...):给指定列插入数据

这里不同于c++,数据库中的字符串和字符都使用单引号表示。
添加新的一列:
alter table tb_name add 列名1 列类型 after 列名2
after表示新add的列1插入到列2后面。

删除一列:
alter table tb_name drop 列名;

修改列名类型:
alter table tb_name modify 列名 列名属性:将该列名的列名属性修改成新的列名属性

如果这样modify,以前的comment就消失了。

这里的年龄看成注释即可。
同时修改列名和列名类型:
alter table tb_name change 老列名 新列名 新列名类型:修改列名名称

删除表
drop table tb_name;这个就不再演示了
注意注意:表和数据库都不要删,删了的话数据就没了,追不回来的。
