一. 修改列定义
修改列定义的语法结构:
ALTER TABLE tbl_name MODIFY [COLUMN] col_name column_definition [FIRST| AFTER col_name]
修改列定义是指列名字上不存在问题,但是数据类型和位置上可能存在问题
比如users2表中的id并没有处于第一位置,虽然没有什么影响,但是不符合我们平常的习惯
可以将id字段修改为第一位置,因为数据类型并没有位置,所以数据类型这里不修改,只修改位置即可:
mysql> ALTER TABLE users2 MODIFY id SMALLINT UNSIGNED NOT NULL FIRST; Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> SHOW COLUMNS FROM users2; +----------+----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+----------------------+------+-----+---------+-------+ | id | smallint(5) unsigned | NO | | NULL | | | username | varchar(10) | NO | | NULL | | | pid | smallint(5) unsigned | YES | | NULL | | | age | tinyint(3) unsigned | NO | | NULL | | +----------+----------------------+------+-----+---------+-------+ 4 rows in set (0.01 sec)
可以看到id已经处于第一位置
我们也可以用同样的方法修改数据类型,但是值得注意的的是,将大类型修改为小类型,有可能造成数据丢失。
二. 修改列名称
修改列名称的语法结构是(其实不仅可以修改列名称,还可以修改列定义):
ALTER TABLE tbl_name CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST| AFTER col_name]
我们修改一下pid的数据类型和名字:
mysql> ALTER TABLE users2 CHANGE pid p_id TINYINT UNSIGNED NOT NULL; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> SHOW COLUMNS FROM users2; +----------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+---------------------+------+-----+---------+-------+ | id | tinyint(3) unsigned | NO | | NULL | | | username | varchar(10) | NO | | NULL | | | p_id | tinyint(3) unsigned | NO | | NULL | | | age | tinyint(3) unsigned | NO | | NULL | | +----------+---------------------+------+-----+---------+-------+ 4 rows in set (0.01 sec)
可以看到pid已经被修改为p_id,数据类型已经被修改为TINYINT
三. 修改数据表名称
修改数据表名称方法一:
ALTER TABLE tbl_name RENAME [TO|AS] new_tbl_name
修改数据表名称方法二(可以修改多个数据表):
RENAME TABLE tbl_name TO new_tbl_name [, tbl_name2 TO new_tbl_name2]...
我们用方法一将users2名字修改为users3:
mysql> ALTER TABLE users2 RENAME users3; Query OK, 0 rows affected (0.01 sec) mysql> SHOW TABLES; +----------------+ | Tables_in_test | +----------------+ | provinces | | tb2 | | tb3 | | tb5 | | tb6 | | users | | users1 | | users3 | +----------------+ 8 rows in set (0.00 sec)
再用方法二将users3修改回users2:
mysql> RENAME TABLE users3 TO users2; Query OK, 0 rows affected (0.01 sec) mysql> SHOW TABLES; +----------------+ | Tables_in_test | +----------------+ | provinces | | tb2 | | tb3 | | tb5 | | tb6 | | users | | users1 | | users2 | +----------------+ 8 rows in set (0.00 sec)
值得注意的是,尽量不要随意修改数据表名。
请登录之后再进行评论