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) # 显示当前数据库的表 mysql> show tables; +-------------------+ | Tables_in_test_db | +-------------------+ | student | +-------------------+ 1 row in set (0.00 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;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
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 |
+-------------------+