独孤那点事儿 - Mysql
type: channel
link: http://sanplit.cn/tag/Mysql/
items: MySQL利用存储过程插入数据
items: MySQL事务锁超时处理

MySQL利用存储过程插入数据
type: item
date: 2020-11-16T11:59:00+08:00
description: 有时本地需要调试，而又因数据小而得不到效果，一条条insert又太麻烦，故而利用存储过程进行数据插入一劳永逸。首先创建所需的表（根据自己需要自行创建）：DROP TABLE IF EXISTS `m_user`; CREATE TABLE `m_user` ( `id` bigint(20) PRIMARY key not null AUTO_INCREMENT, `username` varchar(50) DEFAULT NULL, `email` varchar(30) DEFAULT NULL, `password` varchar(32) DEFAULT NULL, `status` tinyint(1) NULL DEFAULT 0 ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 然后创建存储过程方法（方法名为add_user_data， 参数为int条数）： CREATE PROCEDURE add_user_data(IN n int) BEGIN DECLARE i INT DEFAULT 1; WHILE i <= n DO INSERT INTO m_user(username, email, password) values(CONCAT(\'username_\', i), CONCAT(i ,\'@qq.com\'), MD5(i)); SET i = i + 1; END WHILE; END; 执行：CALL add_user_data(200000); 这里插入200000条数据如果需要修改，或者删除都需要删除这个存储过程，不然会提示已存在：drop PROCEDURE add_user_data; 搞乱点，可以随便设点随机字符，如何组织自行选择，这只是个不像样的示例。INSERT INTO test_user(username, email, password) values(CONCAT(\'user.\', UPPER(SUBSTRING(REPLACE(UUID(),\'-\',\'\'),1,10))), CONCAT(SUBSTRING(MD5(RAND()), 1, 10) ,\'@qq.com\'), MD5(i)); OVER!

MySQL事务锁超时处理
type: item
date: 2020-10-15T15:36:00+08:00
description: >Mysql数据库采用InnoDB模式，默认参数:innodb_lock_wait_timeout设置锁等待的时间是50s，一旦数据库锁超过这个时间就会报错。mysql -uroot -p #输入密码进入mysql > show full processlist; #实时查看所有耗内存的sql进程，不需要可以 `kill id` > show variables like \'%timeout%\'; #查看超时设置（单位秒），根据需要修改 > SET GLOBAL innodb_lock_wait_timeout=500; > SET GLOBAL wait_timeout=100; > SET GLOBAL interactive_timeout=100; 修改完成，要重启MySQL服务之后才有效。