zoukankan      html  css  js  c++  java
  • 07.数据表的修改

    用上文的user1表,查看表结构:
    mysql> DESC user1;
    +----------+----------------------+------+-----+---------+----------------+
    | Field    | Type                 | Null | Key | Default | Extra          |
    +----------+----------------------+------+-----+---------+----------------+
    | id       | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
    | username | varchar(20)          | NO   |     | NULL    |                |
    | p_id     | smallint(5) unsigned | YES  | MUL | NULL    |                |
    +----------+----------------------+------+-----+---------+----------------+
    3 rows in set (0.00 sec)
    添加一个默认值为10的非空字段
    mysql> ALTER TABLE user1 ADD age SMALLINT UNSIGNED NOT NULL DEFAULT 10;
    Query OK, 0 rows affected (0.06 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    mysql> DESC user1;
    +----------+----------------------+------+-----+---------+----------------+
    | Field    | Type                 | Null | Key | Default | Extra          |
    +----------+----------------------+------+-----+---------+----------------+
    | id       | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
    | username | varchar(20)          | NO   |     | NULL    |                |
    | p_id     | smallint(5) unsigned | YES  | MUL | NULL    |                |
    | age      | smallint(5) unsigned | NO   |     | 10      |                |
    +----------+----------------------+------+-----+---------+----------------+
    4 rows in set (0.00 sec)
    在某列后添加字段:AFTER(FIRST添加到最前面)
    mysql> ALTER TABLE user1 ADD password VARCHAR(32) NOT NULL AFTER username;
    Query OK, 0 rows affected (0.09 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    mysql> DESC user1;
    +----------+----------------------+------+-----+---------+----------------+
    | Field    | Type                 | Null | Key | Default | Extra          |
    +----------+----------------------+------+-----+---------+----------------+
    | id       | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
    | username | varchar(20)          | NO   |     | NULL    |                |
    | password | varchar(32)          | NO   |     | NULL    |                |
    | p_id     | smallint(5) unsigned | YES  | MUL | NULL    |                |
    | age      | smallint(5) unsigned | NO   |     | 10      |                |
    +----------+----------------------+------+-----+---------+----------------+
    5 rows in set (0.00 sec)
    添加多列:
    mysql> ALTER TABLE user1 ADD (aaa VARCHAR(32), bbb VARCHAR(32),ccc VARCHAR(32));
    Query OK, 0 rows affected (0.09 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    mysql> DESC user1;
    +----------+----------------------+------+-----+---------+----------------+
    | Field    | Type                 | Null | Key | Default | Extra          |
    +----------+----------------------+------+-----+---------+----------------+
    | sax      | varchar(32)          | NO   |     | NULL    |                |
    | id       | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
    | username | varchar(20)          | NO   |     | NULL    |                |
    | password | varchar(32)          | NO   |     | NULL    |                |
    | p_id     | smallint(5) unsigned | YES  | MUL | NULL    |                |
    | age      | smallint(5) unsigned | NO   |     | 10      |                |
    | aaa      | varchar(32)          | YES  |     | NULL    |                |
    | bbb      | varchar(32)          | YES  |     | NULL    |                |
    | ccc      | varchar(32)          | YES  |     | NULL    |                |
    +----------+----------------------+------+-----+---------+----------------+
    9 rows in set (0.00 sec)
    删除列aaa:
    mysql> ALTER TABLE user1 DROP aaa;
    Query OK, 0 rows affected (0.45 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    mysql> DESC user1;
    +----------+----------------------+------+-----+---------+----------------+
    | Field    | Type                 | Null | Key | Default | Extra          |
    +----------+----------------------+------+-----+---------+----------------+
    | sax      | varchar(32)          | NO   |     | NULL    |                |
    | id       | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
    | username | varchar(20)          | NO   |     | NULL    |                |
    | password | varchar(32)          | NO   |     | NULL    |                |
    | p_id     | smallint(5) unsigned | YES  | MUL | NULL    |                |
    | age      | smallint(5) unsigned | NO   |     | 10      |                |
    | bbb      | varchar(32)          | YES  |     | NULL    |                |
    | ccc      | varchar(32)          | YES  |     | NULL    |                |
    +----------+----------------------+------+-----+---------+----------------+
    8 rows in set (0.00 sec)
    同时删除两列:bbb,ccc
    mysql> ALTER TABLE user1 DROP bbb,DROP ccc;
    Query OK, 0 rows affected (0.08 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    mysql> DESC user1;
    +----------+----------------------+------+-----+---------+----------------+
    | Field    | Type                 | Null | Key | Default | Extra          |
    +----------+----------------------+------+-----+---------+----------------+
    | sax      | varchar(32)          | NO   |     | NULL    |                |
    | id       | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
    | username | varchar(20)          | NO   |     | NULL    |                |
    | password | varchar(32)          | NO   |     | NULL    |                |
    | p_id     | smallint(5) unsigned | YES  | MUL | NULL    |                |
    | age      | smallint(5) unsigned | NO   |     | 10      |                |
    +----------+----------------------+------+-----+---------+----------------+
    6 rows in set (0.00 sec)
    删除主键约束:(必须是没有自增长的主键,自增长要依附于主键删不了,key_test符合)
    mysql> ALTER TABLE user1 DROP PRIMARY KEY;
    ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
    
    mysql> DESC key_test;
    +----------+----------------------+------+-----+---------+-------+
    | Field    | Type                 | Null | Key | Default | Extra |
    +----------+----------------------+------+-----+---------+-------+
    | id       | smallint(5) unsigned | NO   | PRI | NULL    |       |
    | username | varchar(20)          | YES  |     | NULL    |       |
    +----------+----------------------+------+-----+---------+-------+
    2 rows in set (0.00 sec)
    mysql> ALTER TABLE key_test DROP PRIMARY KEY;
    Query OK, 2 rows affected (0.05 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    mysql> DESC key_test;
    +----------+----------------------+------+-----+---------+-------+
    | Field    | Type                 | Null | Key | Default | Extra |
    +----------+----------------------+------+-----+---------+-------+
    | id       | smallint(5) unsigned | NO   |     | NULL    |       |
    | username | varchar(20)          | YES  |     | NULL    |       |
    +----------+----------------------+------+-----+---------+-------+
    2 rows in set (0.00 sec)
    删除唯一约束
    mysql> SHOW INDEXES FROM unique_test;
    +-------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | Table       | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
    +-------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | unique_test |          0 | PRIMARY  |            1 | id          | A         |           2 |     NULL | NULL   |      | BTREE      |         |               |
    | unique_test |          0 | username |            1 | username    | A         |           2 |     NULL | NULL   | YES  | BTREE      |         |               |
    +-------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    mysql> ALTER TABLE unique_test DROP INDEX username;
    Query OK, 0 rows affected (0.39 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    mysql> SHOW INDEXES FROM unique_test;
    +-------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | Table       | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
    +-------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | unique_test |          0 | PRIMARY  |            1 | id          | A         |           2 |     NULL | NULL   |      | BTREE      |         |               |
    +-------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    1 row in set (0.00 sec)
    删除外键约束:注意外键约束名:user1_ibfk_1
    mysql> SHOW CREATE TABLE user1;
    +-------+---------------------------------------------------------------------------------------
    ------------------------------------------------------------------------------------------------
    -------------------------------------+
    | Table | Create Table
    
                                         |
    +-------+---------------------------------------------------------------------------------------
    ------------------------------------------------------------------------------------------------
    -------------------------------------+
    | user1 | CREATE TABLE `user1` (
      `sax` varchar(32) NOT NULL,
      `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
      `username` varchar(20) NOT NULL,
      `password` varchar(32) NOT NULL,
      `p_id` smallint(5) unsigned DEFAULT NULL,
      `age` smallint(5) unsigned NOT NULL DEFAULT '10',
      PRIMARY KEY (`id`),
      KEY `p_id` (`p_id`),
      CONSTRAINT `user1_ibfk_1` FOREIGN KEY (`p_id`) REFERENCES `province` (`id`) ON DELETE CASCADE
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 |
    +-------+---------------------------------------------------------------------------------------
    ------------------------------------------------------------------------------------------------
    -------------------------------------+
    1 row in set (0.41 sec)
    mysql> ALTER TABLE user1 DROP FOREIGN KEY user1_ibfk_1;
    Query OK, 0 rows affected (0.02 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    mysql> SHOW CREATE TABLE user1;
    +-------+-------------------------------------------------------------
    ----------------------------------------------------------------------
    | Table | Create Table
    
    +-------+-------------------------------------------------------------
    ----------------------------------------------------------------------
    | user1 | CREATE TABLE `user1` (
      `sax` varchar(32) NOT NULL,
      `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
      `username` varchar(20) NOT NULL,
      `password` varchar(32) NOT NULL,
      `p_id` smallint(5) unsigned DEFAULT NULL,
      `age` smallint(5) unsigned NOT NULL DEFAULT '10',
      PRIMARY KEY (`id`),
      KEY `p_id` (`p_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 |
    +-------+-------------------------------------------------------------
    ----------------------------------------------------------------------
    1 row in set (0.00 sec)
    外键去除后,索引p_id就没有用了,也可以去除:
    mysql> ALTER TABLE user1 DROP INDEX p_id;
    Query OK, 0 rows affected (0.39 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    mysql> SHOW CREATE TABLE user1;
    +-------+--------------------------------------------------------
    -----------------------------------------------------------------
    | Table | Create Table
    
    +-------+--------------------------------------------------------
    -----------------------------------------------------------------
    | user1 | CREATE TABLE `user1` (
      `sax` varchar(32) NOT NULL,
      `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
      `username` varchar(20) NOT NULL,
      `password` varchar(32) NOT NULL,
      `p_id` smallint(5) unsigned DEFAULT NULL,
      `age` smallint(5) unsigned NOT NULL DEFAULT '10',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 |
    +-------+--------------------------------------------------------
    -----------------------------------------------------------------
    1 row in set (0.00 sec)
    修改列的位置:想把user1中的id调到最上面
    mysql> DESC user1;
    +----------+----------------------+------+-----+---------+----------------+
    | Field    | Type                 | Null | Key | Default | Extra          |
    +----------+----------------------+------+-----+---------+----------------+
    | sax      | varchar(32)          | NO   |     | NULL    |                |
    | id       | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
    | username | varchar(20)          | NO   |     | NULL    |                |
    | password | varchar(32)          | NO   |     | NULL    |                |
    | p_id     | smallint(5) unsigned | YES  |     | NULL    |                |
    | age      | smallint(5) unsigned | NO   |     | 10      |                |
    +----------+----------------------+------+-----+---------+----------------+
    6 rows in set (0.00 sec)
    
    mysql> ALTER TABLE user1 MODIFY id SMALLINT UNSIGNED NOT NULL FIRST;
    Query OK, 2 rows affected (0.44 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    mysql> DESC user1;
    +----------+----------------------+------+-----+---------+-------+
    | Field    | Type                 | Null | Key | Default | Extra |
    +----------+----------------------+------+-----+---------+-------+
    | id       | smallint(5) unsigned | NO   | PRI | NULL    |       |
    | sax      | varchar(32)          | NO   |     | NULL    |       |
    | username | varchar(20)          | NO   |     | NULL    |       |
    | password | varchar(32)          | NO   |     | NULL    |       |
    | p_id     | smallint(5) unsigned | YES  |     | NULL    |       |
    | age      | smallint(5) unsigned | NO   |     | 10      |       |
    +----------+----------------------+------+-----+---------+-------+
    6 rows in set (0.01 sec)
    修改列信息:将sax改为gender更好一点,再把长度改短点
    mysql> ALTER TABLE user1 CHANGE sax gender VARCHAR(4) NOT NULL;
    Query OK, 2 rows affected (0.06 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    mysql> DESC user1;
    +----------+----------------------+------+-----+---------+-------+
    | Field    | Type                 | Null | Key | Default | Extra |
    +----------+----------------------+------+-----+---------+-------+
    | id       | smallint(5) unsigned | NO   | PRI | NULL    |       |
    | gender   | varchar(4)           | NO   |     | NULL    |       |
    | username | varchar(20)          | NO   |     | NULL    |       |
    | password | varchar(32)          | NO   |     | NULL    |       |
    | p_id     | smallint(5) unsigned | YES  |     | NULL    |       |
    | age      | smallint(5) unsigned | NO   |     | 10      |       |
    +----------+----------------------+------+-----+---------+-------+
    6 rows in set (0.01 sec)
    表名user1不抢眼,改个名字吧
    mysql> ALTER TABLE user1 RENAME 阿姆斯特朗回旋加速喷气式阿姆斯特朗炮;
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> SHOW TABLES;
    +--------------------------------------------------------+
    | Tables_in_zoom                                         |
    +--------------------------------------------------------+
    | 阿姆斯特朗回旋加速喷气式阿姆斯特朗炮                   |
    | default_                                               |
    | key_test                                               |
    | little                                                 |
    | null_test                                              |
    | province                                               |
    | unique_id                                              |
    | unique_test                                            |
    | users                                                  |
    +--------------------------------------------------------+
    9 rows in set (0.00 sec)
    不行,太装X,用另一种方法改个低调的
    mysql> RENAME TABLE 阿姆斯特朗回旋加速喷气式阿姆斯特朗炮 TO toly;
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> SHOW TABLES;
    +----------------+
    | Tables_in_zoom |
    +----------------+
    | default_       |
    | key_test       |
    | little         |
    | null_test      |
    | province       |
    | toly           |
    | unique_id      |
    | unique_test    |
    | users          |
    +----------------+
    9 rows in set (0.00 sec)
  • 相关阅读:
    包介绍、日志模块及深浅拷贝
    一些常用模块
    RE模块(正则)
    软件开发规范
    模块及模块导入
    一些常用的内置函数总结
    迭代器、可迭代对象、迭代器对象
    多层装饰器例子
    闭包函数和装饰器
    递归、二分法、三元表达式及内置函数和匿名函数
  • 原文地址:https://www.cnblogs.com/toly-top/p/9782023.html
Copyright © 2011-2022 走看看