zoukankan      html  css  js  c++  java
  • 修改表结构ALTER TABLE常用方法

    修改表结构

      修改表结构大致有如下基本语法

     
     1 -- 1. 修改表名
     2     ALTER TABLE 表名 
     3         RENAME 新表名;
     4         
     5 -- 2. 增加字段
     6     ALTER TABLE 表名
     7         ADD 字段名  数据类型 [完整性约束条件…],
     8         ADD 字段名  数据类型 [完整性约束条件…];
     9                                     
    10 -- 3. 删除字段
    11     ALTER TABLE 表名 
    12         DROP 字段名;
    13         
    14 -- 4. 修改字段
    15     ALTER TABLE 表名 
    16         MODIFY  字段名 数据类型 [完整性约束条件…];
    17     ALTER TABLE 表名 
    18         CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
    19     ALTER TABLE 表名 
    20         CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
    21         
    22 -- 5.修改字段排列顺序/在增加的时候指定字段位置
    23     ALTER TABLE 表名
    24         ADD 字段名  数据类型 [完整性约束条件…]  FIRST;
    25     ALTER TABLE 表名
    26         ADD 字段名  数据类型 [完整性约束条件…]  AFTER 字段名;
    27     ALTER TABLE 表名
    28         CHANGE 字段名  旧字段名 新字段名 新数据类型 [完整性约束条件…]  FIRST;
    29     ALTER TABLE 表名
    30         MODIFY 字段名  数据类型 [完整性约束条件…]  AFTER 字段名;
    31                     
    ALTER TABLE的语法

    示例

     1.利用ALTER TABLE处理NULL和UNIQUE约束

     
     1 CREATE TABLE t(
     2     id INT UNIQUE, 
     3     name CHAR(10) NOT NULL
     4 );
     5 
     6 -- 去掉NULL约束
     7 ALTER TABLE t 
     8 MODIFY name CHAR(10) NULL;
     9 
    10 -- 添加NULL约束
    11 ALTER TABLE t 
    12 MODIFY name CHAR(10) NOT NUll;
    13     
    14 -- 去掉UNIQUE约束
    15 ALTER TABLE t 
    16 DROP INDEX id;
    17 
    18 -- 添加UNIQUE约束
    19 ALTER TABLE t 
    20 MODIFY id INT UNIQUE;
    利用ALTER TABLE处理NULL和UNIQUE约束

     2.利用ALTER TABLE处理主键

     
     1 CREATE TABLE t(
     2     id INT UNIQUE, 
     3     name CHAR(10) NOT NULL
     4 );
     5 
     6 -- 去掉NULL约束
     7 ALTER TABLE t 
     8 MODIFY name CHAR(10) NULL;
     9 
    10 -- 添加NULL约束
    11 ALTER TABLE t 
    12 MODIFY name CHAR(10) NOT NUll;
    13 
    14 -- 去掉UNIQUE约束
    15 ALTER TABLE t 
    16 DROP INDEX id;
    17 
    18 -- 添加UNIQUE约束
    19 ALTER TABLE t 
    20 MODIFY id INT UNIQUE;
    利用ALTER TABLE处理主键

     3.利用ALTER TABLE为表添加外键

     
     1 CREATE TABLE press(
     2     id INT(11) NOT NULL,
     3     name CHAR(10) DEFAULT NULL,
     4     PRIMARY KEY (id)
     5 );
     6 
     7 CREATE TABLE book(
     8     id INT(11) DEFAULT NULL,
     9     bk_name CHAR(12) DEFAULT NULL,
    10     press_id INT(11) NOT NULL,
    11 );
    12 
    13 -- 为book表添加外键
    14 ALTER TABLE book 
    15 ADD CONSTRAINT [foreign key name] FOREIGN KEY(press_id) REFERENCES press(id);
    16 
    17 -- 删除外键
    18 ALTER TABLE book 
    19 DROP FOREIGN KEY [foreign key name];
    20 
    21 -- 注: [内容] 为可选填内容, 除保留字外, 符合语法规范均可
    利用ALTER TABLE为表添加外键

    其他示例

     1.表重命名

     
     1 DESC old_name;
     2 +-------+-----------------------+------+-----+---------+-------+
     3 | Field | Type                  | Null | Key | Default | Extra |
     4 +-------+-----------------------+------+-----+---------+-------+
     5 | id    | int(11)               | YES  |     | NULL    |       |
     6 | name  | varchar(50)           | YES  |     | NULL    |       |
     7 | age   | int(3)                | YES  |     | NULL    |       |
     8 | sex   | enum('male','female') | YES  |     | NULL    |       |
     9 | phone | bigint(11)            | YES  |     | NULL    |       |
    10 | job   | varchar(11)           | YES  |     | NULL    |       |
    11 +-------+-----------------------+------+-----+---------+-------+
    12 rows in set (0.00 sec)
    13 
    14 -- 表重命名
    15 ALTER TABLE old_name RENAME new_name;
    16 Query OK, 0 rows affected (0.00 sec)
    17 
    18 DESC new_name;
    19 +-------+-----------------------+------+-----+---------+-------+
    20 | Field | Type                  | Null | Key | Default | Extra |
    21 +-------+-----------------------+------+-----+---------+-------+
    22 | id    | int(11)               | YES  |     | NULL    |       |
    23 | name  | varchar(50)           | YES  |     | NULL    |       |
    24 | age   | int(3)                | YES  |     | NULL    |       |
    25 | sex   | enum('male','female') | YES  |     | NULL    |       |
    26 | phone | bigint(11)            | YES  |     | NULL    |       |
    27 | job   | varchar(11)           | YES  |     | NULL    |       |
    28 +-------+-----------------------+------+-----+---------+-------+
    29 rows in set (0.00 sec)
    表重命名

     2.删除或添加某列

     
     1 -- 删除sex列
     2 ALTER TABLE staff DROP sex;
     3 Query OK, 0 rows affected (0.02 sec)
     4 Records: 0  Duplicates: 0  Warnings: 0
     5 
     6 DESC staff;
     7 +-------+-------------+------+-----+---------+-------+
     8 | Field | Type        | Null | Key | Default | Extra |
     9 +-------+-------------+------+-----+---------+-------+
    10 | id    | int(11)     | YES  |     | NULL    |       |
    11 | name  | varchar(50) | YES  |     | NULL    |       |
    12 | age   | int(3)      | YES  |     | NULL    |       |
    13 | phone | bigint(11)  | YES  |     | NULL    |       |
    14 | job   | varchar(11) | YES  |     | NULL    |       |
    15 +-------+-------------+------+-----+---------+-------+
    16 rows in set (0.01 sec)
    17 
    18 -- 添加列
    19 ALTER TABLE staff ADD sex ENUM('male','female');
    20 Query OK, 0 rows affected (0.03 sec)
    21 Records: 0  Duplicates: 0  Warnings: 0
    删除或添加某列

     3.修改字段属性1

     
     1 -- 修改id的宽度
     2 ALTER TABLE staff MODIFY id INT(4);
     3 Query OK, 0 rows affected (0.02 sec)
     4 Records: 0  Duplicates: 0  Warnings: 0
     5 
     6 DESC staff;
     7 +-------+-----------------------+------+-----+---------+-------+
     8 | Field | Type                  | Null | Key | Default | Extra |
     9 +-------+-----------------------+------+-----+---------+-------+
    10 | id    | int(4)                | YES  |     | NULL    |       |
    11 | name  | varchar(50)           | YES  |     | NULL    |       |
    12 | age   | int(3)                | YES  |     | NULL    |       |
    13 | phone | bigint(11)            | YES  |     | NULL    |       |
    14 | job   | varchar(11)           | YES  |     | NULL    |       |
    15 | sex   | enum('male','female') | YES  |     | NULL    |       |
    16 +-------+-----------------------+------+-----+---------+-------+
    17 rows in set (0.01 sec)
    修改字段属性1

     4.修改字段属性2

     
     1 -- 修改name列的字段名
     2 ALTER TABLE staff CHANGE name sname VARCHAR(20);
     3 Query OK, 4 rows affected (0.03 sec)
     4 Records: 4  Duplicates: 0  Warnings: 0
     5 
     6 DESC staff;
     7 +-------+-----------------------+------+-----+---------+-------+
     8 | Field | Type                  | Null | Key | Default | Extra |
     9 +-------+-----------------------+------+-----+---------+-------+
    10 | id    | int(4)                | YES  |     | NULL    |       |
    11 | sname | varchar(20)           | YES  |     | NULL    |       |
    12 | age   | int(3)                | YES  |     | NULL    |       |
    13 | phone | bigint(11)            | YES  |     | NULL    |       |
    14 | job   | varchar(11)           | YES  |     | NULL    |       |
    15 | sex   | enum('male','female') | YES  |     | NULL    |       |
    16 +-------+-----------------------+------+-----+---------+-------+
    17 rows in set (0.00 sec)
    修改字段属性2

     5.修改字段属性3

     
     1 -- 修改sex列的位置
     2 ALTER TABLE staff MODIFY sex ENUM('male','female') AFTER sname;
     3 Query OK, 0 rows affected (0.02 sec)
     4 Records: 0  Duplicates: 0  Warnings: 0
     5 
     6 DESC staff;
     7 +-------+-----------------------+------+-----+---------+-------+
     8 | Field | Type                  | Null | Key | Default | Extra |
     9 +-------+-----------------------+------+-----+---------+-------+
    10 | id    | int(4)                | YES  |     | NULL    |       |
    11 | sname | varchar(20)           | YES  |     | NULL    |       |
    12 | sex   | enum('male','female') | YES  |     | NULL    |       |
    13 | age   | int(3)                | YES  |     | NULL    |       |
    14 | phone | bigint(11)            | YES  |     | NULL    |       |
    15 | job   | varchar(11)           | YES  |     | NULL    |       |
    16 +-------+-----------------------+------+-----+---------+-------+
    17 rows in set (0.00 sec)
    修改字段属性3

     6.创建自增id主键

     
     1 -- 创建自增id主键
     2 ALTER TABLE staff MODIFY id INT(4) PRIMARY KEY AUTO_INCREMENT;
     3 Query OK, 4 rows affected (0.02 sec)
     4 Records: 4  Duplicates: 0  Warnings: 0
     5 
     6 DESC staff;
     7 +-------+-----------------------+------+-----+---------+----------------+
     8 | Field | Type                  | Null | Key | Default | Extra          |
     9 +-------+-----------------------+------+-----+---------+----------------+
    10 | id    | int(4)                | NO   | PRI | NULL    | auto_increment |
    11 | sname | varchar(20)           | YES  |     | NULL    |                |
    12 | sex   | enum('male','female') | YES  |     | NULL    |                |
    13 | age   | int(3)                | YES  |     | NULL    |                |
    14 | phone | bigint(11)            | YES  |     | NULL    |                |
    15 | job   | varchar(11)           | YES  |     | NULL    |                |
    16 +-------+-----------------------+------+-----+---------+----------------+
    17 rows in set (0.00 sec)
    创建自增id主键

     7.删除主键

     
     1 -- 删除主键,可以看到删除一个自增主键会报错
     2 ALTER TABLE staff DROP PRIMARY KEY;
     3 ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
     4 
     5 -- 需要先去掉主键的自增约束,然后再删除主键约束
     6 ALTER TABLE staff MODIFY id INT(11);
     7 Query OK, 4 rows affected (0.02 sec)
     8 Records: 4  Duplicates: 0  Warnings: 0
     9 
    10 DESC staff;
    11 +-------+-----------------------+------+-----+---------+-------+
    12 | Field | Type                  | Null | Key | Default | Extra |
    13 +-------+-----------------------+------+-----+---------+-------+
    14 | id    | int(11)               | NO   | PRI | 0       |       |
    15 | sname | varchar(20)           | YES  |     | NULL    |       |
    16 | sex   | enum('male','female') | YES  |     | NULL    |       |
    17 | age   | int(3)                | YES  |     | NULL    |       |
    18 | phone | bigint(11)            | YES  |     | NULL    |       |
    19 | job   | varchar(11)           | YES  |     | NULL    |       |
    20 +-------+-----------------------+------+-----+---------+-------+
    21 rows in set (0.01 sec)
    22 
    23 ALTER TABLE staff DROP PRIMARY KEY;
    24 Query OK, 4 rows affected (0.06 sec)
    25 Records: 4  Duplicates: 0  Warnings: 0
    删除主键

     其他有关主键操作

     
     1 -- 添加联合主键
     2 ALTER TABLE staff ADD PRIMARY KEY(sname, age);
     3 Query OK, 0 rows affected (0.02 sec)
     4 Records: 0  Duplicates: 0  Warnings: 0
     5 
     6 -- 删除主键
     7 ALTER TABLE staff DROP PRIMARY KEY;
     8 Query OK, 4 rows affected (0.02 sec)
     9 Records: 4  Duplicates: 0  Warnings: 0
    10 
    11 -- 设置id为主键
    12 ALTER TABLE staff ADD PRIMARY KEY(id);
    13 Query OK, 0 rows affected (0.02 sec)
    14 Records: 0  Duplicates: 0  Warnings: 0
    15 
    16 DESC staff;
    17 +-------+-----------------------+------+-----+---------+-------+
    18 | Field | Type                  | Null | Key | Default | Extra |
    19 +-------+-----------------------+------+-----+---------+-------+
    20 | id    | int(11)               | NO   | PRI | 0       |       |
    21 | sname | varchar(20)           | NO   |     |         |       |
    22 | sex   | enum('male','female') | YES  |     | NULL    |       |
    23 | age   | int(3)                | NO   |     | 0       |       |
    24 | phone | bigint(11)            | YES  |     | NULL    |       |
    25 | job   | varchar(11)           | YES  |     | NULL    |       |
    26 +-------+-----------------------+------+-----+---------+-------+
    27 rows in set (0.00 sec)
    28 
    29 -- 为主键添加自增属性
    30 ALTER TABLE staff MODIFY id INT(4) AUTO_INCREMENT;
    31 Query OK, 4 rows affected (0.02 sec)
    32 Records: 4  Duplicates: 0  Warnings: 0
    33 
    34 DESC staff;
    35 +-------+-----------------------+------+-----+---------+----------------+
    36 | Field | Type                  | Null | Key | Default | Extra          |
    37 +-------+-----------------------+------+-----+---------+----------------+
    38 | id    | int(4)                | NO   | PRI | NULL    | auto_increment |
    39 | sname | varchar(20)           | NO   |     |         |                |
    40 | sex   | enum('male','female') | YES  |     | NULL    |                |
    41 | age   | int(3)                | NO   |     | 0       |                |
    42 | phone | bigint(11)            | YES  |     | NULL    |                |
    43 | job   | varchar(11)           | YES  |     | NULL    |                |
    44 +-------+-----------------------+------+-----+---------+----------------+
    45 rows in set (0.00 sec)
    其他有关主键操作

    以上

  • 相关阅读:
    Broadcasting
    TensorFlow2-维度变换
    TensorFlow2教程(目录)
    SQL Server 加密层级
    Windows 打开防火墙上的指定端口
    SQL Server 查看对象之间的引用关系
    SQL Server 查看实例配置情况的 2 方法
    Linux 快捷键
    MYSQL 二进制日志
    SQL Server 存储过程自启动
  • 原文地址:https://www.cnblogs.com/dmcs95/p/10779136.html
Copyright © 2011-2022 走看看