关于MYSQL 隔离级别的问题,在存储过程中插入数据,再对这数据做更新,始终更新不成功。

CREATE PROCEDURE stockDateRecordProduct()
BEGIN
DECLARE cur CURSOR FOR SELECT ... FROM TEMP_TRANSACTION_ALL; -- 0 定义游标
INSERT INTO TEMP_TRANSACTION_ALL (...) -- 1 插入N条事条数据到 TEMP_TRANSACTION_ALL 表
SET i = 0;
WHILE i < 4 DO
INSERT INTO stock_date_record(...)(SELECT...FROM); --2 往 stock_date_record 表中插入一条数据
-- 在此处加COMMIT;也不好用
SELECT count(1) FROM stock_date_record WHERE ... into cntR -- 3 此处查询 stock_date_record 表(上面插入的数据),
select cntR ; -- 始终查不到数据,select cntR 一直为零导致下面游标中UPDATE语句不能执行
OPEN cur;
read_loop: LOOP
-- 提取游标里的数据
FETCH cur INTO V_1.....; -- 4通过游标把 TEMP_TRANSACTION_ALL 表中的数据 放到 V_1 V_2..变量中。
IF done = 0 THEN
LEAVE read_loop;
END IF;
UPDATE stock_date_record SET aaaa= V_1 where ... -- 5 能过游标查询的数据把上面2处的数据做更新
END LOOP;
-- 关闭游标
CLOSE cur;
END WHILE;
END;
这是mysql 查出的隔离级别,
SELECT @@tx_isolation;
"@@tx_isolation"
"REPEATABLE-READ"
相关推荐
mysql 存储过程判断重复的不插入数据
mysql存储过程中 下面是一个较常见的场景,判断表中某列是否存在某值,如果存在执行某操作 需要注意的是不能用if exists; exists可以在where后面或者在create object是使用,但是在if语句中不可以使用,只能用变通的方法。 delimiter $$ create procedure proc_add_book(in $bookName varchar(200),in $price float) begin declare $existsFlag int default 0; select bookId into $existsFlag from book
MySQL创建存储过程批量插入10万条数据
MySQL创建存储过程批量插入10万条数据 存储过程 1、首先防止主键冲突,我们清空表。 TRUNCATE table A_student; 2、编写存储过程 delimiter ‘$’; CREATE PROCEDURE batchInsert(in args int) BEGIN declare i int default 1; start TRANSACTION; while i <= args DO insert into A_student(id,name) VALUES (i, concat(“陈瓜皮-”, i)); set i = i+1; end while; COMMIT;
mysql如果数据不存在,则插入新数据,否则更新的实现方法
//如果不存在,则插入新数据 $sql = “INSERT INTO {$ecs->table(‘cat_lang’)} (cat_id,lang_id,cat_name,keywords,cat_desc) VALUES({$cat_id},{$k},'{$val[‘cat_name’]}’,'{$val[‘keywords’]}’,'{$val[‘cat_desc’]}’) ON DUPLICATE KEY UPDATE cat_name='{$val[\u2018cat_name\u2019]}\u2019,cat_desc='{$val[‘cat_desc’]}’,keywords='{$val[‘cat_desc
MySQL数据库事务隔离级别详解
数据库事务隔离级别 数据库事务的隔离级别有4个,由低到高依次为 Read uncommitted:允许脏读。 Read committed: 防止脏读,最常用的隔离级别,并且是大多数数据库的默认隔离级别。 Repeatable read:可以防止脏读和不可重复读。 Serializable:可以防止脏读,不可重复读取和幻读,(事务串行化)会降低数据库的效率。 这四个级别可以逐个解决脏读 、不可重复读 、幻读 这几类问题。 √: 可能出现 ×: 不会出现 事务级别 脏读 不可重复读 幻读 Read uncommitted √ √ √ Read committed
mysql 存在该记录则更新,不存在则插入记录的sql
非常不错的功能,主要用于更新特定的记录,如果存在这条记录则更新一下,如果不存在则插入记录。应用于配置文件等。


