精华内容
下载资源
问答
  • 先来看看常用的方法MySql的简单语法,常用,却不容易记住。当然,这些Sql语法在各数据库中基本通用。下面列出:1.增加一个字段:alter table user add COLUMN new1 VARCHAR(20) DEFAULT NULL; //增加一个字段,默认...

    先来看看常用的方法

    MySql的简单语法,常用,却不容易记住。当然,这些Sql语法在各数据库中基本通用。下面列出:

    1.增加一个字段:

    alter table user add COLUMN new1 VARCHAR(20) DEFAULT NULL; //增加一个字段,默认为空

    alter table user add COLUMN new2 VARCHAR(20) NOT NULL;    //增加一个字段,默认不能为空

    2.删除一个字段:

    alter table user DROP COLUMN new2;                //删除一个字段

    3.修改一个字段:

    alter table user MODIFY new1 VARCHAR(10);            //修改一个字段的类型

    alter table user CHANGE new1 new4 int;              //修改一个字段的名称,此时一定要重新

    //主键

    alter table tabelname add new_field_id int(5) unsigned default 0 not null auto_increment ,add primary key (new_field_id);

    //增加一个新列

    alter table t2 add d timestamp;

    alter table infos add ex tinyint not null default ‘0′;

    //删除列

    alter table t2 drop column c;

    //重命名列

    alter table t1 change a b integer;

    //改变列的类型

    alter table t1 change b b bigint not null;

    alter table infos change list list tinyint not null default ‘0′;

    //重命名表

    alter table t1 rename t2;

    加索引:

    mysql> alter table tablename change depno depno int(5) not null;

    mysql> alter table tablename add index 索引名 (字段名1[,字段名2 …]);

    mysql> alter table tablename add index emp_name (name);

    加主关键字的索引:

    mysql> alter table tablename add primary key(id);

    加唯一限制条件的索引:

    mysql> alter table tablename add unique emp_name2(cardnumber);

    删除某个索引:

    mysql>alter table tablename drop index emp_name;

    增加字段:

    mysql> ALTER TABLE table_name ADD field_name field_type;

    修改原字段名称及类型:

    mysql> ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;

    删除字段:

    mysql> ALTER TABLE table_name DROP field_name;

    mysql修改字段长度:

    alter table 表名 modify column 字段名 类型;

    例如

    数据库中user表 name字段是varchar(30)

    可以用alter table user modify column name varchar(50) ;

    推荐有关mysql数据库教程网站:http://www.111cn.net/zhuanti/mysqlbakup/

    展开全文
  • 解答你也看一下MySQL5.6在线DDL不锁表,现在我有一张1亿的表,需要增加一个字段,假如我让你去增加这个字段,你应该注意什么,具体怎么操作?操作如下:1.注意磁盘空间(临时表目录 参数 tmpdir ,因为需要创建临时表...

    解答你也看一下

    MySQL5.6在线DDL不锁表,现在我有一张1亿的表,需要增加一个字段,假如我让你去增加这个字段,你应该注意什么,具体怎么操作?

    操作如下:

    1.注意磁盘空间(临时表目录 参数 tmpdir ,因为需要创建临时表使用 algorithm=default,inplace,copy copy是用临时表的方法

    lock=default,none,shared,exclusive)

    2.当前内存剩余量

    3.当前有没有大的事务在执行

    4.innodb_online_alter_log_max_size参数

    5.然后在从上添加,再在主上添加(不记录binlog),处理完成后再开启

    如果直接先在主上操作,那么会导致主从延迟很大(在量比较大的情况下)。因为主从复制,从库的SQL线程是单线程,它接收到主库的BINLOG,要一条一条执行,一条SQL卡住了,后面的SQL就会排队等待,这时同步就延迟了

    附注:

    在之前的版本,InnoDB引擎是通过以下步骤来进行DDL的:

    1 按照原始表(original_table)的表结构和DDL语句,新建一个不可见的临时表(tmp_table)----> create table tmp_table like original_table;

    2 在原表上加write lock,阻塞所有更新操作(insert、delete、update等,一行行的把原表数据拷贝到临时表里,且更新索引)

    3 执行insert into tmp_table select * from original_table

    4 rename original_table和tmp_table,最后drop original_table

    5 释放 write lock。

    如果采用第三方工具推荐使用pt-online-schema-change

    表上不能有任何的外键和触发器,否则不能在线DDL

    OSC为facebook的php脚本,用来mysql 在线DDL

    触发器将在线DDL期间的DML操作记录到缓存日志rowlog中,到copy的最后redo这些DML日志到表上,实现数据一致

    pt-osc工作原理:

    如果表有外键,除非使用 --alter-foreign-keys-method 指定特定的值,否则工具不予执行。

    1 判断各种参数,是否符合操作条件

    2 创建一个和原表一样的空表结构(tmp_table)

    3 执行表结构修改,然后从原表中copy数据到上面创建的新表中

    4 在原表上创建3个触发器(名称格式为pt_osc_库名_表名_操作类型),当copy 数据的过程中,把原表的更新操作更新到新表 (注意:如果表中已经定义了触发器这个工具就不能工作了)

    CREATE TRIGGER `pt_osc_dba_t_del` AFTER DELETE ON `dba`.`t` FOR EACH ROW DELETE IGNORE FROM `dba`.`_t_new` WHERE `dba`.`_t_new`.`id` <=> OLD.`id`

    CREATE TRIGGER `pt_osc_dba_t_upd` AFTER UPDATE ON `dba`.`t` FOR EACH ROW REPLACE INTO `dba`.`_t_new` (`id`, `a`, `b`, `c1`) VALUES (NEW.`id`, NEW.`a`, NEW.`b`, NEW.`c1`)

    CREATE TRIGGER `pt_osc_dba_t_ins` AFTER INSERT ON `dba`.`t` FOR EACH ROW REPLACE INTO `dba`.`_t_new` (`id`, `a`, `b`, `c1`) VALUES (NEW.`id`, NEW.`a`, NEW.`b`, NEW.`c1`)

    5 copy 完成以后,用rename table 新表代替原表,默认删除原表 (可以指定参数不删除原表操作)

    6 删除触发器

    这里要注意的是。。如果是小表。。直接在主上添加了

    深圳@邱治军 mysql 中文网 9:46:41

    大表要结合业务和时间点考虑是否在主上还是先在从上添加

    这个工具只能用在percona DB吗

    深圳@邱治军 mysql中文网群2015/5/29 10:14:02

    没啊

    mysql percona mariadb都支持

    只要是mysql版本

    这工具要维护表的时候最适用了

    定期整理mysql innodb 表碎片

    你刚才说在线加字段,需要有前提条件

    前提条件是什么

    深圳@邱治军 mysql中文网群  10:29:32

    没啥

    添加主键要注意一下

    普通字段没啥

    主从加字段方法 邱治军在从库上添加,再在主库上添加

    1、在从库设置stop slave; set  sql_log_bin=0;

    2、在从库添加字段,不要用pt-osc,从库不能创建触发器,直接加字段就行alter table add column

    3、在从库设置start slave; set  sql_log_bin=1;

    4、用mha做在线主从切换

    5、在主库设置set  sql_log_bin=0;stop slave;

    6、主库加字段  ,不要用pt-osc,从库不能创建触发器,直接加字段就行alter table add column

    7、在主库设置start slave; set  sql_log_bin=1;

    展开全文
  • MySQL JSON类型字段操作

    2020-12-14 12:28:32
    1、Java 中动态扩展字段,会导致数据库,在MySQL 5.7.8版本之前,因为MySQL不能直接操作JSON类型数据,可以将一个字段设定成varchar类型,里面存放JSON格式数据,这样在需要扩展字段时,不需要修改表结构;...
  • MySQL支持大量的列类型,它可以被分为3类:数字类型、日期和时间类型以及字符串(字符)类型。本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述。概述有意...

    MySQL支持大量的列类型,它可以被分为3类:数字类型、日期和时间类型以及字符串(字符)类型。本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述。

    概述有意简化,更详细的说明应该考虑到有关特定列类型的附加信息,例如你能为其指定值的允许格式。由MySQL支持的列类型列在下面。下列代码字母用于描述中:M指出最大的显示尺寸。最大的合法的显示尺寸是 255 。D适用于浮点类型并且指出跟随在十进制小数点后的数码的数量。最大可能的值是30,但是应该不大于M-2。方括号(“[”和“]”)指出可选的类型修饰符的部分。注意,如果你指定一个了为ZEROFILL,MySQL将为该列自动地增加UNSIGNED属性。

    TINYINT[(M)] [UNSIGNED] [ZEROFILL]

    一个很小的整数。有符号的范围是-128到127,无符号的范围是0到255。

    SMALLINT[(M)] [UNSIGNED] [ZEROFILL]

    一个小整数。有符号的范围是-32768到32767,无符号的范围是0到65535。

    MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]

    一个中等大小整数。有符号的范围是-8388608到8388607,无符号的范围是0到16777215。

    INT[(M)] [UNSIGNED] [ZEROFILL]

    一个正常大小整数。有符号的范围是-2147483648到2147483647,无符号的范围是0到4294967295。

    INTEGER[(M)] [UNSIGNED] [ZEROFILL]

    这是INT的一个同义词。

    BIGINT[(M)] [UNSIGNED] [ZEROFILL]

    一个大整数。有符号的范围是-9223372036854775808到9223372036854775807,无符号的范围是0到

    18446744073709551615。注意,所有算术运算用有符号的BIGINT或DOUBLE值完成,因此你不应该使用大于9223372036854775807(63位)的有符号大整数,除了位函数!注意,当两个参数是INTEGER值时,-、+和*将使用BIGINT运算!这意味着如果你乘2个大整数(或来自于返回整数的函数),如果结果大于9223372036854775807,你可以得到意外的结果。一个浮点数字,不能是无符号的,对一个单精度浮点数,其精度可以是<=24,对一个双精度浮点数,是在25 和53之间,这些类型如FLOAT和DOUBLE类型马上在下面描述。FLOAT(X)有对应的FLOAT和DOUBLE相同的范围,但是显示尺寸和小数位数是未定义的。在MySQL3.23中,这是一个真正的浮点值。在更早的MySQL版本中,FLOAT(precision)总是有2位小数。该句法为了ODBC兼容性而提供。

    FLOAT[(M,D)] [ZEROFILL]

    一个小(单精密)浮点数字。不能无符号。允许的值是-3.402823466E+38到-1.175494351E-38,0 和1.175494351E-38到3.402823466E+38。M是显示宽度而D是小数的位数。没有参数的FLOAT或有<24 的一个参数表示一个单精密浮点数字。

    DOUBLE[(M,D)] [ZEROFILL]

    一个正常大小(双精密)浮点数字。不能无符号。允许的值是-1.7976931348623157E+308到-2.2250738585072014E-308、 0和2.2250738585072014E-308到1.7976931348623157E+308。M是显示宽度而D是小数位数。没有一个参数的 DOUBLE或FLOAT(X)(25 < = X < = 53)代表一个双精密浮点数字。

    DOUBLE PRECISION[(M,D)] [ZEROFILL]

    REAL[(M,D)] [ZEROFILL]

    这些是DOUBLE同义词。

    DECIMAL[(M[,D])] [ZEROFILL]

    一个未压缩(unpack)的浮点数字。不能无符号。行为如同一个CHAR列:“未压缩”意味着数字作为一个字符串被存储,值的每一位使用一个字符。小数点,并且对于负数,“-”符号不在M中计算。如果D是0,值将没有小数点或小数部分。DECIMAL值的最大范围与DOUBLE相同,但是对一个给定的 DECIMAL列,实际的范围可以通过M和D的选择被限制。如果D被省略,它被设置为0。如果M被省掉,它被设置为10。注意,在MySQL3.22 里,M参数包括符号和小数点。

    NUMERIC(M,D) [ZEROFILL]

    这是DECIMAL的一个同义词。

    DATE

    一个日期。支持的范围是'1000-01-01'到'9999-12-31'。MySQL以'YYYY-MM-DD'格式来显示DATE值,但是允许你使用字符串或数字把值赋给DATE列。

    DATETIME

    一个日期和时间组合。支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。MySQL以'YYYY-MM-DD HH:MM:SS'格式来显示DATETIME值,但是允许你使用字符串或数字把值赋给DATETIME的列。

    TIMESTAMP[(M)]

    一个时间戳记。范围是'1970-01-01 00:00:00'到2037年的某时。MySQL以YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD或YYMMDD 格式来显示TIMESTAMP值,取决于是否M是14(或省略)、12、8或6,但是允许你使用字符串或数字把值赋给TIMESTAMP列。一个 TIMESTAMP列对于记录一个INSERT或UPDATE操作的日期和时间是有用的,因为如果你不自己给它赋值,它自动地被设置为最近操作的日期和时间。你以可以通过赋给它一个NULL值设置它为当前的日期和时间。

    TIME

    一个时间。范围是'-838:59:59'到'838:59:59'。MySQL以'HH:MM:SS'格式来显示TIME值,但是允许你使用字符串或数字把值赋给TIME列。

    YEAR[(2|4)]

    一个2或4位数字格式的年(缺省是4位)。允许的值是1901到2155,和0000(4位年格式),如果你使用2位,1970-2069( 70-69)。MySQL以YYYY格式来显示YEAR值,但是允许你把使用字符串或数字值赋给YEAR列。(YEAR类型在MySQL3.22中是新类型。)

    CHAR(M) [BINARY]

    一个定长字符串,当存储时,总是是用空格填满右边到指定的长度。M的范围是1 ~ 255个字符。当值被检索时,空格尾部被删除。CHAR值根据缺省字符集以大小写不区分的方式排序和比较,除非给出BINARY关键词。NATIONAL CHAR(短形式NCHAR)是ANSI SQL的方式来定义CHAR列应该使用缺省字符集。这是MySQL的缺省。CHAR是CHARACTER的一个缩写。

    [NATIONAL] VARCHAR(M) [BINARY]

    一个变长字符串。注意:当值被存储时,尾部的空格被删除(这不同于ANSI SQL规范)。M的范围是1 ~ 255个字符。 VARCHAR值根据缺省字符集以大小写不区分的方式排序和比较,除非给出BINARY关键词值。 VARCHAR是CHARACTER VARYING一个缩写。

    TINYBLOB

    TINYTEXT

    一个BLOB或TEXT列,最大长度为255(2^8-1)个字符。

    BLOB

    TEXT

    一个BLOB或TEXT列,最大长度为65535(2^16-1)个字符。

    MEDIUMBLOB

    MEDIUMTEXT

    一个BLOB或TEXT列,最大长度为16777215(2^24-1)个字符。

    LONGBLOB

    LONGTEXT

    一个BLOB或TEXT列,最大长度为4294967295(2^32-1)个字符。

    ENUM('value1','value2',...)

    枚举。一个仅有一个值的字符串对象,这个值式选自与值列表'value1'、'value2', ...,或NULL。一个ENUM最多能有65535不同的值。

    SET('value1','value2',...)

    一个集合。能有零个或多个值的一个字符串对象,其中每一个必须从值列表'value1', 'value2', ...选出。一个SET最多能有64个成员。

    Mysql 数据库数值类型详解

    MySQL 支持所有标准SQL 中的数值类型,其中包括严格数值类型(INTEGER.SMALLINT.DECIMAL 和NUMERIC),以及近似数值数据类型(FLOAT.REAL 和DOUBLE P ...

    Mysql 数据库字符类型详解

    MySQL 中提供了多种对字符数据的存储类型,不同的版本可能有所差异.以5.0 版本为例,MySQL 包括了CHAR.VARCHAR.BINARY.VARBINARY.BLOB.TEXT.ENUM 和 ...

    &lpar;转&rpar;MySQL字段类型详解

    MySQL字段类型详解 原文:http://www.cnblogs.com/100thMountain/p/4692842.html MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间 ...

    重新学习MySQL数据库7:详解MyIsam与InnoDB引擎的锁实现

    重新学习Mysql数据库7:详解MyIsam与InnoDB引擎的锁实现 说到锁机制之前,先来看看Mysql的存储引擎,毕竟不同的引擎的锁机制也随着不同. 三类常见引擎: MyIsam :不支持事务,不 ...

    mysql数据库表分区详解(数量过大的数据库表通过分区提高查询速度)

    这篇文章主要介绍了MySQL的表分区,例如什么是表分区.为什么要对表进行分区.表分区的4种类型详解等,需要的朋友可以参考下 一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysq ...

    别在细节上栽跟头------------mysql 字段类型详解

    也许你平时不在意,在设计数据库的时候,数字就设成int(10) 字符串就设成varchar(20)或者text 普通情况下是没有问题的,但是若不理解字段类型和长度的含义,总有一天你会在这里栽跟头, 这 ...

    mysql中修改表字段名&sol;字段长度&sol;字段类型详解

    在mysql中我们对数据表字段的修改命令只要使用alter就可以了,下面我来给大家详细介绍mysql中修改表字段名/字段长度/字段类型等等一些方法介绍,有需要了解的朋友可参考. 先来看看常用的方法 M ...

    MYSQL数据库引擎区别详解

    数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HEAP.另 ...

    Mysql 日期时间类型详解

    MySQL 中有多种数据类型可以用于日期和时间的表示,不同的版本可能有所差异,表3-2 中列出了MySQL 5.0 中所支持的日期和时间类型. 这些数据类型的主要区别如下: * 如果要用来表示年月日 ...

    随机推荐

    js 反显查询。

    反显就是点击查询之后,查询条件消失,正常解决很容易,就是查询的表单value等于返回过来的值 ,比如这样,初始化时候的devNumber是空的,点击查询的时候会有值,我们在返回来显示就可以了. &lt ...

    &lbrack;MySQL&rsqb; 号称永久解决了复制延迟问题的并行复制,MySQL5&period;7

    一.缘由: 某天看到主从复制延时的告警有点频繁,就想着是不是彻底可以解决一下. 一般主从复制,有三个线程参与,都是单线程:Binlog Dump(主) ----->IO Thread (从) - ...

    UVALive 6092 Catching Shade in Flatland --枚举&plus;几何计算

    题意:x=[-200,200],y=[-200,200]的平面,一天中太阳从不同角度射到长椅(原点(0,0))上,有一些树(用圆表示),问哪个时刻(分钟为单位)太阳光线与这些圆所交的弦长总和最长.太阳 ...

    atomikos的Jta配置

    配置说明见: http://www.atomikos.com/Documentation/JtaProperties atomikos的一些配置,文档中说明的比较清楚,有两个属性配置不太明确:com. ...

    poj 1200字符串hash

    题意:给出不同字符个数和子串长度,判断有多少个不同的子串 思路:字符串hash. 用字符串函数+map为什么会超时呢?? 代码: #include #include ...

    jquery访问浏览器本地存储cookie,localStorage和sessionStorage

    前言:cookie,localStorage和sessionStorage都是浏览器本地存储数据的地方,其用法不尽相同:总结一下基本的用法. 一.cookie 定义: 存储在本地,容量最大4k,在同源 ...

    创建结点 与 分配内存 Function to create a Node&period; Allocates memory for a new node&period; 主动申请内存 链表 指针的写法

    Self Referential Data Structure in C - create a singly linked list http://www.how2lab.com/programmin ...

    282A

    #include #include using namespace std; int main() { int n, plus, sub ...

    zabbix日常监控项nginx(五)

    1.开启nginx监控 2.编写脚本来进行数据采集 3.设置用户自定义参数 4.重启zabbix-agent 5.添加item.创建图形.创建触发器 6.创建模板 注:第一次使用可以按需求制定好模板, ...

    &lbrack;洛谷P4492&rsqb; &lbrack;HAOI2018&rsqb;苹果树

    洛谷题目链接:[HAOI2018]苹果树 题目背景 HAOI2018 Round2 第一题 题目描述 小 C 在自己家的花园里种了一棵苹果树, 树上每个结点都有恰好两个分支. 经过细心的观察, 小 C ...

    展开全文
  • mysql修改字段卡住问题总结

    千次阅读 2020-10-29 21:07:24
    方案4:在从库进行添加字段操作,然后进行mysql主从切换 注意事项:主从复制日志格式如果为row格式,添加的新列必须是在的最后。 参考文章:http://blog.itpub.net/15498/viewspace-2153012/ 笔者就是采用方案1

    前言

    线上环境如何修改表字段才能保证服务的稳定运行呢?大概方法罗列:

    方案1:业务低峰期进行alter table操作。

    方案2:创建临时表、加字段、插入旧数据,增量数据插入和重命名表名。

    方案3:用第三方开源工具实现,具体实现步骤看链接:

    方案4:在从库进行添加字段操作,然后进行mysql主从切换
    注意事项:主从复制日志格式如果为row格式,添加的新列必须是在表的最后。

    参考文章:http://blog.itpub.net/15498/viewspace-2153012/

    笔者就是采用方案1来操作的,但是遇到一个问题,执行完这个表就卡住了。。。。。。。。

    笔者当时的汗-_-||。。。一万个草拟吗在心中咆哮,这个表锁住了,app的重要首页基本就显示不出数据来了。这尼玛绝对走人的节奏。

    还好笔者有点东西,立马 show processlist 查看进程 然后kill掉刚才执行的操作。表也恢复正常了。

    虽然暂时问题解决了,但是没办法该表呀,赶紧查原因。

    查看正在运行的进程

    可以通过show processlist查看正在执行的sql进程

    说明各列的含义和用途,

    id列:一个标识,你要kill 一个语句的时候很有用。

    user列: 显示当前用户,如果不是root,这个命令就只显示你权限范围内的sql语句。

    host列:显示这个语句是从哪个ip 的哪个端口上发出的。可用来追踪出问题语句的用户。

    db列:显示这个进程目前连接的是哪个数据库

    command列:显示当前连接的执行的命令,一般就是休眠(sleep),查询(query),连接(connect)。

     通常代表资源未释放,如果是通过连接池,sleep状态应该恒定在一定数量范围内

     实战范例:因前端数据输出时(特别是输出到用户终端)未及时关闭数据库连接,导致因网络连接速度产生大量sleep连接,在网速出现异常时,数据库too many connections挂死。

     简单解读,数据查询和执行通常只需要不到0.01秒,而网络输出通常需要1秒左右甚至更长,原本数据连接在0.01秒即可释放,但是因为前端程序未执行close操作,直接输出结果,那么在结果未展现在用户桌面前,该数据库连接一直维持在sleep状态!

    time列:此这个状态持续的时间,单位是秒。

    state列:显示使用当前连接的sql语句的状态,很重要的列,后续会有所有的状态的描述,请注意,state只是语句执行中的某一个状态,一个sql语句,已查询为例,可能需要经过copying to tmp table,Sorting result,Sending data等状态才可以完成。

    info列:显示这个sql语句,因为长度有限,所以长的sql语句就显示不全,但是一个判断问题语句的重要依据。

    更多内容参考:https://blog.csdn.net/dhfzhishi/article/details/81263084

    查看正在运行的事务

    单凭show processlist有时不能查看到问题之所在,就像前言中的问题,笔者通过show processlist没有发现问题。

    通过运行

    SELECT * FROM information_schema.innodb_trx

    查看正在运行的事务

    FieldTypeNullKeyDefaultExtra
    trx_idvarchar(18)NO  事务ID
    trx_statevarchar(13)NO  事务状态:
    trx_starteddatetimeNO 0000-00-00 00:00:00事务开始时间;
    trx_requested_lock_idvarchar(81)YES NULLinnodb_locks.lock_id
    trx_wait_starteddatetimeYES NULL事务开始等待的时间
    trx_weightbigint(21) unsignedNO 0事务权重
    trx_mysql_thread_idbigint(21) unsignedNO 0事务线程ID
    trx_queryvarchar(1024)YES NULL具体SQL语句
    trx_operation_statevarchar(64)YES NULL事务当前操作状态
    trx_tables_in_usebigint(21) unsignedNO 0事务中有多少个表被使用
    trx_tables_lockedbigint(21) unsignedNO 0事务拥有多少个锁
    trx_lock_structsbigint(21) unsignedNO 0 
    trx_lock_memory_bytesbigint(21) unsignedNO 0事务锁住的内存大小(B)
    trx_rows_lockedbigint(21) unsignedNO 0事务锁住的行数
    trx_rows_modifiedbigint(21) unsignedNO 0事务更改的行数
    trx_concurrency_ticketsbigint(21) unsignedNO 0事务并发票数
    trx_isolation_levelvarchar(16)NO  事务隔离级别
    trx_unique_checksint(1)NO 0是否唯一性检查
    trx_foreign_key_checksint(1)NO 0是否外键检查
    trx_last_foreign_key_errorvarchar(256)YES NULL最后的外键错误
    trx_adaptive_hash_latchedint(1)NO 0 
    trx_adaptive_hash_timeoutbigint(21) unsignedNO 0

    更多内容参考文章:https://blog.csdn.net/J080624/article/details/80596958

    可以通过运行的事务关联 showprocesslist联合查询,然后kill 进程

    SELECT B.*, A.trx_started FROM  information_schema.innodb_trx A
    LEFT JOIN (SELECT * FROM information_schema.`PROCESSLIST`) B ON A.trx_mysql_thread_id=B.id

    杀掉进程后,在修改表字段很快就会完事。当然基于表的数据,表数据越大,修改的时间会稍微长一点。

     慢查询的影响

    这里要明确一点,当你执行任何一个sql的时候,都是带着事务的,就算你执行一个查询的sql,也是有事务的。

    为什么要说慢查询,因为当你修改表字段属性的时候,切好有一个正在执行的慢查询,预估这个慢查询会持续100s,那么你修改表字段的属性时会一直卡着等待,直到这个慢查询执行完,它才会去修改表属性。

    所以,在生产环境,修改表字段属性的时候,一定要注意先查看当前表是否有正在执行的事务。假如有先让这个事务执行完,否则修改会一直阻塞。

    这里要明白一点,查询的事务,只会阻塞修改表属性等操作,不会影响其他增删改查的事务操作。但是它会间接影响增删改查事务操作。

    为什么说是间接呢,假如当前有个正在执行的事务,然后你修改表字段实行,那么修改表字段属性会阻塞,它的阻塞会直接影响后续对该表的所有增删改查操作都阻塞。

    所以,修改表字段属性一定要慎重和谨慎,稍有不慎,会使整个表瘫痪,间接影响其他关联这个表的所有操作。

    慢查询同时会使cpu飙升,间接影响所有对mysql的操作。

    总结

    最后通过查看运行中的事务,然后结束掉进程就ok了,修改和添加表字段也没有出现卡住不动的情况。到此结束。记录一下,便于以后查看。

    展开全文
  • 如图: 如果开发让修改表字段属性,建议用pt-online-...另外,增加、删除字段或索引不会,删除主键会。 本文转自hcymysql51CTO博客,原文链接:http://blog.51cto.com/hcymysql/1370546...
  • Mysql新增字段到大数据表导致锁表

    万次阅读 2016-06-16 11:34:56
     昨天晚上7点左右,对一张表进行加字段,大概200多万条记录,字段90多个的大表,结果造成mysql锁表,进而导致服务不可用。执行语句如下: ALTER TABLE `sc_stockout_order` ADD `route_remarks` VARCHAR(1024) C
  • 在使用mysql的过程中,有个问题就是mysql的优化,mysql中longblob字段在5.5版本中默认的为1M。 想改变这个问题,需要注意几点: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (2054817 > ...
  • 今天遇到一个需要修改字段后面的注释信息,就查了下百度。 创建的时候写注释。 Sql代码 createtabletest1 ( field_nameintcomment'字段的注释' )comment='的注释'; 创建学生表示例如下: 二.修改...
  • mysql 如何给大添加字段

    千次阅读 2021-01-20 18:39:28
    当需要对表进行ddl操作如加索引、增删列时,数据量小时直接在线修改表结构影响不大当表达到百万、千万数据就不能直接在线修改表结构下面是具体的过程:1、备份数据select * from ih_order into outfile '/bak/order....
  • 1、创建表结构 create table t2(id int,c varchar(10)); 2、插入数据  insert into t1 values(1,'aaaaaaaaaa'); 3、创建需要更改成的临时表  create table t2(id int,c ...4、锁表  flush tables with read
  • SELECTCONCAT("alter table ",TABLE_SCHEMA,".",TABLE_NAME," modify ",COLUMN_NAME," bigint(20)",IF( IS_NULLABLE = 'NO', " NOT NULL", "" ),IF( EXTRA = "", "", " AUTO_INCREMENT" ),IF( COLUMN_DEFAULT IS NU....
  • 中的字段选择合适的数据类型 1、当一个列可以选择多种数据类型时,应该优先考虑数字类型,其次是日期和二进制类型,最后是字符类型。 2、对于相同级别的数据类型,应该优先选择占用空间小的数据类型。 之所以...
  • mysql 锁表还是锁行

    千次阅读 2021-02-03 23:40:45
    关于mysql的锁行还是锁表,这个问题,今天算是有了一点头绪,mysql 中 innodb是锁行的,但是项目中居然出现了死锁,锁表的情况。为什么呢?先看一下这篇文章。做项目时由于业务逻辑的需要,必须对数据表的一行或多行...
  • 那么对于MySQL数据库,哪些表结构操作会“锁表”,会导致读写表中数据操作不能并发执行呢? 背景知识 DML( data manipulation language),数据操作语句,是中INSERT、UPDATE、DELETE、SELECT等表数据操作的语句。 ...
  • 问题详情修改数据库字段长度问题,非常紧急!大家来帮忙我有一个表里有个主键id char(3);第一个问题:能不能把char(3)改为varchar2(10)?“alter table sys_company modify(comid varchar2(10));”我run了这...
  • 本文实例讲述了MySQL常用的建表、添加字段、修改字段、添加索引SQL语句写法。分享给大家供大家参考,具体如下:建表:DROP TABLE IF EXISTS bulletin;CREATE TABLE bulletin(id INT NOT NULL PRIMARY KEY AUTO_...
  • mysql的行锁是通过索引加载的,即行锁是加在索引响应的行上的,要是对应的SQL语句没有走索引,则会全扫描,行锁则无法实现,取而代之的是表锁。CREATE TABLE SIMPLE_USER(ID BIGINT (20) NOT NULL AUTO_INCREMENT,...
  • MySQL锁系列之的种类和概念

    千次阅读 2021-01-18 20:45:10
    mysql当中,关于innodb的锁类型总共可以分为四种,包含了行锁和表锁,分别是基本 - [ 共享(Shared Locks:S)和排它(Exclusive Locks:X)]意向 - [ intention lock,分为意向共享(IS)和意向排他...
  • PostgreSQL 在9.2 之前是要面临一个指责,就是在更改字段类型的时候带来的不堪,假象你有100万行的数据,其中一个字段是varchar(20) ,你想将其更改为 varhcar...
  • (这里需要注意的是RENAME过程中的锁表,可以在业务空闲的凌晨晚上进行处理)。 #参考 mysql在线修改表结构大数据表的风险与解决办法归纳 - 王滔 - 博客园.htm 一个资料介绍online-schema-change这个工具, MYSQL ...
  • MYSQL数据库乐观之设计version字段

    万次阅读 2018-08-31 11:29:49
    一、为什么需要(并发控制)?  在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突。这就是著名的并发性问题。  典型的冲突有:  1.丢失更新:一个事务的更新覆盖了其它事务的更新结果...
  • MySQL-InnoDB常用锁类型解析

    千次阅读 2018-08-09 00:24:02
     InnoDB有两种锁类型,Shared(s) and Exclusive(x) Locks(乐观和互斥)。  Shared(s)Locks:允许持有该的事务读取数据;  Exclusive(x) Locks:允许持有的事务插入,更新或修改数据; 如果...
  • 文章目录官方文档概述示例大数据的分批处理修改结构方案一 : 从表修改,主从切换方案二: pt-online-schema-change 官方文档 https://dev.mysql.com/doc/ 如果英文不好的话,可以参考 searchdoc 翻译的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 55,402
精华内容 22,160
热门标签
关键字:

mysql修改字段类型锁表

mysql 订阅