Mysql: 创建表 和 管理表

Mysql: 创建表 和 管理表

在这里插入图片描述

每博一文案

人生之事,不如意十之八九。
我们生活的每一天,或多或少的都会遇到一些烦心的事,我们有跌倒
的瞬间,我们有委屈的时候,但这些经历都丰富了,我们的人生,
生活中的苦,让我们品尝了苦涩的滋味。更让我们懂得珍惜人生的甜蜜。
漫漫人生路,不管是好与坏,苦与甜都是人生的调味剂。
凡是打不到我们的终将让我们变得强大,生活的艰难终将成为
余生的经验。人生百般不如意,睡得着就过得去。岛上书店中说。
每个人的生命中都有最艰难的一年,等你迈过去了,人生就会变得高远
辽阔。
当我们熬过黑夜,便不惧黑夜,当我们穿过磨难,便能驾驭磨难。
人间的事,只要生机不灭,即使重遭天灾人祸,攒满足以,终有抬头
的日子。 
                            ——————   一禅心灵庙语


创建表

创建好数据库后,我们就可以为数据库创建数据表了。

关于如何创建数据库,大家可以移步到 🔜🔜🔜 Mysql :创建数据库和管理数据库

这里我们只是单纯的介绍如何创建表,关于表中的 数据类型 以及约束条件不作介绍

关于表的创建我们有两种方式:

第一种方式 :

我们称之为 白手起家,使用 CREATE TABLE 命令操作。在( ) 内使用空格分开列名和数据类型,以及约束条件,各个列之间使用 “,"(逗号) 分隔。注意: 的是最后一个列(字段),不要加逗号分隔开,不然会报错的

CREATE TABLE 语句的语法格式如下

CREATE TABLE IF NOT EXISTS 表名
(
列名1 数据类型  该列所需的约束条件,
列名2 数据类型  该列所需的约束条件,
列名3 数据类型  该列所需的约束条件
);

/* 注意的一点就是,最后一个列(字段),不要加逗号分隔开,不然会报错 */

该方式创建表有以下特点:

  1. 如果创建的表没有指定对应的字符集,默认使用的是所在数据库的字符集
  2. 如果创建的表,不存在,则创建该表,如果创建的表,已经存在了,则不会创建表,不会报错,而是默默的给予警告。

还可以通过 CRARACTER SET 指明创建的表的字符集

格式如下:

CREATE TABLE IF NOT EXISTS 表名
(
	列名1 数据类型
	列名2 数据类型
	列名3 数据类型
	
)CHARACTER SET '设定的字符集';

如创建表myemp9 字符集为gbk

CREATE TABLE IF NOT EXISTS myemp9 
(
	id INT,
	`name` VARCHAR(25),
	salary INT
) CHARACTER SET 'gbk';

查看结果:

SHOW CREATE TABLE myemp9;  /* 查看创建的数据库的字符集 */

在这里插入图片描述


当然你可以把 IF NOT EXTSTS 去了创建表

格式如下:

CREATE TABLE  表名
(
列名1 数据类型  该列所需的约束条件,    /* 当列名于关键字冲突时,需要使用着重号 */
列名2 数据类型  该列所需的约束条件,
列名3 数据类型  该列所需的约束条件
);
/* 注意的一点就是,最后一个列(字段),不要加逗号分隔开,不然会报错 */

该方式创建的表,如果表已经存在了,你再创建表的话,会报错。


如在数据库 test01中创建一个名为 myemp1的表,省略约束条件

首先切换到该数据库中去

USE test01;

创建表:

CREATE TABLE IF NOT EXISTS myemp1 (
id INT,
emp_name VARCHAR(15),
hire_date DATE           /* 最后一个不要加逗号,分隔,不然报错 */
);

当我们创建的表中字段名与 关键字 冲突时,要使用 着重号用于区分,

着重号: 在键盘的左上角,波浪号,数字 1 的左边

如下: 创建表 myemp4 ,字段命为 name ,使用着重号区分

CREATE TABLE IF NOT EXISTS myemp4
(
 `name` VARCHAR(15),     /* name 与 关键字冲突,使用着重号区分 */
 id INT                  /* 最后一个不要加逗号分隔,不然报错 */
);

创建表以后,我们可以使用 show 来显示数据库下的所有的表

显示当前数据库下的所有的表

格式如下:, 注意是 tables 多了一个 s

SHOW TABLES;

在这里插入图片描述


显示指定数据库下的所有的表

格式如下:

SHOW TABLES
FROM +指定的数据库名

如: 显示 test01数据库下的所有的表

SHOW TABLES
FROM test01;

在这里插入图片描述


使用 DESC 显示表的结构

格式如下:

DESC 表名;

如: 显示 myemp1的表结构

DESC myemp1;  
/* desc 查看表结构,也是降序 */

在这里插入图片描述


显示表的字符集属性

使用 show 查看表的字符集属性

格式:

SHOW CREATE TABLE 你要查看的表名;

如: 查看 myemp1 表的字符集属性

SHOW CREATE TABLE myemp1;

在这里插入图片描述


第二种方式

我们称为 ”查询结果创建表“ ,就是配合查询同时会把查询到的结果导入创建的表中

格式:

CREATE TABLE 表名
AS 
查询
SELECT 
FROM ;

注意: 当查询中的表不在所在的数据库中时,需要定位到对应的数据库中去数据库 .表名

如: 创建一个表 myemp02 基于employees 表中的数据

CREATE TABLE myemp2
AS
SELECT employee_id, last_name, salary
FROM atguigudb.`employees`; /* 注意employees 表是在 atguigudb 表中的,需要数据库.表名的索引 */

在这里插入图片描述


当该表已经存在时,再创建表时,会报错,如下:

在这里插入图片描述


查看表,是否创建成功

SHOW TABLES
FROM test01;

在这里插入图片描述


查看表中的数据

SELECT *
FROM myemp2;

在这里插入图片描述

从结果上看和 employees 表中的数据一模一样

查看表的结构

DESC myemp2;

在这里插入图片描述


注意: 当在查询上使用了字段的别名,其创建的表中的字段会以别名为 准创建表字段,如下:

创建表 myemp3 把 表employees 中的表别名使用上,以别名创建表字段

CREATE TABLE myemp3
AS                      /* 这里 name 于关键字冲突了,需要使用着重号 区分*/
SELECT employee_id id , last_name `name`, salary
FROM atguigudb.`employees`;        /* employees 表是在 atguigudb 数据库中的需要 数据库.表名索引 */

创建好后,查看表结构

DESC myemp3;

在这里插入图片描述

就是以表别名为准创建表字段的。


那,如何创建一个表的结构,我们不想要把表的数据导入到新创建的表中,只要该表的结构如何做呢,

这就简单,我们只要在查询语句 SELECT 中增加一个永远为 假(false) 的筛选条件,就可以了,需要 注意 的是 一定要为假 比如: 2 < 1 ,0 = 6 这样,这么做的原因就是让查询是结果为空,就不会导入数据。这让我想起了,一句话: 山无棱,天地合,乃敢与君绝。
需要注意的一点就是,该方式复制创建的表,并不会把原表中的存有的全部约束给复制过来了,可能只是复制了原表约束的一部分 比如:其中 not null 非空约束可能复制过来了,但是其中的 PRIMARY KEY 主键约束,可能就没有被复制过来了。

如下:

CREATE TABLE myemp6
AS
SELECT employee_id, last_name, salary
FROM atguigudb.`employees` /* employees 在 atguigudb 数据库中不在当前数据库中,需要数据库.表名索引*/
WHERE 2 < 1;    /* 筛选条件,永远为 假 false,查询不到数据 */

创建表后,查看数据是否有导入

SELECT *
FROM myemp6;

在这里插入图片描述

从查询结果上看并没有导入数据


修改表

修改表指的是修改数据库中已经存在的数据表的结构。

使用 ALTER TABLE 语句可以实现:

  • 向已有的表中添加列
  • 修改现有的表中的列
  • 删除现有表中的列
  • 重命名现有表中的列

增加一个列

格式如下:

ALTER TABLE 你要增加的字段的表名
ADD 字段 数据类型 

注意: 不要把数据类型给完了。

默认添加到已有字段的最后面

如下: 为 myemp 表中添加字段 salary 数据类型为 int

首先查看 myemp的表结构,好用于添加后的对比

DESC myemp1;

在这里插入图片描述


添加:

ALTER TABLE myemp1
ADD salary INT;

添加完后,查看 myemp1 的表结构

DESC myemp1; 

在这里插入图片描述

添加成功,默认添加到已有字段的最后面


将字段添加到最开头

使用关键字 FIRST

格式如下:

ALTER TABLE 你要修改的表名
ADD 你要添加的字段 数据类型 FIRST;

如: 将字段 num 添加到表 myemp1 的字段最开头处

ALTER TABLE myemp1
ADD num INT FIRST;
DESC myemp1;

在这里插入图片描述

从结果上看,我们添加成功了


将字段添加到指定的位置字段的后面

使用 关键字 AFTER ,可以将添加的字段,添加到指定字段的后面

格式如下:

ALTER TABLE 你要修改的表名
ADD 添加的字段 数据类型 AFTER 对应字段名的后面;

如: 将email 字段添加到 myemp1 表中 字段 id 的后面

ALTER TABLE myemp1
ADD emial VARCHAR(25) AFTER id;
/* 注意不要把数据类型给忘记了 */
DESC myemp1;

在这里插入图片描述

从结果上看,添加到指定位置处成功


修改一个列

对于修改一个列中是数据类型呢,这个风险很大,因为如果你在已有的表中修改字段的数据类型,可能会导致数据的丢失,如把一个 varchar 修改成了 int ,就会报错,而如果把一个 double 类型的字段修改为了 int 就会把 小数就会丢失了。所以对于表中的类型的修改需要慎重再慎重。

MODIFY 修改表中的数据类型

格式:

ALTER TABLE 修改的表名
MODIFY 修改的字段 修改的数据类型;

如: 将表myemp1 中的字段 id 的数据类型修改为 varchar(20)

首先查看表中的结构,用于比较修改后的数据类型

DESC myemp1;

在这里插入图片描述


修改

ALTER TABLE myemp1
MODIFY id VARCHAR(25);
DESC myemp1;

在这里插入图片描述

从结果上看修改成功了


MODIFY 配合 AFTER 可以修改字段的位置

格式:

ALTER TABLE 修改的表名
MODIFY 移动的字段 数据类型  AFTER 移动某个字段的后面;

如: 将myemp1表中的 id 移动到 hire_date 的后面

ALTER TABLE myemp1
MODIFY id VARCHAR(25) AFTER hire_date;

在这里插入图片描述


MODIFY 配合 FIRST 可以将指定的字段移动到最开头位置

格式:

ALTER TABLE 修改的表名
MODIFY 需要移动的字段名 数据类型  FIRST;

如: 将myemp1表中的 id 移动到 最开头

ALTER TABLE myemp1
MODIFY id VARCHAR(25) FIRST;
DESC myemp1;

在这里插入图片描述


MODIFY 配合 DEFAULT 可以修改字段的初始值

格式: 注意: 如果赋予修改的初值是字符或时间日期需要使用 单引号括起来,单纯是数值的话,不用

ALTER TABLE 修改的表名
MODIFY 修改的字段 数据类型 DEFAULT '设定的初始值' 
/* 注意如果设定的是字符以及时间日期需要使用单引号 括起来,
    单纯是数值的话,不用*/

如: 将表myemp1 中的字段 id 修改赋予初值 为 ‘A’

ALTER TABLE myemp1
MODIFY id VARCHAR(25) DEFAULT 'A';
DESC myemp1;

在这里插入图片描述


重命名一个列

使用 CHANGE 重命名一个列的字段名

格式:

ALTER TABLE 修改的表名
CHANGE 需要重命名的字段名 重命名后的字段名 数据类型;

如:将表myemp1 中的字段列 id名 修改为 myemp_id

ALTER TABLE myemp1
CHANGE id myemp_id VARCHAR(25);
DESC myemp1;

在这里插入图片描述


删除一个列

使用 DROP COLUMN 删除表中指定的字段(列)

格式:

ALTER TABLE 修改的表名
DROP COLUMN 需要删除的字段名;

如: 删除表myemp1 中的 字段(列)num

ALTER TABLE myemp1
DROP COLUMN num;
DESC myemp1;

在这里插入图片描述



修改表的字符集

和修改数据库的字符集的格式一样,使用 CHARACTER SET 修改表中的字符集

格式如下:

ALTER TABLE 修改的表名
CHARACTER SET '你想要设定的字符集';

如:把表 myemp9 的字符集改为 utf8mb4

ALTER TABLE myemp9 
CHARACTER SET 'utf8mb4';

查看结果

SHOW CREATE TABLE myemp9;  /* 查看创建的表的字符集 */

在这里插入图片描述


重命名表

重命名表存在两种方式:

第一种方式 :

直接使用 RENAME TABLE TO 修改表名

格式:

RENAME TABLE 需要重命名的表名
TO 重命名后的表名;

如: 将表名myemp1 重命名为 myemp01

RENAME TABLE myemp1
TO myemp01;
SHOW TABLES
FROM test01;  /* 查看指定的数据库中所有的表 */

在这里插入图片描述


第二种方式:

个人建议使用这种方式,和上面的修改表统一操作,方便记忆。

格式:

ALTER TABLE 需要重名的表名
RENAME TO 重命名后的表名;

如: 将表名 myemp01 重命名为 myemp1

ALTER TABLE myemp01
RENAME TO myemp1;
SHOW TABLES
FROM test01;  /* 查看指定数据库中所有的表*/

在这里插入图片描述


删除表

在 Mysql中,当一张数据表没有与其他任何数据表形成关联关系时,可以将当前数据表直接删除。数据和结构都被删除,所有正在运行的相关事务被提交,所有相关索引被删除。

删除表,有两种方式:

第一种方式:

直接使用 DROP TABLE 删除表

该删除表的一些特点:当你要删除的表,存在时,删除该表,当你要删除的表,不存在时,不会删除表,并报错

如下:

在这里插入图片描述

格式如下:

DROP TABLE 你要删除的表名;

如: 将test01 数据库下的表myemp4 删除了

DROP TABLE myemp4;
SHOW TABLES
FROM test01;  /* 查看指定数据库 test01 下的所有表*/

在这里插入图片描述


第二种方式

在第一种方式的基础上,增加了判断的机制 IF EXISTS

该删除表方式的特点:当表存在时,删除表,当表不存在时,不会删除表,并不会报错,会默默的给予警告,如下:

在这里插入图片描述


格式如下:

DROP TABLE IF EXISTS 你要删除的表名;

如: 将数据库test01 中的表 myemp5 删除了

DROP TABLE IF EXISTS myemp5;
SHOW TABLES
FROM test01; /* 查看指定数据库 test01 的下的所有表*/

在这里插入图片描述


清空表

清空表: 表示清空表中的所有数据,保留表结构,释放表的空间

使用 TRUNCATE TABLE 关键字,清空表

格式:

TRUNCATE TABLE 你要清空的表名;

如: 将表 myemp2 中的数据清空

先查看 myemp2 的数据,用于为后面删除后做比较

SELECT *
FROM myemp2;

在这里插入图片描述


清空myemp2 表中的数据

TRUNCATE TABLE myemp2;
SELECT *
FROM myemp2;

在这里插入图片描述


总结:

对于上述中的对表的修改,删除表操作将把表的定义和表中的数据一起删除,并且Mysql 在执行删除操作时,不会有任何的确定信息提示,因此执行删除操作应当慎重。在删除表前,最好对表中的数据进行备份,这样当操作失误时可以对数据进行恢复,以免造成无法挽回的后果。

同样的,在使用 ALTER TABLE 进行表的基本修改操作时,在执行操作过程之前,也应该确保对数据进行完整的备份,因为数据库的改变是无法撤销的,如果添加了一个不需要的字段,可以将其删除;相同的,如果删除了一个需要的列,该列下面的所有数据都将会丢失。所以,请慎重,再慎重。

最后:

限于自身水平,其中存在的错误,希望大家给予指教,韩信点兵——多多益善,谢谢大家,后会有期,江湖再见 !!!

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChinaRainbowSea

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值