Mysql: 创建表 和 管理表
每博一文案
人生之事,不如意十之八九。
我们生活的每一天,或多或少的都会遇到一些烦心的事,我们有跌倒
的瞬间,我们有委屈的时候,但这些经历都丰富了,我们的人生,
生活中的苦,让我们品尝了苦涩的滋味。更让我们懂得珍惜人生的甜蜜。
漫漫人生路,不管是好与坏,苦与甜都是人生的调味剂。
凡是打不到我们的终将让我们变得强大,生活的艰难终将成为
余生的经验。人生百般不如意,睡得着就过得去。岛上书店中说。
每个人的生命中都有最艰难的一年,等你迈过去了,人生就会变得高远
辽阔。
当我们熬过黑夜,便不惧黑夜,当我们穿过磨难,便能驾驭磨难。
人间的事,只要生机不灭,即使重遭天灾人祸,攒满足以,终有抬头
的日子。
—————— 一禅心灵庙语
创建表
创建好数据库后,我们就可以为数据库创建数据表了。
关于如何创建数据库,大家可以移步到 🔜🔜🔜 Mysql :创建数据库和管理数据库
这里我们只是单纯的介绍如何创建表,关于表中的 数据类型 以及约束条件不作介绍
关于表的创建我们有两种方式:
第一种方式 :
我们称之为 白手起家,使用 CREATE TABLE 命令操作。在( ) 内使用空格分开列名和数据类型,以及约束条件,各个列之间使用 “,"(逗号) 分隔。注意: 的是最后一个列(字段),不要加逗号分隔开,不然会报错的
CREATE TABLE 语句的语法格式如下
CREATE TABLE IF NOT EXISTS 表名
(
列名1 数据类型 该列所需的约束条件,
列名2 数据类型 该列所需的约束条件,
列名3 数据类型 该列所需的约束条件
);
/* 注意的一点就是,最后一个列(字段),不要加逗号分隔开,不然会报错 */
该方式创建表有以下特点:
- 如果创建的表没有指定对应的字符集,默认使用的是所在数据库的字符集
- 如果创建的表,不存在,则创建该表,如果创建的表,已经存在了,则不会创建表,不会报错,而是默默的给予警告。
还可以通过 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 进行表的基本修改操作时,在执行操作过程之前,也应该确保对数据进行完整的备份,因为数据库的改变是无法撤销的,如果添加了一个不需要的字段,可以将其删除;相同的,如果删除了一个需要的列,该列下面的所有数据都将会丢失。所以,请慎重,再慎重。
最后:
限于自身水平,其中存在的错误,希望大家给予指教,韩信点兵——多多益善,谢谢大家,后会有期,江湖再见 !!!