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           |
+-------------------+
posted @ 2019-11-28 10:53  wztshine  阅读(212)  评论(0编辑  收藏  举报