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.userG; *************************** 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 | +-------------------+