当前位置: 移动技术网 > IT编程>数据库>Mysql > MySQL怎么修改已建立表的结构?

MySQL怎么修改已建立表的结构?

2018年03月27日  | 移动技术网IT编程  | 我要评论

1、为什么要讨论关于ALTERTABLE的问题呢?

MySQL执行大部分修改表结构的原理:

用一个新的结构创建一个空表,从旧表中查出所有数据插入新表,然后删除旧表。

导致的问题:可能需要花费很长的时间(特别是当内存不大而表又很大,且又有很多索引的情况)

2、举个栗子:更改上面的name字段的校对规则,使其大小写敏感

ALTERTABLEtbl_alter_tableMODIFYCOLUMNnameVARCHAR(20)NOTNULL;

注意:ALTER后面跟着的name的属性是完整的。

转换成功后,通过SHOWCREATETABLEtbl_alter_table;可以查看到:

CREATETABLE`tbl_alter_table`(

`id`int(10)unsignedNOTNULLAUTO_INCREMENT,

`name`varchar(20)COLLATEutf8_binNOTNULL,

PRIMARYKEY(`id`)

)ENGINE=InnoDBDEFAULTCHARSET=utf8COLLATE=utf8_bin

此时输入:SELECT*FROMtbl_alter_tableWHEREname=‘tim’;输出:

+----+------+

|id|name|

+----+------+

|1|tim|

+----+------+

3、对于小表的更改的一些方法

如果直接ALTERTABLE则会将之前旧的表的结构更改,如果更改之后出现问题,回返回之前旧的表会比较麻烦。

推荐的做法是:复制一份之前的表的结构和数据作为备份。

MySQL语句如下:

CREATETABLEtbl_alter_table_newLIKEtbl_alter_table;//复制表的结果

INSERTINTOtbl_alter_table_new

SELECT*FROMtbl_alter_table;//将原表的数据也复制过来

...//针对tbl_alter_table_new表进行操作

ALTERTABLEtbl_alter_tableRENAMEtbl_alter_table_old;//将原本备份

ALTERTABLEtbl_alter_table_newRENAMEtbl_alter_table;//新建的表替换成原表名

******************************************************************************************************

往已经存在一个表中添加一个新的column “id”

ALTER TABLE testdb.testtable
Add id bigint(20)

取消表的原有主键

ALTER TABLE testdb.testtable
DROP primary key

设置”id”为主键

ALTER TABLE testdb.testtable
ADD PRIMARY KEY (id)

取消表中的某一列”id”

ALTER TABLE testdb.testtable 
DROP COLUMN id

现在有这样一个题目:

往已经存在数据的表中添加一个新的column “id”,并让其值依次递增,取消表的原有主键,设置”id”为主键

下面给出题目要求的做法:

改动前的表:

name sex title
Lili femal Dev
Lilei male QA

往已经存在一个表中添加一个新的column “id”,设置其为主键,并让其值依次递增

ALTER TABLE testdb.testtable ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST; 

执行上面一条SQL,可得改动后的表:

name sex title id
Lili female Dev 1
Lilei male QA 2

有时候我们会发现,改动后的id,并不是按照加1来增加的。递增步长控制着增加的数值:

设置递增步长

SET @@auto_increment_increment=1;
SHOW VARIABLES LIKE 'auto_inc%'; 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网