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 子句,当表不存在时不会报错,避免因表不存在而导致的脚本执行中断。

相关推荐
islandzzzz1 小时前
三表查询SQL怎么写?----小白初学+案例引入
数据库
卡布奇诺-海晨2 小时前
MySQL的MVCC机制
数据库·mysql
hao_wujing2 小时前
攻击模型的恶意行为检测
网络·数据库·php
秃头摸鱼侠3 小时前
MySQL查询语句(续)
数据库·mysql
MuYiLuck3 小时前
【redis实战篇】第八天
数据库·redis·缓存
睡觉待开机3 小时前
6. MySQL基本查询
数据库·mysql
大熊猫侯佩4 小时前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(三)
数据库·swiftui·swift
大熊猫侯佩4 小时前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(二)
数据库·swiftui·swift
大熊猫侯佩4 小时前
用异步序列优雅的监听 SwiftData 2.0 中历史追踪记录(History Trace)的变化
数据库·swiftui·swift
大熊猫侯佩4 小时前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(一)
数据库·swiftui·swift