MySQL学习——操作表
摘要:本文主要学习了使用DDL语句操作表的方法。
创建表
语法
1 create table 表名 [表定义选项] [表选项];
表定义选项
用来创建定义表的结构,由列名(col_name)、列的定义(column_definition)以及可能的空值说明、完整性约束或表索引组成。
实例
1 mysql> create table test (
2 -> id int(11) not null comment '编号',
3 -> name varchar(50) default null comment '姓名',
4 -> address varchar(50) default null comment '地址',
5 -> status int(2) default null comment '状态',
6 -> createtime date default null comment '创建时间',
7 -> updatetime date default null comment '修改时间',
8 -> primary key (id)
9 -> ) engine=innodb default charset=utf8mb4 comment='测试';
10 Query OK, 0 rows affected (0.01 sec)
11
12 mysql>
复制表
语法
1 create table 新表名 as select * from 旧表名;
实例
1 Database changed
2 mysql> create table grade as select * from score;
3 Query OK, 12 rows affected (0.01 sec)
4 Records: 12 Duplicates: 0 Warnings: 0
5
6 mysql>
查看表的列
语法
1 show columns from 表名;
实例
1 mysql> show columns from test;
2 +------------+-------------+------+-----+---------+-------+
3 | Field | Type | Null | Key | Default | Extra |
4 +------------+-------------+------+-----+---------+-------+
5 | id | int(11) | NO | PRI | NULL | |
6 | name | varchar(50) | YES | | NULL | |
7 | address | varchar(50) | YES | | NULL | |
8 | status | int(2) | YES | | NULL | |
9 | createtime | date | YES | | NULL | |
10 | updatetime | date | YES | | NULL | |
11 +------------+-------------+------+-----+---------+-------+
12 6 rows in set (0.00 sec)
13
14 mysql>
说明
Field:列名。
Type:类型。
Null:表示该列是否可以存储NULL值。
Key:表示该列是否已编制索引。PRI表示该列是主键的一部分,UNI表示该列是UNIQUE索引的一部分,MUL表示在列中某个给定值允许出现多次。
Default:表示该列是否有默认值,如果有,值是多少。
Extra:表示可以获取的与给定列有关的附加信息,如:AUTO_INCREMENT等。
查看表结构
语法
1 desc 表名;
实例
1 mysql> desc test;
2 +------------+-------------+------+-----+---------+-------+
3 | Field | Type | Null | Key | Default | Extra |
4 +------------+-------------+------+-----+---------+-------+
5 | id | int(11) | NO | PRI | NULL | |
6 | name | varchar(50) | YES | | NULL | |
7 | address | varchar(50) | YES | | NULL | |
8 | status | int(2) | YES | | NULL | |
9 | createtime | date | YES | | NULL | |
10 | updatetime | date | YES | | NULL | |
11 +------------+-------------+------+-----+---------+-------+
12 6 rows in set (0.00 sec)
13
14 mysql>
说明
Filed:列名。
Type:类型。
Null:表示该列是否可以存储NULL值。
Key:表示该列是否已编制索引。PRI表示该列是表主键的一部分,UNI表示该列是UNIQUE索引的一部分,MUL表示在列中某个给定值允许出现多次。
Default:表示该列是否有默认值,如果有,值是多少。
Extra:表示可以获取的与给定列有关的附加信息,如:AUTO_INCREMENT等。
查询所有的表
语法
1 show tables;
实例
1 mysql> show tables;
2 +----------------+
3 | Tables_in_demo |
4 +----------------+
5 | test |
6 +----------------+
7 1 row in set (0.00 sec)
8
9 mysql>
查看表的创建
语法
1 show create table 表名 \G;
实例
1 mysql> show create table test \G;
2 *************************** 1. row ***************************
3 Table: test
4 Create Table: CREATE TABLE `test` (
5 `id` int(11) NOT NULL COMMENT '编号',
6 `name` varchar(50) DEFAULT NULL COMMENT '姓名',
7 `address` varchar(50) DEFAULT NULL COMMENT '地址',
8 `status` int(2) DEFAULT NULL COMMENT '状态',
9 `createtime` date DEFAULT NULL COMMENT '创建时间',
10 `updatetime` date DEFAULT NULL COMMENT '修改时间',
11 PRIMARY KEY (`id`)
12 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测试'
13 1 row in set (0.00 sec)
14
15 ERROR:
16 No query specified
17
18 mysql>
查看表的状态
语法
1 show table status like from 数据库 [like '模糊查询表名'] \G;
实例
1 mysql> show table status from demo \G ;
2 *************************** 1. row ***************************
3 Name: test
4 Engine: InnoDB
5 Version: 10
6 Row_format: Compact
7 Rows: 0
8 Avg_row_length: 0
9 Data_length: 16384
10 Max_data_length: 0
11 Index_length: 0
12 Data_free: 0
13 Auto_increment: NULL
14 Create_time: 2019-09-02 17:21:06
15 Update_time: NULL
16 Check_time: NULL
17 Collation: utf8mb4_general_ci
18 Checksum: NULL
19 Create_options:
20 Comment: 测试
21 1 row in set (0.00 sec)
22
23 ERROR:
24 No query specified
25
26 mysql>
查看表索引
语法
show index from 表名;
示例
1 mysql> show index from user;
2 +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
3 | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
4 +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
5 | user | 0 | PRIMARY | 1 | Host | A | NULL | NULL | NULL | | BTREE | | |
6 | user | 0 | PRIMARY | 2 | User | A | 3 | NULL | NULL | | BTREE | | |
7 +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
8 2 rows in set (0.00 sec)
9
10 mysql>
修改表
添加列
1 alter table 表名 add column 新列名 [数据类型] [约束条件] [first | after 已存在的列名];
实例
1 mysql> alter table test add column age int(3) null comment '年龄' after name;
2 Query OK, 0 rows affected (0.01 sec)
3 Records: 0 Duplicates: 0 Warnings: 0
4
5 mysql>
修改列
1 alter table 表名 change column 旧列名 新列名 [新数据类型];
实例
1 mysql> alter table test change column username name varchar(30) not null default 'none' comment '姓名';
2 Query OK, 0 rows affected (0.01 sec)
3 Records: 0 Duplicates: 0 Warnings: 0
4
5 mysql>
删除列
1 alter table 表名 drop 列名;
实例
1 mysql> alter table test drop age;
2 Query OK, 0 rows affected (0.01 sec)
3 Records: 0 Duplicates: 0 Warnings: 0
4
5 mysql>
删除表
语法
1 drop table [if exists] 表名;
实例
1 mysql> drop table demo;
2 Query OK, 0 rows affected (0.01 sec)
3
4 mysql>
清空表
语法
1 truncate table 表名;
实例
1 mysql> truncate table demo;
2 Query OK, 0 rows affected (0.01 sec)
3
4 mysql>