MySQL表的操作

目录

一、创建表

二、查看表结构

三、修改表

[1. 添加字段](#1. 添加字段)

[2. 修改字段类型](#2. 修改字段类型)

[3. 删除字段](#3. 删除字段)

[4. 修改表名](#4. 修改表名)

[5. 修改字段名称](#5. 修改字段名称)

四、删除表


一、创建表

创建表是数据库操作的起点,其基本语法如下:

cpp 复制代码
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 :存储引擎,如 MyISAMInnoDB 。不同的存储引擎具有不同的特点和适用场景。MyISAM 引擎擅长读操作,但不支持事务;**InnoDB**支持事务、行级锁,适合高并发读写的场景。

使用show enginesSQL可以查看当前MySQL支持的存储引擎:

🌴案例 :创建一个用户信息表 users,存储用户的基本信息。

cpp 复制代码
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. 添加字段

当需要存储新的数据信息时,可以向表中添加字段。语法如下:

cpp 复制代码
ALTER TABLE tablename ADD 新增列名 新增列的属性;

🌴案例 :向 **users**表中添加一个用于保存图片路径的字段 assets,放置在 **birthday**列之后。

复制代码
ALTER TABLE users ADD assets VARCHAR(100) COMMENT '图片路径' AFTER birthday;

执行后,users 表的结构将新增 assets 列。对于原有数据行,新添加的字段值将为 NULL(若该字段允许为空)或默认值(若指定了默认值)。

2. 修改字段类型

随着需求的变化,可能需要修改字段的数据类型、长度、默认值等属性。语法如下:

cpp 复制代码
ALTER TABLE tablename MODIFY 列名 修改后的列属性;

🌴案例 :将 **users**表中的 **name**字段长度从 20 修改为 60。

复制代码
ALTER TABLE users MODIFY name VARCHAR(60);

执行后,name 字段的数据类型保持 varchar,但长度变为 60。修改字段属性时,需确保修改后的数据类型与原有数据兼容,避免数据丢失或错误。

3. 删除字段

如果某个字段不再需要,可以将其从表中删除。但需谨慎操作,删除字段的同时会丢失该字段的所有数据。语法如下:

cpp 复制代码
ALTER TABLE tablename DROP 列名;

🌴案例 :删除 **users**表中的 **password**列。

复制代码
ALTER TABLE users DROP password;

执行后,password 列将从表结构中移除,相应数据也不再保留。

4. 修改表名

根据项目需求,可能需要修改表名。语法如下:

cpp 复制代码
ALTER TABLE tablename RENAME [TO] 新表名;

🌴案例 :将 **users**表重命名为 client

  • to:可以省掉
cpp 复制代码
ALTER TABLE users RENAME TO client;

执行后,表名变为 client,但表结构和数据保持不变。

5. 修改字段名称

当需要更改字段名称时,可以使用以下语法:

cpp 复制代码
ALTER TABLE tablename CHANGE 列名 新列名 新列属性;

🌴案例 :将 client表中的 **name**列修改为 xingming

cpp 复制代码
ALTER TABLE tablename CHANGE name xingming varchar(20);

需注意,在 CHANGE 子句中要重新指定新字段的数据类型,确保与原有数据兼容。

四、删除表

当表不再需要时,可以将其删除。此操作将永久移除表及其所有数据,需谨慎执行。语法如下:

复制代码
DROP TABLE [IF EXISTS] tbl_name;

🌴案例 :删除名为 **client**的表。

cpp 复制代码
DROP TABLE client;

若添加 IF EXISTS 子句,当表不存在时不会报错,避免因表不存在而导致的脚本执行中断。

相关推荐
慕木兮人可1 小时前
Docker部署MySQL镜像
spring boot·后端·mysql·docker·ecs服务器
{⌐■_■}2 小时前
【Kafka】登录日志处理的三次阶梯式优化实践:从同步写入到Kafka多分区批处理
数据库·分布式·mysql·kafka·go
isNotNullX2 小时前
数据中台架构解析:湖仓一体的实战设计
java·大数据·数据库·架构·spark
kfepiza4 小时前
Debian10安装Mysql5.7.44 笔记250707
笔记·mysql·debian
armcsdn5 小时前
基于Docker Compose部署Traccar容器与主机MySQL的完整指南
mysql·docker·容器
睿思达DBA_WGX5 小时前
由 DB_FILES 参数导致的 dg 服务器无法同步问题
运维·数据库·oracle
袋鼠云数栈6 小时前
使用自然语言体验对话式MySQL数据库运维
大数据·运维·数据库·后端·mysql·ai·数据治理·数栈·data+ai
渣渣盟6 小时前
掌握MySQL函数:高效数据处理指南
sql·mysql·adb·dba
阿里云大数据AI技术6 小时前
数据 + 模型 驱动 AI Native 应用发展
大数据·数据库·人工智能
铅笔侠_小龙虾7 小时前
Docker 实战 -- Mysql
mysql·docker·容器