MySQL 表的操作

关于 MySQL 表的创建、查看、修改与删除操作

1. 创建表
sql 复制代码
CREATE TABLE IF NOT EXISTS 表名 (
    列名1 数据类型,
    列名2 数据类型,
    列名3 数据类型
) CHARACTER SET 字符集 COLLATE 校验规则 ENGINE 存储引擎;
  • field 表示列名,是表中数据的存储单元,列名应具有明确的含义,方便理解和维护。

  • datatype 表示列的类型,如 int(整数类型)、varchar(可变长度字符串类型)等,用于定义数据的格式。选择合适的数据类型可以节省存储空间并提高查询效率。

  • character set 是字符集,如果没有指定字符集,则以所在数据库的字符集为准。字符集用于定义数据的编码方式,如 utf8 可以支持多种语言的字符,适合国际化应用。

  • collate 是校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准。校验规则用于定义字符比较的方式,不同的校验规则可能导致字符串比较的结果不同。

  • engine 是存储引擎,不同的存储引擎有不同的特性。例如,MyISAM 存储引擎支持全文索引,但不支持事务;InnoDB 存储引擎支持事务、行级锁等特性,适合高并发的场景。

2. 创建表案例

说明:

不同的存储引擎,创建表的文件不一样。例如,users 表存储引擎是 MyISAM,在数据目录中有三个不同的文件,分别是:

  • users.frm:表结构文件,存储表的定义信息,包括表的列定义、索引定义等。
  • users.MYD:表数据文件,存储表中的数据记录。
  • users.MYI:表索引文件,存储表的索引信息,用于加速数据查询。

如果创建一个存储引擎为 InnoDB 的表,其文件存储方式会有所不同,InnoDB 表的数据和索引通常存储在共享表空间或独立表空间中,而不是像 MyISAM 那样有单独的 .MYD.MYI 文件。

创建一个 engineinnodb 的数据库,观察存储目录。

sql 复制代码
CREATE TABLE users (
    id int,
    name varchar(20) COMMENT '用户名',
    password char(32) COMMENT '密码是32位的md5值',
    birthday date COMMENT '生日'
) CHARACTER SET utf8 ENGINE MyISAM;
  • 在创建表时,COMMENT 用于为列添加注释,方便后续理解和维护表结构。

  • CHARACTER SET utf8 指定了字符集为 utf8,这样可以存储多种语言的字符。

  • ENGINE MyISAM 指定了存储引擎为 MyISAM,根据实际需求可以选择其他存储引擎,如 InnoDB

3. 查看表结构
sql 复制代码
DESC 表名;
  • DESCDESCRIBE 的简写,用于查看表的结构信息。

  • 执行该语句后,会显示表的列名、数据类型、是否允许为空、键信息、默认值和额外信息等。

4. 修改表

在项目实际开发中,经常需要修改某个表的结构,比如字段名字、字段大小、字段类型、表的字符集类型、表的存储引擎等。此外,还可能需要添加字段、删除字段等。这时就需要对表进行修改。

添加列
sql 复制代码
ALTER TABLE [tablename] ADD (
column datatype [DEFAULT expr]
[, column datatype]...);

ALTER TABLE 表名 ADD (
列名 数据类型 [DEFAULT 默认值]
[, 列名 数据类型]...);
  • tablename 是要修改的表名。

  • column 是要添加的列名。

  • datatype 是列的数据类型。

  • DEFAULT expr 是为新列设置的默认值表达式(可选)。

修改列
sql 复制代码
ALTER TABLE [tablename] MODIFY (
column datatype [DEFAULT expr]
[, column datatype]...);

ALTER TABLE 表名 MODIFY (
列名 新数据类型 [DEFAULT 新默认值]
[, 列名 新数据类型]...);
  • tablename 是要修改的表名。

  • column 是要修改的列名。

  • datatype 是修改后的列的数据类型。

  • DEFAULT expr 是为修改后的列设置的默认值表达式(可选)。

删除列
sql 复制代码
ALTER TABLE [tablename] DROP (column);

ALTER TABLE 表名 DROP (列名);
  • tablename 是要修改的表名。

  • column 是要删除的列名。

这些语句用于对 MySQL 数据库中的表进行结构修改,包括添加新列、修改现有列的定义以及删除列。在执行这些操作时,需要确保对表结构的修改不会影响现有数据的完整性和应用的正常运行。

users 表中添加两条记录。

sql 复制代码
INSERT INTO users VALUES (1, 'a', 'b', '1982-01-04'), (2, 'b', 'c', '1984-01-04');

users 表中添加一个字段,用于保存图片路径。

sql 复制代码
ALTER TABLE users ADD assets VARCHAR(100) COMMENT '图片路径' AFTER birthday;
  • 使用 ALTER TABLE 添加字段时,可以通过 AFTER 指定新字段插入的位置,如果不指定,则默认添加到表的最后。

插入新字段后,对原来表中的数据没有影响。

sql 复制代码
DESC users;

输出结果:

复制代码
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id       | int(11)      | YES  |     | NULL    |       |
| name     | varchar(20)  | YES  |     | NULL    |       |
| password | char(32)     | YES  |     | NULL    |       |
| birthday | date         | YES  |     | NULL    |       |
| assets   | varchar(100) | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+

查看表中数据:

sql 复制代码
SELECT * FROM users;

输出结果:

复制代码
+------+------+----------+------------+-------+
| id   | name | password | birthday   | assets|
+------+------+----------+------------+-------+
| 1    | a    | b        | 1982-01-04 | NULL  |
| 2    | b    | c        | 1984-01-04 | NULL  |
+------+------+----------+------------+-------+

修改 name,将其长度改成 60。

sql 复制代码
ALTER TABLE users MODIFY name VARCHAR(60);
  • 使用 MODIFY 修改字段时,需要重新定义字段的数据类型等属性,如果只是修改字段名,可以使用 CHANGE

删除 password 列。

sql 复制代码
ALTER TABLE users DROP password;

注意:删除字段一定要小心,删除字段及其对应的列数据都会丢失。

修改表名为 employee。(to 可以省略)

sql 复制代码
ALTER TABLE users RENAME TO employee;

name 列修改为 xingming。(to 可以省略)

sql 复制代码
ALTER TABLE employee CHANGE name xingming VARCHAR(60);
  • 使用 CHANGE 修改字段名时,需要指定新字段名和数据类型,即使数据类型不变也需要重新声明。
5. 删除表
sql 复制代码
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...
  • TEMPORARY 表示要删除的是临时表。

  • IF EXISTS 用于避免在表不存在时产生错误,如果表不存在,执行该语句不会报错。

  • 可以一次性删除多个表,只需在表名之间用逗号分隔。

删除表 t1

sql 复制代码
DROP TABLE t1;

在执行删除表操作时,表中的所有数据和结构都会被永久删除,因此在执行该操作前,一定要确保不再需要该表中的数据。

相关推荐
jiayou643 小时前
KingbaseES 实战:审计追踪配置与运维实践
数据库
随风飘的云4 小时前
mysql的innodb引擎对可重复读做了那些优化,可以避免幻读
mysql
二流小码农5 小时前
鸿蒙开发:上传一张参考图片便可实现页面功能
android·ios·harmonyos
鹏程十八少5 小时前
4.Android 30分钟手写一个简单版shadow, 从零理解shadow插件化零反射插件化原理
android·前端·面试
Kapaseker6 小时前
一杯美式搞定 Kotlin 空安全
android·kotlin
三少爷的鞋6 小时前
Android 协程时代,Handler 应该退休了吗?
android
NineData15 小时前
NineData 迁移评估功能正式上线
数据库·dba
火柴就是我20 小时前
让我们实现一个更好看的内部阴影按钮
android·flutter
NineData20 小时前
数据库迁移总踩坑?用 NineData 迁移评估,提前识别所有兼容性风险
数据库·程序员·云计算
赵渝强老师1 天前
【赵渝强老师】PostgreSQL中表的碎片
数据库·postgresql