从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档
  • 计算机简史

  • 数字电路

  • 计算机组成原理

  • 操作系统

  • Linux

  • 计算机网络

  • 数据库

    • 教程概述
    • 数据的存储
    • 数据库的安装
    • 数据库的启停与连接
    • 数据库的管理
    • SQL 概述
    • 表的管理
      • 表的创建
      • 列出所有表
      • 删除表
      • 变更表
      • 查看表结构
      • 查看表信息
      • 查看建表语句
      • 添加数据
    • SELECT 基础
    • 运算符
    • 聚合查询
    • 数据的排序
    • 数据的插入
    • 数据的删除
    • 数据的更新
    • 事务
    • 视图
    • 子查询
    • 函数
    • 谓词
    • CASE 表达式
    • 集合运算
    • 联结查询-JOIN
    • SQL 入门小结
    • 更多数据库
    • MySQL 的数据类型
    • 命令行的一些用法
    • 用户与权限管理
    • MySQL 的权限管理
    • mysqldump
    • mysqladmin
    • Liquibase
    • 表注释与字段注释
    • 编码类型
  • 编程工具

  • 装机

  • 计算机基础
  • 数据库
2023-11-16
目录

表的管理

# 50.表的管理

本篇来讲讲表的创建、插入数据和删除数据

‍ ‍

# 表的创建

‍

# 商品表结构

接下来我们创建一个表:商品表。结构类似这样:

商品编号 商品名称 商品种类 销售单价 进货单价 登记日期
0001 T 恤衫 衣服 1000 500 2009-9-20
0002 打孔器 办公用品 500 320 2009-9-11
0003 运动 T 恤 衣服 4000 2800
0004 菜刀 厨房用具 3000 2800 2009-9-20
0005 高压锅 厨房用具 6800 5000 2009-1-15
0006 叉子 厨房用具 500 2009-9-20
0007 擦菜板 厨房用具 880 790 2008-4-28
0008 圆珠笔 办公用品 100 2009-11-11

可以看到该表由 6 列 8 行所组成。最上面一行是数据的项目名,真正的数据是从第 2 行开始的。

接下来我们的操作是在数据库 shop 中,请读者们准备好该数据库并切换。 ‍

# 创建表的语法

接下来我们使用 CREATE TABLE 语句 在其中创建表。CREATE TABLE 语句的语法如下所示:

CREATE TABLE <表名>
( <列名1> <数据类型> <该列所需约束>,
  <列名2> <数据类型> <该列所需约束>,
  <列名3> <数据类型> <该列所需约束>,
  <列名4> <数据类型> <该列所需约束>,
               .
               .
               .
  <该表的约束1>, <该表的约束2>,……
);
1
2
3
4
5
6
7
8
9
10

‍ 说明:

  • 该语法清楚地描述了我们要创建一个包含 < 列名 1>、< 列名 2>、……的名称为 < 表名 > 的表,非常容易理解
  • 创建表的时候,只需指定这个表的结构即可,至于这个表有什么内容,得先创建表后再填充内容
  • 必须要指定每一列是什么数据类型(数字,字符串还是日期等)
  • 指定了列名和数据类型后,还可指定约束:例如最多存储几位的数据,是否允许为空(NOT NULL)等,也可以没有约束
  • 约束可以在定义列的时候进行设置,也可以在语句的末尾进行设置。NOT NULL 约束只能以列为单位进行设置
  • 一个数据库中不允许同名表,假设数据库中已经有了 Product 表,那么再次创建会报错;后期我们会学习 create if not exist 语法,在创建前先判断是否有同名表

实际上,创建一个表可以配置很多内容,这里我们用了最少的配置。

# 开始创建

接下来我们创建商品表(Product):

CREATE TABLE Product
(
    product_id      CHAR(4)      NOT NULL,
    product_name    VARCHAR(100) NOT NULL,
    product_type    VARCHAR(32)  NOT NULL,
    sale_price      INTEGER,
    purchase_price  INTEGER,
    regist_date     DATE,
    PRIMARY KEY (product_id)
);
1
2
3
4
5
6
7
8
9
10

‍ 商品表和 Product 表列名的对应关系:

商品表中的列名 Product 表定义的列名
商品编号 product_id
商品名称 product_name
商品种类 product_type
销售单价 sale_price
进货单价 purchase_price
登记日期 regist_date

# 数据类型

创建 Product 表时,在列名右侧有 INTEGER 或 CHAR 关键字,是用来声明该列的数据类型的,所有的列都必须指定数据类型。

数据类型表示数据的种类,包括数字型、字符型和日期型等。每一列都不能存储与该列数据类型不符的数据。声明为整数型的列中不能存储 'abc' 这样的字符串,声明为字符型的列中也不能存储 1234 这样的数字。

数据类型的种类很多,各个 RDBMS 之间也存在很大差异。根据业务需要实际创建数据库时,一定要根据不同的 RDBMS 选用最恰当的数据类型。

但在学习 SQL 的时候,使用最基本的数据类型就足够了。四种基本数据类型:

  • INTEGER 型:用来指定存储整数的列的数据类型(数字型),不能存储小数
  • CHAR 型:CHAR 是 CHARACTER(字符)的缩写,表明存储的是字符串。例如 CHAR(10)​ , CHAR(200)​ ,在括号中指定该列可以存储的字符串的最大长度。如果超过长度则存储失败。不足最大长度则会用半角空格补足
  • VARCHAR 型:同 CHAR 类型一样,也是存储字符串,也可以通过括号内的数字来指定字符串长度。区别在于,varchar 类型是以可变长字符串 的形式来保存字符串的(VAR 是 VARING “可变的”,的缩写) ,即使字符数未达到最大长度,也不会用半角空格补足
  • DATE 型:用来指定存储日期(年月日)的列的数据类型(日期型)。

注意:之前说的是 SQL 语句的关键字不区分大小写,表中存储的字符串还是区分大小写的。

# 约束的设置

约束是除了数据类型之外,对列中存储的数据进行限制或者追加条件的功能。

Product 表中设置了两种约束:not null 约束和主键约束 ‍

# not null 约束

Product 表的 product_id 列、product_name 列和 product_type 列的定义如下所示:

product_id   CHAR(4)        NOT NULL,
product_name VARCHAR(100)   NOT NULL,
product_type VARCHAR(32)    NOT NULL,
1
2
3

数据类型的右侧设置了 NOT NULL 约束 。 NULL 是代表空白(无记录)的关键字 。在 NULL 之前加上了表示否定的 NOT,就是给该列设置了不能输入空白,也就是必须输入数据的约束(如果什么都不输入就会出错)。

NULL 这个词是无或空的意思,NULL 是使用 SQL 时的常见关键字,请大家牢记。 ‍

# 主键约束

在创建 Product 表的 CREATE TABLE 语句的后面,还有下面这样的语句:

PRIMARY KEY (product_id)
1

这是指定 product_id 列作为主键(PRIMARY KEY)。

一个表中,有很多数据,那怎么确定某一行的数据呢?如果有两行相同的数据,那么就无法取出唯一的特定数据了(因为无法确定唯一的一行数据)

此时我们可以用主键来确定具体某一行。主键就好比一行数据的“身份证”,每一行的主键都是不一样的。这样就能确定具体的某一行了。

主键可以是一个列,也可以是多个列,一个表中只能有一个主键。 ‍

# 列出所有表

列出当前数据库的所有表,使用命令 show tables;​,例如查看 shop ​这个数据库下的所有表:

mysql> show tables;
+----------------+
| Tables_in_shop |
+----------------+
| product        |
+----------------+
1 row in set (0.00 sec)
1
2
3
4
5
6
7

‍

# 删除表

删除表的 SQL 语句非常简单,语法:

drop table  <表名>;
1

‍ 示例:删除 Product 表

drop table Product;
1

DROP 在英语中是“丢掉”“舍弃”的意思。

需要特别注意的是,删除的表是无法恢复的,删除需谨慎。

# 变更表

创建完表后,可能想要加多几列,或者修改下约束,这时无需把表删除再重新创建,只需使用变更表定义的 ALTER TABLE 语句 就可以了。 ‍

# 添加列

添加列的语法:

ALTER TABLE <表名> ADD COLUMN <列的定义>;
1

‍ 例如,在 Product 表中添加一列,product_name_pinyin (商品名称(拼音)),该列可以存储 100 位的可变长字符串。

ALTER TABLE Product ADD COLUMN product_name_pinyin VARCHAR(100);
1

‍ MySQL 增加列的时候可以指定此列的位置。给指定位置加列需要两个关键字:FIRST 和 AFTER。

  • FIRST 表示增加此列为第一个列
  • AFTER 表示增加在某个列之后
  • 注意没有 BEFORE 的用法,第一列可以使用 FIRST, 非第一列使用 AFTER

语法:

--语法
ALTER TABLE table_name 
ADD [COLUMN] col_name column_definition 
[ FIRST | AFTER col_name] 
1
2
3
4

‍ 特定 SQL:Oracle 和 SQL Server 中添加列不用写 COLUMN 。语法:

ALTER TABLE <表名> ADD <列名> ;
1

‍

# 删除列

删除列的语法:

ALTER TABLE <表名> DROP COLUMN <列名>;
1

‍ 例如,删除刚刚添加的列:

ALTER TABLE Product DROP COLUMN product_name_pinyin;
1

‍ 注意,ALTER 执行之后无法恢复。误添加的列可以通过 ALTER TABLE 语句删除,误删的列则不能恢复了(该列的数据会丢失)

# 修改表名

大部分 DBMS 都提供了修改表名的指令,例如 rename,有些数据库用的是 alter。通常在 RENAME 之后按照 <变更前的名称>、<变更后的名称>​ 的顺序来指定表的名称。

例如将 Product 表重命名为 Product2,各 DBMS 语法如下:

--MySQL
RENAME TABLE Product to Product2;

--Oracle  PostgreSQL
ALTER TABLE Product RENAME TO Product2;

--DB2
RENAME TABLE Product TO Product2;

--SQL Server
sp_rename 'Product', 'Product2';
1
2
3
4
5
6
7
8
9
10
11

各个数据库的语法都不尽相同,是因为标准 SQL 并没有 RENAME ,于是各个数据库便使用了各自惯用的语法。 ‍

# 查看表结构

有时候我们想要查看一个表的结构,例如有几列,每一列的数据类型是什么,长度限制,约束等,那么我们就可以用 DESCRIBE 关键字(也可以简写为 DESC)。语法:

DESCRIBE <表名>;

--简写:
DESC <表名>;
1
2
3
4

‍ 例如:

DESCRIBE Product;

-- 结果:
+----------------+--------------+------+-----+---------+-------+
| Field          | Type         | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+-------+
| product_id     | char(4)      | NO   | PRI | NULL    |       |
| product_name   | varchar(100) | NO   |     | NULL    |       |
| product_type   | varchar(32)  | NO   |     | NULL    |       |
| sale_price     | int          | YES  |     | NULL    |       |
| purchase_price | int          | YES  |     | NULL    |       |
| regist_date    | date         | YES  |     | NULL    |       |
+----------------+--------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
1
2
3
4
5
6
7
8
9
10
11
12
13
14

‍

# 查看表信息

​show table status ​命令可以看到所有表的状态,例如使用的存储引擎,行数,数据量等(后续会深入讲解这些概念)

mysql> show table status\G;
*************************** 2. row ***************************
           Name: product
         Engine: InnoDB
        Version: 10
     Row_format: Dynamic
           Rows: 8
 Avg_row_length: 2048
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2023-11-13 10:49:04
    Update_time: NULL
     Check_time: NULL
      Collation: utf8mb4_0900_ai_ci
       Checksum: NULL
 Create_options:
        Comment:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 查看建表语句

有时候想看该表是用什么 SQL 创建的,就可以用该命令查看:

show create table <表名>;

-- 例如:
show create table Product;

-- 结果:
+---------+-------------+
| Table   | Create Table  |
+---------+----------+
| Product | CREATE TABLE `product` (
  `product_id` char(4) NOT NULL,
  `product_name` varchar(100) NOT NULL,
  `product_type` varchar(32) NOT NULL,
  `sale_price` int DEFAULT NULL,
  `purchase_price` int DEFAULT NULL,
  `regist_date` date DEFAULT NULL,
  PRIMARY KEY (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+---------+--------+
1 row in set (0.00 sec)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 添加数据

最后我们试着添加一下数据,便于我们后续学习查询数据。

添加数据的语句:

INSERT INTO Product VALUES ('0001', 'T恤衫', '衣服', 1000, 500, '2009-09-20');
INSERT INTO Product VALUES ('0002', '打孔器', '办公用品', 500, 320, '2009-09-11');
INSERT INTO Product VALUES ('0003', '运动T恤', '衣服', 4000, 2800, NULL);
INSERT INTO Product VALUES ('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20');
INSERT INTO Product VALUES ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');
INSERT INTO Product VALUES ('0006', '叉子', '厨房用具', 500, NULL, '2009-09-20');
INSERT INTO Product VALUES ('0007', '擦菜板', '厨房用具', 880, 790, '2008-04-28');
INSERT INTO Product VALUES ('0008', '圆珠笔', '办公用品', 100, NULL,'2009-11-11');
1
2
3
4
5
6
7
8

至于添加数据的语法,我们后续再详细说明。 ‍ (完)

上次更新: 2025/5/5 17:15:09
SQL 概述
SELECT 基础

← SQL 概述 SELECT 基础→

最近更新
01
语雀文档一键下载至本地教程
07-04
02
要成功,就不要低估环境对你的影响
07-03
03
血泪教训:电子设备要定期开机
07-02
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式