mysql 的 alter table 操作性能小提示】的更多相关文章

通常情况下,修改表的结构一般不会有太大问题,无非就是一个 alter table 操作,但是对于大表做 alter 操作是一个大问题,请小伙伴们慎重. mysql执行大部分修改表结构操作方法是创建一个空表,从旧表查询所有的数据插入,然后删除旧表.如果内存不足,或者表很大,而且还有很多索引的情况下,可能需要花费数个小时,甚至数天才能完成.所以如果是操作线上数据库,甚至会影响到服务的正常进行,操作一定要慎重.如有需要可以查询其他方法操作进行. 在这里,如果是修改列的默认值的话,是有一个小技巧的.列的…
1.修改表名:alter table 原表名 rename to 新表名; 2.新增列:alter table 表名 add column 列名 varchar(20) ; 3.删除列:alter table 表名 drop column 列名; 4.修改列名: alter table 表名 change 原列名 新列名 varchar(20) ; 5.修改列属性:alter table 表名 modify 列名 varchar(20) ;…
删除列 alter table table-name drop col-name; 增加列(单列) alter table table-name add col-name col-type comment 'xxx'; 增加列(多列) alter table table-name add col-name col-type comment 'xxx', add col-name col-type(col-length) comment 'xxx'; 增加表字段并指明字段放置为第一列 alter…
use mysql: ALTER TABLE `proc` MODIFY COLUMN `comment` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL AFTER `sql_mode`; 具体原因请看:http://www.cnblogs.com/jackluo/p/3395147.html…
在工作中常遇到要维护数据库表的列,这里主要介绍sql语句中的ALTER TABLE 语句.ALTER TABLE 语句用于在已有的表中添加.修改或删除列. 如需在表中添加列,请使用下列语法: ALTER TABLE table_name ADD column_name datatype 要删除表中的列,请使用下列语法: ALTER TABLE table_name DROP COLUMN column_name 注释:某些数据库系统不允许这种在数据库表中删除列的方式 (DROP COLUMN c…
mysql的alter table操作的性能对于大表来说是个大问题.mysql大部分修改表结构操作的方法都是用新的结构创建一个 新表,从旧表中查出数据插入新表,然后在删除旧表.这样的操作很耗费时间,而且还有可能中断mysql服务. 这里推荐一种方法来提高alter table的操作速度.(请注意数据备份) 修改数据表的.frm文件,步骤如下: 1.创建一个有相同结构的新表,并进行所需修改(例如增加ENUM常量值). 2.执行FLUSH TABLES WITH READ LOCK.加锁禁止打开所有…
mysql的alter table操作的性能对打表来说是个大问题. mysql执行大部分修改表结构的方法是用新的结构创建一个空表,从旧表中查出所有的数据插入新表,然后删除旧表.这样操作就可能需要花费很长时间,如果内存不足而表又很大,而且还有很多索引的情况下尤其如此. 一般而言大部分AlterTable操作将导致mysql服务中断. 不是所有的alter table操作都会引起表重建 alter table允许使用alter column,modify column和change column语句…
今天做数据迁移, 发现事务有时候可以回滚, 有时候不可以回滚, 最后一点点调试发现中间有段修改表结构的语句, 最终导致回滚失败. 1.MySQL最常用的两个表类型: InnoDB和MyISAM.MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持.存储过程.视图.行级锁定等等高级数据库功能,若回滚失败,先检查表类型. SHOW ENGINES 语句可以查看当前的数据库支持的存储类 SHOW CREATE TABLE 表名;可以查看表的…
当我用Navicat尝试修改已有记录的mysql数据表的主键为自动增长时,报出以下错误 1602 ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry ’1′ for key ‘PRIMARY’ 解决方法: 第1步:将主键字段值为0的那条记录值改为其他大于0且不重复的任意数 第2步:修改主键字段为auto_increment 第3步:把刚才修改过的那条记录的值还原 来自:http://blog.s…
MySQL:5.6.35 OS:redhat5.8 今天更新数据库某些表字段,有如下两SQL: ①alter table xx modify xxxx;(表大概是77w) ②alter table sb add sbsb;(表大概是95w) 奇怪的是①产生的state为:copy to tmp table ②产生的state为:altering table 两表同样是百万级别的:后者执行虽慢,但是消耗时间不到1200s,而后者跑了2800s. 开始怀疑alter中的add 和modify 两个操…