• 中文
    • English
  • 注册
  • 查看作者
  • 3-8:MySQL 修改数据表–修改列定义和更名数据表

    一.  修改列定义

    修改列定义的语法结构:

    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)

    值得注意的是,尽量不要随意修改数据表名。

  • 0
  • 0
  • 0
  • 3.6k
  • 请登录之后再进行评论

    登录
    单栏布局 侧栏位置: