• 注册
  • 赞助本站

    • 支付宝
    • 微信
    • QQ

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

    • 查看作者
    • 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
    • 2k
    • 请登录之后再进行评论

      登录
    • 单栏布局 侧栏位置: