目录
一、创建表
创建表是数据库操作的起点,其基本语法如下:
CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;
- field:指定列名,用于存储不同类型的数据,如用户姓名、年龄等。
- datatype:定义列的数据类型,例如
int
(整数)、varchar(n)
(长度可变的字符串,n
为最大长度)、date
(日期)等。数据类型的选择应根据实际存储需求确定,以确保数据的准确性和存储效率。例如,存储年龄使用int
,存储姓名使用varchar(50)
。 - character set:指定字符集,如
utf8
,用于支持不同语言字符的存储和显示。若未指定,则采用数据库默认字符集。正确的字符集设置可避免字符乱码问题,尤其在处理多语言数据时至关重要。 - collate:校验规则,用于确定字符的比较和排序方式。不同校验规则可能影响数据查询和排序的结果,未指定时沿用数据库默认规则。
- engine:存储引擎,如
MyISAM
、InnoDB
。不同的存储引擎具有不同的特点和适用场景。MyISAM
引擎擅长读操作,但不支持事务;InnoDB
支持事务、行级锁,适合高并发读写的场景。
使用
show engines
SQL可以查看当前MySQL支持的存储引擎:
🌴案例:创建一个用户信息表 users
,存储用户的基本信息。
CREATE TABLE users (
id INT,
name VARCHAR(20) COMMENT '用户名',
password CHAR(32) COMMENT '密码是32位的md5值',
birthday DATE COMMENT '生日'
) charset=utf8mb4 engine=MyISAM;
说明:
id
列为整数类型,用于存储用户唯一标识。name
列为长度不超过20的可变字符串,存储用户名,并添加注释说明。password
列为固定长度32的字符类型,存储经过 MD5 加密的密码。birthday
列为日期类型,记录用户生日。- 指定字符集为
utf8mb4
,以支持中文等多语言字符。- 使用
MyISAM
存储引擎。
不同存储引擎创建的表文件也不同。以 MyISAM
引擎为例,在数据库(8.0版本)目录下会生成三个文件:
users_376.sdi
:存储序列化字典信息(Serialized Dictionary Information,SDI)。users.MYD
:存储表数据。users.MYI
:存储表索引。
若创建 InnoDB
引擎的表,表结构和数据存储在 .ibd
文件中
注:在 MySQL 8.0 中,传统的
.frm
文件已被废弃,取而代之的是新的数据字典架构。数据字典是一个存储数据库元数据的系统,它包含了数据库中所有对象的定义和相关信息。users_376.sdi
文件的作用类似于之前的.frm
文件,用于存储表的元数据,如表的结构定义、列信息、索引信息等。
二、查看表结构
在对表进行操作或调试时,可能需要查看表的结构以了解其定义。可以使用以下命令查看表结构:
DESC 表名;
例如,查看 users
表的结构:
DESC users;
如果想要查看创建表时的相关细节,可以使用 show create table 表名 \G 命令
。如下:
三、修改表
在实际的数据库操作中,修改表结构有可能对表内的数据产生影响。为了更直观地展示这一过程,我们可以在对表进行修改之前,先向用户表(如 users
表)中插入示例数据。这一操作将为后续的演示提供基础数据,便于观察修改表结构时数据的变化情况。以下是插入数据的示例:
1. 添加字段
当需要存储新的数据信息时,可以向表中添加字段。语法如下:
ALTER TABLE tablename ADD 新增列名 新增列的属性;
🌴案例:向 users
表中添加一个用于保存图片路径的字段 assets
,放置在 birthday
列之后。
ALTER TABLE users ADD assets VARCHAR(100) COMMENT '图片路径' AFTER birthday;
执行后,users
表的结构将新增 assets
列。对于原有数据行,新添加的字段值将为 NULL
(若该字段允许为空)或默认值(若指定了默认值)。
2. 修改字段类型
随着需求的变化,可能需要修改字段的数据类型、长度、默认值等属性。语法如下:
ALTER TABLE tablename MODIFY 列名 修改后的列属性;
🌴案例:将 users
表中的 name
字段长度从 20 修改为 60。
ALTER TABLE users MODIFY name VARCHAR(60);
执行后,name
字段的数据类型保持 varchar
,但长度变为 60。修改字段属性时,需确保修改后的数据类型与原有数据兼容,避免数据丢失或错误。
3. 删除字段
如果某个字段不再需要,可以将其从表中删除。但需谨慎操作,删除字段的同时会丢失该字段的所有数据。语法如下:
ALTER TABLE tablename DROP 列名;
🌴案例:删除 users
表中的 password
列。
ALTER TABLE users DROP password;
执行后,password
列将从表结构中移除,相应数据也不再保留。
4. 修改表名
根据项目需求,可能需要修改表名。语法如下:
ALTER TABLE tablename RENAME [TO] 新表名;
🌴案例:将 users
表重命名为 client。
- to:可以省掉
ALTER TABLE users RENAME TO client;
执行后,表名变为 client
,但表结构和数据保持不变。
5. 修改字段名称
当需要更改字段名称时,可以使用以下语法:
ALTER TABLE tablename CHANGE 列名 新列名 新列属性;
🌴案例:将 client表中的 name
列修改为 xingming
。
ALTER TABLE tablename CHANGE name xingming varchar(20);
需注意,在 CHANGE
子句中要重新指定新字段的数据类型,确保与原有数据兼容。
四、删除表
当表不再需要时,可以将其删除。此操作将永久移除表及其所有数据,需谨慎执行。语法如下:
DROP TABLE [IF EXISTS] tbl_name;
🌴案例:删除名为 client
的表。
DROP TABLE client;
若添加 IF EXISTS
子句,当表不存在时不会报错,避免因表不存在而导致的脚本执行中断。