MySQL 第三讲---基础篇 库与表操作(下)
前言:
欢迎回到《MySQL 第三讲——基础篇:库与表操作(下)》!在上一节课中,我们学习了如何通过基础命令创建、管理数据库与数据表。那么接下来,让我们继续深入,解锁MySQL库与表操作的完整能力体系!
一、表操作语句
表操作至少需要会下面两类的SQL语句:
- DDL(Data Definition Language)数据定义语言:比如建表、删表、该表、新增列、删除列等。
- DML(Data Manipulation Language)数据操作语言:比如插入记录、删除记录、修改记录等
当然在本文当中,我们是介绍表结构操作语句,也就是DDL语句,关于DML语句我们会在后面的博客中学习到。
1.1 创建表
创建表
创建表的SQL语句如下:
CREATE TABLE [IF NOT EXISTS] table_name(field1 datatype1 [COMMENT '注释信息'],field2 datatype2 [COMMENT '注释信息'],field3 datatype3 [COMMENT '注释信息']
)[CHARSET=charset_name] [COLLATE=collation_name] [ENGINE=engine_name];
SQL中大写的表示关键字,[ ]中代表的是可选项。
- field表示列名,datatype表示列的类型。
- CHARSET用于指定表所采用的编码格式,如果没有指定则以所在数据库的编码格式为准。
- COLLATE用于指定表所采用的校验规则,如果没有指定则以所在数据库的校验规则为准。
- ENGINE用于指定表所采用的存储引擎。
- COMMENT用于对指定列添加注释信息。
这里我们需要注意的是:我的MySQL默认使用的是InnoDB存储引擎,如果我没有指定使用哪种存储引擎那么就会默认使用InnoDB存储引擎。
如果大家想要查询自己的默认引擎,可以根据我们之前学习到的show enginee查询
演示:
1.2 查看表结构
使用 desc 表名
SQL可以查看表的结构。
desc user;
- Field表示该字段的名字。
- Type表示该字段的类型。
- Null表示该字段是否允许为空。
- Key表示索引类型,比如主键索引为PRI。
- Default表示该字段的默认值。
- Extra表示该字段的额外信息说明。
如果想要查看创建表时的相关细节,可以使用 show create table 表名SQL。实际上,当我们对表的结构进行改变时,改变同样可以在创建表结构查询。
如下:
show create table user\G
实际上,MySQL在内部其实会将我们的语句,存储成上表显示的样子。
1.3 修改表
修改表的 SQL如下:
- ALTER TABLE table_name ADD 新增列名 新增列的属性;
- ALTER TABLE table_name MODIFY 列名 修改后的列属性;
- ALTER TABLE table_name DROP 列名;
- ALTER TABLE table_name RENAME [TO] 新表名;
- ALTER TABLE table_name CHANGE 列名 新列名 新列属性;
先看一下表中原有的信息:
1)我们现在要新增一列。
指令:
alter table table_name add 列名与列的属性;
我们也是可以指定新增列的位置,使用after即可,后接列名,表示的是新增列放在那一列后面。
如果想要将新增列放在第一列,可以将after及其之后的语句换成 not null first
。
2)我们要删除某一列
3)我们要修改某一列。
例如,我们想将path路径可容纳字符数,提到更高的数量。
关于修改操作,大家可以就像在创建表时那样,对结构进行操作。
4)我们想要修改列名
当然对列属性进行修改也是该语句,大家可以直接使用该语句对列名与属性同时修改。
5)我们想要对整张表名修改
1.4 删除表
删除表
DROP [TEMPORARY] TABLE [IF EXISTS] table_name;
- 在创建表语句中加上TEMPORARY关键字,那么服务器将创建出一个临时表,该表会在你与服务器的会话终止时自动消失。
- TEMPORARY表的名字可以与某个已有的永久表相同,当有TEMPORARY表存在时,对应的永久表会隐藏起来(即无法访问)。
- 为了避免重新连接后(TEMPORARY已经不存在),在未做检测的情况下调用DROP误删了对应永久表,因此在使用DROP删除临时表时需要带上TEMPORARY关键字。
当然在普通情况下,我们肯定没有必要专门创建一个临时表。
演示:
总结:
不过,仅仅学会“建库建表”还不够——字段的数据类型直接影响数据的存储效率、查询性能以及业务逻辑的严谨性。例如,为什么有的字段要用INT
而不是VARCHAR
?DATETIME
和TIMESTAMP
有何区别?如何避免因类型选择不当导致的数据错误或资源浪费?
在下一讲《MySQL 第四讲——基础篇:数据类型》中,我们将深入探讨这些问题。
下一讲预告
《MySQL 第四讲——基础篇:数据类型》
关键词:数值类型、字符类型、日期时间、枚举与集合、类型选择优化
我们下期见。