抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

摘要:本文学习了如何使用DDL语句管理表。

环境

Windows 10 企业版 LTSC 21H2
MySQL 5.7.40

1 简介

1.1 定义

表是数据库中存储数据的具体结构,它由行和列组成。

表中的每一行代表一条记录,包含了按列组织的数据。

表中的每一列代表一种数据,定义了该列可以存储的数据种类。

1.2 作用

表是数据库中实际存储数据的载体,能够将数据以一种结构化的方式组织起来,便于数据的管理。

表与表之间可以通过特定的字段建立关联,从而实现复杂的数据关系。

2 操作

2.1 创建

语法:

sql
1
create table 表名 [表定义选项] [表选项];

说明:

  • 表定义选项:用来创建定义表的结构,由列名(col_name)、列的定义(column_definition)以及可能的空值说明、完整性约束或表索引组成。

示例:

sql
1
2
3
4
5
6
7
mysql> create table test (
-> id int(11) primary key auto_increment comment '编号',
-> name varchar(50) default null comment '姓名'
-> ) engine=innodb default charset=utf8mb4 comment='测试';
Query OK, 0 rows affected (0.01 sec)

mysql>

2.2 查看

查看所有表:

sql
1
show tables;

查看表的创建:

sql
1
show create table 表名;

查看表的状态:

sql
1
show table status [like '模糊查询表名'] from 数据库 \G

说明:

  • 使用\G符号可以垂直显示内容,并且使用\G后不需要使用;结束。

使用describe命令查看表的结构,可以使用desc简写:

sql
1
2
describe 表名;
desc 表名;

使用desc命令示例:

sql
1
2
3
4
5
6
7
8
9
10
mysql> desc test;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

mysql>

说明:

  • Field:列名。
  • Type:类型。
  • Null:表示该列是否可以存储NULL值。
  • Key:表示该列是否已编制索引。PRI表示该列是主键的一部分,UNI表示该列是UNIQUE索引的一部分,MUL表示在列中某个给定值允许出现多次。
  • Default:表示该列是否有默认值,如果有,值是多少。
  • Extra:表示可以获取的与给定列有关的附加信息,比如AUTO_INCREMENT等。

使用show命令查看表的字段:

sql
1
show columns from 表名;

使用show命令查看表的索引:

sql
1
show index from 表名;

2.3 复制

语法:

sql
1
create table 新表名 as select * from 旧表名;

示例:

sql
1
2
3
4
5
mysql> create table test_bak as select * from test;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql>

2.4 修改

添加列:

sql
1
alter table 表名 add column 新列名 [数据类型] [约束条件] [first | after 已存在的列名];

示例:

sql
1
2
3
4
5
mysql> alter table test add column age int(3) null comment '年龄' after name;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql>

修改列:

sql
1
alter table 表名 change column 旧列名 新列名 [新数据类型];

示例:

sql
1
2
3
4
5
mysql> alter table test change column name name varchar(30) not null default 'none' comment '姓名';
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql>

删除列:

sql
1
alter table 表名 drop 列名;

示例:

sql
1
2
3
4
5
mysql> alter table test drop age;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql>

2.5 删除

删除表会删除表结构,再次使用需要重新创建。

语法:

sql
1
drop table [if exists] 表名;

示例:

sql
1
2
3
4
mysql> drop table test;
Query OK, 0 rows affected (0.01 sec)

mysql>

2.6 清空

清空表不会删除表结构,但是会释放表空间,重置自增序列从1开始记录。

语法:

sql
1
truncate table 表名;

示例:

sql
1
2
3
4
mysql> truncate table test;
Query OK, 0 rows affected (0.01 sec)

mysql>

评论