02:库与表的操作

目录

1、库的操作

1.1、库的查看

1.1.1、查看库

1.1.2、查看建库语句

1.2、库的创建

1.2.1、默认编码创建

1.2.2、指明编码创建

1.2.3、编码规则对库的影响

1.3、库的删除

1.4、库的修改

1.5、备份与恢复

1.5.1、备份

1.5.2、恢复

1.6、查看连接情况

2、表的操作

2.1、表的创建

2.2、表的查看

2.2.1、查看表

2.2.2、查看表结构

2.2.3、查看建表语句

2.3、修改表

2.3.1、修改表名

2.3.2、添加列

2.3.3、修改列类型

2.3.4、删除列

2.3.5、修改列名称

2.4、删除表


1、库的操作

1.1、库的查看

1.1.1、查看库

语法如下:

sql 复制代码
show databases;

结果如下图所示:

1.1.2、查看建库语句

语法如下:

sql 复制代码
show create database 数据库名;  

使用上面的命令可以查看数据库创建时的语句。

1.2、库的创建

1.2.1、默认编码创建

语法如下:

sql 复制代码
create database [if not exists] 数据库名;

其中\[\] 表示可选项,其中if not exists表示如果不存在则创建,如果存在则不创建。

例如:创建一个hello数据库

1.2.2、指明编码创建

创建数据库的时候,有两个编码集:分别是数据库编码集 (数据库存储所采用的编码集)和数据库校验集(数据库进行字段比较所使用的编码,本质也是一种读取数据库中数据所采用的解码格式)。这两个编码所采用的规则应当是一致的。

可以使用如下方式查看数据库的编码集:

sql 复制代码
show variables like 'character_set_database';

例如:

可以使用如下方式查看数据库的校验集:

sql 复制代码
show variables like 'collation_database';

例如:

可以使用如下命令查看数据库支持的编码集:

sql 复制代码
show charset;

可以使用如下命令查看数据库支持的校验集:

sql 复制代码
show collation;

创建数据库的时候可以指明编码集和校验集,这样的话就不使用默认的编码集和校验集了。

语法规则如下:

sql 复制代码
create database [if not exists] 数据库名 [charset=编码集] [collate=校验集];

也可以使用下面的语法,两者是一样的,如下:

sql 复制代码
create database [if not exists] 数据库名 [character set 编码集] [collate 校验集];

例如:创建数据库的时候可以指明编码集和校验集

注:这个警告是因为使用了MySQL不推荐的utf8编码集和对应的校验规则导致的,它推荐使用utf8mb3这个编码集和对应的校验规则。

再比如:

1.2.3、编码规则对库的影响

例如:创建一个数据库test1

sql 复制代码
create database test1 character set utf8 collate utf8_general_ci;

再创建一个数据库test2

sql 复制代码
create database test2 character set utf8 collate utf8_bin;

这两个校验规则的区别是一个区分大小写,另一个是不区分大小写的。下面我们就来看看校验规则的差异将导致什么结果,下面的有些操作不属于库的操作,而是后面的内容。

想要操作一个数据库,先要use这个数据库,如下:

sql 复制代码
use test1;

依次执行如下命令:

sql 复制代码
create table person(name varchar(20));

insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');

我们可以使用如下命令查看表中插入的内容:

sql 复制代码
select * from person where name='a';

结果为:

我们可以看到a和A都被查出来了,因此该校验规则是不区分大小写的。

再使用另一个数据库,如下:

sql 复制代码
use test2;

依次执行如下命令:

sql 复制代码
create table person(name varchar(20));

insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');

使用同样的查找命令如下:

sql 复制代码
select * from person where name='a';

结果为:

从结果可以看出,该校验规则是区分大小写的。

可以使用如下命令查看当前选择哪一个数据库,如下:

sql 复制代码
select database();

结果为:

注:一般使用默认的编码集和校验集即可,不需要指明编码集和校验集。在MySQL中可以使用system clear来清理屏。

1.3、库的删除

语法如下:

sql 复制代码
drop database [if exists] 数据库名;

注意:不要随意删除数据库。

1.4、库的修改

对数据库的修改主要指的是修改数据库的编码集,校验集。

语法:

sql 复制代码
alter database 数据库名 [charset=编码集] [collate=校验集];

还有另一种写法也是可以的,如下:

sql 复制代码
alter database 数据库名 [character set 编码集] [collate 校验集];

例如:修改之前创建的test2这个数据库

查看test2这个库的创建命令,如下:

1.5、备份与恢复

1.5.1、备份

语法如下:

sql 复制代码
mysqldump -P 端口号 -u 用户 -p密码 -B 数据库名 > 备份存放路径

注意:上面的这个命令是在命令行中执行的,不是在mysql里面执行的。

例如:把上面的test2数据库给备份到当前目录。

sql 复制代码
mysqldump -P3306 -u root -p -B test2 > test.sql

我们可以打开这个备份的文件看一下,如下图所示:

1.5.2、恢复

语法如下:

sql 复制代码
source 数据库路径;

注意:上面的命令是在mysql中执行的。

先把数据库中的test2给删除掉,然后再利用之前备份的test2,进行恢复,恢复命令如下:

sql 复制代码
source /home/ubuntu/test2.sql

执行完上面的命令后就可以看到数据库已经被恢复了。

注:如果备份的不是整个库,而是其中的一些表还是使用mysqldump命令,如下:

sql 复制代码
mysqldump -u root -p 数据库名 表名1 表名2 ... > 备份存放路径

也可以同时备份多个数据库,如下:

sql 复制代码
mysqldump -u root -p -B 数据库名1  数据库名2 ... > 备份存放路径

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

1.6、查看连接情况

语法如下:

sql 复制代码
show processlist;

可以告诉我们当前有哪些用户连接到MySQL,如果查出某个用户不是你正常登陆的,很有可能你 的数据库被人入侵了。

2、表的操作

2.1、表的创建

语法如下:

sql 复制代码
create table [if not exists] 表名 (
    列1 类型,
    列2 类型,
    ....
    列n 类型
) [character set 字符集] [collate 校验规则] [engine 存储引擎];

也可以使用如下方式:

sql 复制代码
create table [if not exists] 表名 (
    列1 类型,
    列2 类型,
    ....
    列n 类型
) [charset=字符集] [collate=校验规则] [engine=存储引擎];

注:如果没有指定字符集,则以所在数据库的字符集为准;如果没有指定校验规则,则以所在数据库的校验规则为准。

例如:创建一个表叫user1

sql 复制代码
create table if not exists user1(
    id int,
    name varchar(20) comment '用户名',
    password char(32) comment '用户密码',
    birthday date comment '用户生日'
   )character set utf8 collate utf8_general_ci engine MyISAM;

结果如下:

注:其中的comment表示对该列的注释。

例如:再创建一个表叫user2

sql 复制代码
create table if not exists user2(
    -> id int,
    -> name varchar(20) comment '用户名',
    -> password char(32) comment '用户密码',
    -> birthday date comment '用户生日'
    -> )charset=utf8 collate utf8_general_ci engine InnoDB;

结果为:

注:不同的存储引擎,创建的表所对应的表的文件是不一样的,MyISAM引擎是把数据和索引分开存放的,InnoDB引擎是把数据和索引放在一起的,关于索引后面说。

2.2、表的查看

2.2.1、查看表

语法如下:查看数据库中的表

sql 复制代码
show tables;

结果如下:

2.2.2、查看表结构

语法如下:查看表的结构

sql 复制代码
desc 表名;

例如:

其中第一列是字段名,第二列是字段类型,其他的后面再说。

2.2.3、查看建表语句

语法如下:查看建表语句

sql 复制代码
show create table 表名;

例如:

注:还可以使用下面的方式,这种方式显示的信息更加简洁,如下:

sql 复制代码
show create table user1 \G

结果为:

2.3、修改表

在项目实际开发中,修改某个表的结构,比如:字段名字、字段类型,此外添加字段,删除字段等等,就需要修改表。

2.3.1、修改表名

语法如下:

sql 复制代码
alter table 原表名 rename [to] 新表名;

例如:修改表名,把表user1改为user

sql 复制代码
alter table user1 rename to user;

结果为:

2.3.2、添加列

语法如下:

sql 复制代码
alter table 表名 add 列名 列类型;

向表user中插入一些信息,方便下面进行演示,如下:

例如:在user表添加一列,用于保存图片路径。

sql 复制代码
alter table user add image_path varchar(128) comment '图片路径' after birthday;

其中after birthday表示新增的这一列放在birthday这一列后面。

结果为:

2.3.3、修改列类型

语法:

sql 复制代码
alter table 表名 modify 列名 新类型;

例如:修改name的类型,将其长度改成60。

sql 复制代码
alter table user modify name varchar(60);

结果为:

注:这个修改本质上是覆盖式的修改。

2.3.4、删除列

语法如下:

sql 复制代码
alter table 表名 drop 列名;

例如:删除password列,删除字段一定要小心,删除字段会导致对应的列数据都没了。

sql 复制代码
alter table user drop password;

结果为:

另外我们也可以看到对应的插入信息也没有了,如下:

2.3.5、修改列名称

语法如下:

sql 复制代码
alter table 表名 change 原列名称 新列名称 新列类型;

例如:修改name列的列名称,改为xingming

sql 复制代码
alter table user change name xingming varchar(60);

结果为:

2.4、删除表

语法如下:

sql 复制代码
drop table [if exists] 表名;

例如:

注:轻易不要修改表结构和删除表。

相关推荐
J-Tony111 小时前
【Redis】 Redis 是单线程还是多线程
服务器·数据库·mysql
wuqingshun3141596 小时前
什么是代理模式?一般用在什么场景?
java·mysql·代理模式
程序员小八7777 小时前
从 0 学习 MySQL 索引——7 大核心精讲
android·学习·mysql
渣渣灰飞8 小时前
MySQL 系统学习 第六阶段:Redis + 缓存 + 高并发设计 第六章:Redis 实现登录 Token
学习·mysql·缓存
渣渣灰飞8 小时前
MySQL 系统学习 第六阶段:Redis + 缓存 + 高并发设计 第五章:缓存穿透、缓存击穿、缓存雪崩
学习·mysql·缓存
Rsun0455110 小时前
MySQL 中什么是回表?
数据库·mysql
G.O.G.O.G13 小时前
《LeetCode SQL 从入门到精通(MySQL)》09
sql·mysql·leetcode
️学习的小王13 小时前
MySQL 数据库基础操作全解:从建库到增删改查
数据库·mysql·oracle
周杰伦的稻香14 小时前
(1071, ‘Specified key was too long; max key length is 767 bytes‘)
数据库·mysql