MySQL 表
1. 建表的基本语法
CREATE TABLE <表名> ([表定义选项])[表选项][分区选项];
# 表定义选项的格式:<字段> <type>,<字段> <type>, ...
在当前数据库下创建表
# 切换数据库
mysql> use test_db
Database changed
# 在当前数据库创建表 student
mysql> create table student (id INT(5),name varchar(10),age int(3));
Query OK, 0 rows affected, 2 warnings (0.04 sec)
在其他数据库下创建表:使用 <DBname>.<TableName>
mysql> create table atmuser.test (name varchar(5));
Query OK, 0 rows affected (0.03 sec)
mysql> desc atmuser.test;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| name | varchar(5) | YES | | NULL | |
+-------+------------+------+-----+---------+-------+
2. 查看所有表
# 查看当前数据库的表
mysql> show tables;
+-------------------+
| Tables_in_test_db |
+-------------------+
| student |
+-------------------+
# 查看其他数据库下的表 使用关键字 in
mysql> show tables in atmuser;
+-------------------+
| Tables_in_atmuser |
+-------------------+
| test |
| user |
+-------------------+
3. 查看表结构
- Null:表示该列是否可以为 NULL
- Key:表示该列是否已编制索引。PRI 表示该列是表主键的一部分,UNI 表示该列是 UNIQUE 索引的一部分,MUL 表示在列中某个给定值允许出现多次。
- Default:表示该列是否有默认值
- Extra:其他额外信息,如 AUTO_INCREMENT 等。
mysql> desc atmuser.user;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | NULL | |
| password | varchar(20) | YES | | NULL | |
| balance | int(10) | YES | | NULL | |
| debt | int(10) | YES | | NULL | |
+----------+-------------+------+-----+---------+----------------+
4. 查看建表时的语句:
# \G 可以规范的打印
mysql> show create table atmuser.user\G;
*************************** 1. row ***************************
Table: user
Create Table: CREATE TABLE `user` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`password` varchar(20) DEFAULT NULL,
`balance` int(10) DEFAULT NULL,
`debt` int(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
5. 修改表结构
语法:
ALTER TABLE <表名> [修改选项]
修改选项:
- 添加新字段
ADD COLUMN <字段> <类型> [first|after <已存在的字段>]
- 修改字段和类型
CHANGE COLUMN <旧字段> <新字段> <新列类型>
- 修改字段的值
ALTER COLUMN <字段> { SET DEFAULT <默认值> | DROP DEFAULT }
- 修改字段的类型
MODIFY COLUMN <字段> <新类型>
- 删除字段
DROP COLUMN <字段>
- 重命名表
RENAME TO <新表名>
e.g.
# 查看当前表
mysql> show tables;
+-------------------+
| Tables_in_test_db |
+-------------------+
| student |
+-------------------+
# 查看表结构
mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(5) | YES | | NULL | |
| name | varchar(10) | YES | | NULL | |
| age | int(3) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
# 添加新字段 class,指定位置 放到字段 class之后(不指定位置则默认放到最后)
mysql> alter table student
-> add column class varchar(5) after name;
mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(5) | YES | | NULL | |
| name | varchar(10) | YES | | NULL | |
| class | varchar(5) | YES | | NULL | |
| age | int(3) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
6. 删除数据表
语法:
DROP TABLE [IF EXISTS] <表名> [ , <表名1> , <表名2>] …
e.g.
mysql> show tables
-> ;
+-------------------+
| Tables_in_test_db |
+-------------------+
| student |
| test |
+-------------------+
mysql> drop table if exists test;
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;
+-------------------+
| Tables_in_test_db |
+-------------------+
| student |
+-------------------+