一. 前言
修改数据表主要有以下操作:
列的增加和删除
约束的增加和删除
二. 单列的添加
添加单列的语法结构:
ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name ]
FRIST指的是添加的列置于最前面
AFTER指的是添加列置于指定列的后面
如果不写FRIST或者AFTER,则默认添加到所有列的最下面
我们来做一个测试:
首先查看前一节中创建的users1表的表结构:
mysql> SHOW COLUMNS FROM users1; +----------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+----------------------+------+-----+---------+----------------+ | id | smallint(5) unsigned | NO | PRI | NULL | auto_increment | | username | varchar(10) | NO | | NULL | | | pid | smallint(5) unsigned | YES | MUL | NULL | | +----------+----------------------+------+-----+---------+----------------+ 3 rows in set (0.02 sec)
接下来我们不写FRIST或者AFTER增加一列:
mysql> ALTER TABLE users1 ADD age TINYINT UNSIGNED NOT NULL DEFAULT 10; Query OK, 1 rows affected (0.03 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> SHOW COLUMNS FROM users1; +----------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+----------------------+------+-----+---------+----------------+ | id | smallint(5) unsigned | NO | PRI | NULL | auto_increment | | username | varchar(10) | NO | | NULL | | | pid | smallint(5) unsigned | YES | MUL | NULL | | | age | tinyint(3) unsigned | NO | | 10 | | +----------+----------------------+------+-----+---------+----------------+ 4 rows in set (0.01 sec)
可以看到默认被添加到了最后面,接来下我们再来加一个password字段,并置于username后面,则需要用到AFTER:
mysql> ALTER TABLE users1 ADD password VARCHAR(32) NOT NULL AFTER username; Query OK, 1 rows affected (0.02 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> SHOW COLUMNS FROM users1; +----------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+----------------------+------+-----+---------+----------------+ | id | smallint(5) unsigned | NO | PRI | NULL | auto_increment | | username | varchar(10) | NO | | NULL | | | password | varchar(32) | NO | | NULL | | | pid | smallint(5) unsigned | YES | MUL | NULL | | | age | tinyint(3) unsigned | NO | | 10 | | +----------+----------------------+------+-----+---------+----------------+ 5 rows in set (0.01 sec)
可以看到插入到了username后面,我们再来加一个truename字段,并置于顶端:
mysql> ALTER TABLE users1 ADD truename VARCHAR(20) NOT NULL FIRST; Query OK, 1 rows affected (0.01 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> SHOW COLUMNS FROM users1; +----------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+----------------------+------+-----+---------+----------------+ | truename | varchar(20) | NO | | NULL | | | id | smallint(5) unsigned | NO | PRI | NULL | auto_increment | | username | varchar(10) | NO | | NULL | | | password | varchar(32) | NO | | NULL | | | pid | smallint(5) unsigned | YES | MUL | NULL | | | age | tinyint(3) unsigned | NO | | 10 | | +----------+----------------------+------+-----+---------+----------------+ 6 rows in set (0.01 sec)
值得注意的是,多列的添加不能指定位置关系,只能默认添加到最下面。
三. 列的删除
删除列的语法结构:
ALTER TABLE tbl_name DROP [COLUMN] col_name
删除truename字段:
mysql> ALTER TABLE users1 DROP truename; Query OK, 2 rows affected (0.01 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> SHOW COLUMNS FROM users1; +----------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+----------------------+------+-----+---------+----------------+ | id | smallint(5) unsigned | NO | PRI | NULL | auto_increment | | username | varchar(10) | NO | | NULL | | | password | varchar(32) | NO | | NULL | | | pid | smallint(5) unsigned | YES | MUL | NULL | | | age | tinyint(3) unsigned | NO | | 10 | | +----------+----------------------+------+-----+---------+----------------+ 5 rows in set (0.01 sec)
可以发现truename已经被删除,接下来同时删除password和age两个列
mysql> ALTER TABLE users1 DROP password,DROP age; Query OK, 1 row affected (0.02 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> SHOW COLUMNS FROM users1; +----------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+----------------------+------+-----+---------+----------------+ | id | smallint(5) unsigned | NO | PRI | NULL | auto_increment | | username | varchar(10) | NO | | NULL | | | pid | smallint(5) unsigned | YES | MUL | NULL | | +----------+----------------------+------+-----+---------+----------------+ 3 rows in set (0.01 sec)
请登录之后再进行评论