0


MySQL:库表操作

MySQL:库表操作


库操作

查看

  • 查看存在哪些数据库:
showdatabases;

示例:

在这里插入图片描述

  • 查看自己当前处于哪一个数据库:
selectdatabase();

示例:

在这里插入图片描述

此处由于我不处于任何一个数据库中,此处值为

NULL
  • 查看当前有哪些用户连接到了MySQL
show processlist;

示例:

在这里插入图片描述


创建

  • 创建一个数据库

语法:

createdatabase[ifnotexists] 数据库名;
[if not exists]

:如果数据库存在,就不创建该数据库。

示例:

在这里插入图片描述

此时就创建了

blog_db

数据库,可以通过

show databases

查看。

一个数据库,对操作系统而言,本质就是一个目录,在我的

ubuntu

主机下,数据库存储在了

/var/lib/mysql

目录下,这个路径会因为

MySQL

版本以及操作系统而不同。

此时我的

/var/lib/mysql

目录下,也同步出现了

blog_db

目录:

在这里插入图片描述


字符编码集

MySQL

中,数据库有两种字符编码集合:

字符集

:字符存储时,采用的编码方式

校验集

:字符读取时,采用的编码方式

查看系统支持的

字符集

showcharset;

示例:

在这里插入图片描述

  • 查看系统支持的校验集
show collation;

示例:

在这里插入图片描述

此时系统就列出了支持的各种集合,比如

utf8

可以在创建数据库时,指定使用的字符集与校验集

  • 指定字符集
createdatabase[ifnotexists] 数据库名 charset=xxx;createdatabase[ifnotexists] 数据库名 characterset xxx;

以上两种方式,都可以指定字符集为

xxx
  • 指定校验集
createdatabase[ifnotexists] 数据库名 collate xxx;

示例:

执行

create database db_1 charset=utf8 collate utf8_general_ci

在这里插入图片描述

该指令创建了数据库

db_1

,并指定

字符集

utf8

校验集

utf8_general_ci

在数据库对应的目录中,会存在一个文件

dp.opt

,其内部存储了数据库对应的

校验集

字符集

在这里插入图片描述

当然,如果你不指定

字符集

校验集

,此时会使用系统默认的。

查看系统默认的

字符集

show variables like'character_set_database';

示例:

在这里插入图片描述

即默认的

字符集

utf8

  • 查看系统默认的校验集
show variables like'collation_database';

示例:

在这里插入图片描述

即默认的

校验集

utf8_general_ci


删除

  • 删除数据库:
dropdatabase[ifexists] 数据库名;

示例:

在这里插入图片描述


修改

修改数据,主要是指修改数据库使用的

字符集

校验集

  • 修改字符集
alterdatabase 数据库名 charset=xxx;

示例:

在这里插入图片描述

  • 修改校验集
alterdatabase 数据库名 collate xxx;

示例:

在这里插入图片描述


备份

  • 拷贝数据库指令
mysqldump -P 端口号-u 用户名 -p 密码 -B 数据库名 > 数据库备份存储的文件路径

注意:该指令要在

bash

中执行,而不是数据库中。

比如备份

bit_index

数据库:

mysqldump -B bit_index >~/test/bit_index.sql

上述指令指定了一个名为

bit_index 

数据库,将其保存在路径

~/test/bit_index.sql

此时在对应路径下,就产生了对应

.sql

文件:

在这里插入图片描述

通过

vim

查看一下

sql

内部的数据:

在这里插入图片描述

可以发现:

.sql

文件并不是简单的拷贝一份数据库,而是保留了整个数据库的

SQL

语句。

  • 还原数据库
source 路径.sql;

该指令要在

MySQL

内部执行,而不是命令行。


表操作

接下来学习如何操作一个数据库内部的表。

  • 进入/切换 数据库:
use 数据库名;

示例:

在这里插入图片描述

如图,我创建了一个名为

box_he

的数据库,随后执行

use box_he

进入了该数据库,通过

select database()

查看当前所处的数据库,可以看到当前确实处于

box_he

中。


创建

  • 创建一个表:
createtable[ifnotexists] 表名 (
    field1 datatype,
    field2 datatype,
    field3 datatype
)characterset 字符集 collate 校验集 engine 存储引擎;
  • [if not exists] :可省略,如果不存在这个表,才创建
  • field:列名
  • datatype:该列的数据类型
  • character set:指定字符集,若没有指定,与数据库使用的字符集一致 - 也可写为:charset=字符集
  • collate:指定校验集,若没有指定,与数据库使用的校验集一致
  • engine:指定存储引擎 - 也可写为:engine=存储引擎

注意事项:

  1. 每一个列后面都有一个逗号,但是最后一个没有
  2. 整个语句末尾有分号

示例:

在这里插入图片描述

我创建了一个表

t1

,内部有

id

列,类型是

int

name

列,类型是

varchar(20)

;字符集为

utf8

;校验集为

utf8_general_ci

;存储引擎是

MyIsam

此时在

/var/lib/mysql

下的

boe_he

目录下,出现了三个文件:

t1.frm

t1.MYD

t1.MYI

这三个文件共同维护了

t1

这张表。

在这里插入图片描述

可见:数据库中的表的本质,就是多个文件!

而不同存储引擎,对一张表的存储形式不同,比如创建一个同样结构的表,使用

InnoDB

存储引擎:

在这里插入图片描述

路径

/var/lib/mysql/box_he

下:

在这里插入图片描述

可以看到,同样的表结构

InnoDB

,存储

t2

只使用了两个文件

t2.frm

t2.ibd

。关于存储引擎的具体内容会在索引部分讲解。现在只需要了解:不同存储引擎,对表的存储存在差别即可。


查看

  • 查看当前数据库下有哪些表:
showtables;

示例:

在这里插入图片描述

此处的

t1

t2

也就是刚刚创建的两个表。

  • 查看表的结构:
desc 表名;

示例:

在这里插入图片描述

各个字段含义如下:

  • Field:列名
  • Type:列的数据类型
  • Null:该列是否允许为空
  • Key:索引类型
  • Default:默认值
  • Extra:扩充
  • 查看建表时的语句:
showcreatetable 表名;

示例:

在这里插入图片描述

执行语句后,展示了创建表

t1

时的语句,直接执行该语句,格式比较混乱,一般来说建议将末尾的分号

;

改为

\G

showcreatetable 表名 \G

这个

\G

可以将数据以更加直观的方式展示出来:

在这里插入图片描述

建表的语句与我们输入的语句略有出入,这是因为

MySQL

会对输入的语句进行优化,比如说

MySQL

建议将关键字全部大写,我们就算是以小写的语句创建表格,底层还是会被转化为大写。

不过我个人认为小写的语句更加直观,可以很快分辨出是哪一个单词,而且因为有语句优化,最后存储时还是大写,所以我使用小写。

再比如每一列后面都有一个

DEFAULT NULL

,表示默认值为

NULL

,这个也是

MySQL

的优化,如果我们不指定默认值,就会自动设置默认值为

NULL

。具体如何指定默认值,会在《MySQL:表的约束》博客中讲解。


删除

  • 删除一个表:
droptable[ifexists] 表名 [, 表名,...];
  • [if exists]:如果表存在,才删除它
  • [, 表名, ...]:可以一次性删除多个表,表名之间用逗号,分隔

示例:

在这里插入图片描述

当我把

t1

t2

删除后,此时执行

show tables

,就显示

Empty set

即一个空的数据库。


修改

由于刚刚把

t1

t2

都删掉了,此处我重新创建这两个表,方便展示后续操作:

在这里插入图片描述

  • 修改表名:
altertable 旧表名 rename[to] 新表名;
  • rename [to]:此处的to可省略,效果一样

示例:

在这里插入图片描述

此处我将

t1

t2

分别改名为

table_1

table_2

  • 插入新的列
altertable 表名 add 列名 类型 comment 描述 after xxx;
  • comment:相当于备注,用于表示这一列数据的含义
  • after:指定新增的列插入到哪一列后面,如果不指定,默认插入到最后一列

示例:

在这里插入图片描述

语句

alter table table_1 add age int comment '年龄' after id

的作用,就是在

id

列后面,插入

age

列,类型是

int

对比前后的

desc table_1

,确实多出了

age

列。

  • 删除列
altertable 表名 drop 列名;

示例:

在这里插入图片描述

以上指令,删除了

age

  • 修改列
altertable 表名 change 旧列名 新列名 类型;

示例:

在这里插入图片描述

我把

id

列改为

stu_id

列,并把类型从

int

改为了

smallint

。由于我把数据类型变小了,此时有可能会发生数据精度丢失,一般不建议这样操作。


标签: mysql

本文转载自: https://blog.csdn.net/fsdfafsdsd/article/details/140281310
版权归原作者 盒马盒马 所有, 如有侵权,请联系我们删除。

“MySQL:库表操作”的评论:

还没有评论