• 中文
    • 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.3k
    • 请登录之后再进行评论

      登录

      赞助本站

      • 支付宝
      • 微信
      • QQ

      感谢一直支持本站的所有人!

      单栏布局 侧栏位置: