mysql执行sql语句偶尔出错, 找出了罪魁祸首

update t_word set yesterday_num = 46648, yesterday_order = 3, increase= today_num - 46648, on_board = 1 + on_board  where time='2008-02-27' and word = 'xx'" 

碰到更新的字段中又包含自己的时候,mysql 4.xx 执行偶尔出现错误。例如上面的on_board = 1+on_board

这个可能跟mysql执行写入数据的次序有关。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL 中,如果你想在执行一系列 SQL 语句时跳过执行出错的语句并继续执行后续语句,可以使用存储过程和异常处理机制来实现。 以下是一个示例,展示了如何在 MySQL 中创建存储过程来实现这个目的: ```sql DELIMITER // CREATE PROCEDURE execute_sql_statements() BEGIN DECLARE continue_handler INT DEFAULT 1; DECLARE sql_statement VARCHAR(1000); -- 定义异常处理程序 DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET continue_handler = 0; -- 定义要执行SQL 语句列表 SET @sql_statements = 'SELECT * FROM table1;'; SET @sql_statements = CONCAT(@sql_statements, 'INSERT INTO table2 VALUES (1, ''value'');'); SET @sql_statements = CONCAT(@sql_statements, 'UPDATE table3 SET column1 = ''new_value'' WHERE column2 = ''old_value'';'); -- 分割语句列表 WHILE LENGTH(@sql_statements) > 0 DO SET @delimiter_index = INSTR(@sql_statements, ';'); SET @sql_statement = TRIM(SUBSTRING(@sql_statements, 1, @delimiter_index)); SET @sql_statements = TRIM(SUBSTRING(@sql_statements, @delimiter_index + 1)); -- 执行 SQL 语句 IF continue_handler THEN PREPARE stmt FROM @sql_statement; EXECUTE stmt; DEALLOCATE PREPARE stmt; END IF; END WHILE; END // DELIMITER ; ``` 在这个示例中,我们创建了一个名为 `execute_sql_statements` 的存储过程。在存储过程中,我们使用了异常处理程序 `DECLARE CONTINUE HANDLER FOR SQLEXCEPTION` 来捕获异常,并将 `continue_handler` 的值设置为 0,以便跳过出错的语句。 然后,我们定义了要执行SQL 语句列表,并使用 `WHILE` 循环逐个执行每个语句。如果 `continue_handler` 的值为 1(即没有异常),则准备并执行当前的 SQL 语句。 要执行这个存储过程,你可以使用以下语句: ```sql CALL execute_sql_statements(); ``` 请注意,这只是一个示例,你可以根据自己的需求修改和扩展存储过程中的 SQL 语句列表。另外,这种方法需要创建存储过程,并且只能在 MySQL 中使用。在其他数据库管理系统中,可能需要使用不同的机制来实现类似的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值