• 中文
    • English
  • 注册
  • 查看作者
  • 3-5:MySQL 修改数据表-添加/删除列

    一.  前言

    修改数据表主要有以下操作:

    列的增加和删除

    约束的增加和删除

    二.  单列的添加

    添加单列的语法结构:

    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)

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

    登录
    单栏布局 侧栏位置: