【MySQL】数据库和表的操作详解

发布于:2025-04-19 ⋅ 阅读:(20) ⋅ 点赞:(0)

目录

一、数据库:

1、查看数据库:

2、创建数据库:

3、删除数据库:

4、数据库的编码问题:

5、校验规则对数据库的影响:

6、修改数据库:

7、库的备份与恢复:

8、查看链接情况:

二、表的操作:

1、创建表:

2、查看表:

3、修改表:

插入数据:

修改表名:

增加字段属性:

​编辑

修改字段的数据类型:

修改字段的名称:

删除某一字段:

表的删除和备份:

删除表:


一、数据库:

1、查看数据库:

首先,在创建数据库之前,要先查看当前有哪些数据库:

show databases;

这些本质是在Linux中,/var/lib/mysql目录下创建的目录

当创建了很多数据库,我们无法知道是正在使用哪一个数据库的,使用需要用SQL语句

select database();

这样,在use后,使用SQL语句就能够查看当前正在使用哪一个数据库了

如何知道创建数据库时的详细信息:

show create database 数据库名;

理解:

test1创建时,可以看到关键字是大写的,可以这样也可以不这样

数据库的名字是用引号引起来了,是为了和关键字区分

后面/**/不是注释,其表示当MySQL版本大于4.1.00的时候,执行其后面SQL语句,当MySQL版本大于8.0.16的时,执行其后面的语句

2、创建数据库:

使用SQL语句:

create database [if not exists] 数据库名;

如果创建重复名的数据库,就会出错,可以加上if not exists选项,它的意思是如果不存在数据库就创建

当我们加上这个选项后,可以发现没有error了,取而代之的是warning

3、删除数据库:

使用SQL语句:

drop database 数据库名;

删除数据库在Linux下的体现就是删除对应路径下的目录

如果删除不存在的数据库是会报错的,如果想让这个报错改为警告可以加上if exists

注意:

一般不要轻易删除数据库,毕竟这里和Linux中删除目录差不多,如果删除,里面的所有数据就都没了

4、数据库的编码问题:

在系统创建的时候,有两个编码集合,字符集和校验集

字符集

字符集表示数据库的内容写的时候采用的编码,用于规定未来存储时的编码格式

查看MySQL中默认的字符集用SQL语句:

show variables like 'character_set_database';

查看MySQL支持的所有字符集:

使用SQL语句:

show charset;

校验集

校验集表示在已经有数据,进行读的时候以特定的方式去读,对读到的数据做特定的解释,规定数据查询时的校验规则

查看MySQL中默认的校验集用SQL语句:

show variables like 'collation_database';

查看MySQL支持的所有字符集:

show conllation;

使用SQL语句:(有很长,这里只截取部分)

使用指定编码创建数据库

// 设置字符集
create database 数据库名称 [charset=字符集 || character set 字符集];
// 设置校验集
create database 数据库名称 charset=utf8mb4 collate 校验集;

5、校验规则对数据库的影响:

首先,我们要知道:表是继承其所在数据库的编码格式的

那么,我们创建两个数据库,分别用不同的校验规则:其中一个是区分大小写的,一个是不区分大小写的

//不区分大小写
create database test1 collation utf8_general_ci;
//区分大小写
create database test2 collate utf8_bin;

接着,分别在里面创建一张表,并且在表中插入大写和小写的a

其中test1是不区分大小写的,test2是区分大小写的

在插入后,直接查找表中对应的a,

select * from testtable where id='a';

我们应该会发现:如果是test1的话,查找a会出现a和A;如果是test2的话,查找a只是出现a

如上,结果如期

6、修改数据库:

修改数据库编码格式:

使用指令:

alter databas 数据库名 charset=修改后的字符规则 COLLATE=修改后的校验规则

如将test1进行的字符编码规则和字符校验规则进行修改

alter database test1 charset=gbk collate gbk_chinese__ci;

7、库的备份与恢复:

备份:

将一个数据库进行备份采用SQL语句:

mysqldump -P端口号 -u用户名 -p 密码 -B 数据库名1 数据库名2 ...  > 数据库备份存储的文件路径

接下来举个例子:

mysqldump -P3306 -uroot -p -B test1 > test.sql

如上,这就是对我们的test1数据库进行备份了,对这个文件进行查看,我们可以知道其是备份了我们的SQL语句和数据

恢复:

恢复的话是在MySQL客户端中,用SQL语句:

source 数据库备份存储的文件路径;

我们已经把test1数据库备份好了,那么我们接下来将这个test1数据库删了,然后在恢复:

然后在执行SQL语句进行数据库的恢复

source /home/silence/MySQL/test.sql;

这样,我们的test1数据库就恢复了(包括里面的表)

也可以只备份表

mysqldump -u root -p -P 端口 数据库名 表名 > 目标路径(含文件)

8、查看链接情况:

MySQL支持多用户的访问,也可能会被恶意访问,可以通过如下SQL语句进行查看MySQL语句的链接

show processlist;

二、表的操作:

创建表是在数据库中创建的,所以在进行表的创建的时候,要先use数据库表示进入对应数据库

1、创建表:

我们创建表的SQL语句是:

create table [if not exists] 表名(
	成员名1 成员类型1 [comment '注释信息'],
	成员名2 成员类型2 [comment '注释信息'],
	成员名3 成员类型3  [comment '注释信息']
)[charset=字符编码] [collate=校验规则] [engine=引擎名];

以上comment和其注释信息是可以忽略的,并且下面的charset,collate,engine也是可以不写的,如果不写的话就为系统默认

这里采用MyIsam引擎

这里采用InnoDB引擎

当创建成功后,发现person1和person2在Linux下,显示的目录是不一样的,现在我只需要知道不同的引擎在Linux下的显示是不一样的,在后面的MySQL索引在讲解

2、查看表:

查看表之前要在数据库中,所以要先保证在数据库中,然后在进行表的查看

SQL语句:

show tables;

这是进行表的查看,表示当前数据库中有哪些表

desc 表名;

这个SQL语句是查看表的详细信息

  • Field表示列名
  • Type表示类型
  • Null表示是否可为空
  • Key表示是否存在 主键/外键/唯一键 约束
  • Default表示是否有默认值
  • Extra表示额外信息

如果想看建表时的信息,创建表的时候更详细的信息,比如所采用的字符编码或者校验码或者所使用的引擎,那就需要使用:

show create table 表名 \G

3、修改表:

插入数据:

在修改前,表中需要有数据,那么首先我们向我们的表中插入数据

insert into 表名 [(字段1,字段2, ...)] values (数据1,数据2, ... 要和前面对应);

其中,如果属性名不写就是默认所有的

如下,这里插入两行数据

创建成功后可以使用SQL语句来查看

select * from 表名;

修改表名:

SQL语句:

alter table 原表名称 rename [to] 修改后的表名称;

如下,当我们对表名进行修改后,再进行查看,发现修改成功

增加字段属性:

如上,原本有3个字段属性,并且在查看创建的时候能够看到我们给每一个字段属性的备注

接下来增加字段属性:

用SQL语句:

alter table 表名 add 字段名称 数据类型 备注;

这样就能够通过show命令查看到了增加的字段以及备注了

并且在表中的数据也会增加,由于我们没有插入数据,所以是空

在SQL语句中,最后面还可以增加after 字段属性表示将数据增加到对应字段属性后

alter table 表名 add 字段名称 数据类型 备注 after 字段属性;

如果想插在第一行,将after和其后面的字段属性换成not null first

修改字段的数据类型:

就是修改上述的Type用到SQL语句:

alter table 表名 modify 待修改字段名 新的数据类型 备注;

实际上,这是覆盖式的修改的,并不是只将数据类型修改

如上,这里修改的时候没有加上对应的备注,在修改后查看发现原来的备注没有的,证明这里是覆盖式的修改的

修改字段的名称:

用SQL语句:

alter table 表名 change 原字段名 修改后字段名 数据类型 备注;

如下是将birth改为birthday,这里也是覆盖修改的,如下我没有加备注,当再次看的时候也没有了,当然也可以自己重新定义

并且类型也是重新定义的

删除某一字段:

alter table 表名 drop 字段名称;

将ages删除

表的删除和备份:

因为表的删除是不可逆的,所以,在删除表之前最好做一下备份

mysqldump -P 端口号 -u用户名 -p 数据库名 表名1 表名2 ... > 表备份存储的文件路径

将表备份并存储在当前目录下:

恢复:

source 表备份存储的文件路径

当恢复后就都回来了

删除表:

drop table 表名称;

当删除后就没了

这是很危险的,当删除表后期所有数据都没了,在开发中不要轻易删除


网站公告

今日签到

点亮在社区的每一天
去签到