首页 > 数据库 >MySQL错误:check the manual that corresponds to your MySQL server version for the right syntax to use……

MySQL错误:check the manual that corresponds to your MySQL server version for the right syntax to use……

时间:2023-10-15 11:31:35浏览次数:40  
标签:use right temp INT BEGIN id DEFAULT MySQL DECLARE

在MySQL执行以下SQL报错

DELIMITER //
CREATE PROCEDURE generate_and_insert_data()
BEGIN
    DECLARE i INT DEFAULT 1;
    DECLARE j INT DEFAULT 1;
    DECLARE total_iterations INT DEFAULT 1000;
    WHILE i <= total_iterations DO
        -- 创建临时表用于存储生成的id和apply_no
        CREATE TEMPORARY TABLE temp_data (
            temp_id INT,
            temp_apply_no VARCHAR(50)
        );
        -- 生成100个不重复的id和apply_no
        WHILE j <= 100 DO
            -- 生成随机的id和apply_no
            DECLARE temp_id INT;
            DECLARE temp_apply_no VARCHAR(50);
            SET temp_id = FLOOR(RAND() * 1000000) + 1;
            SET temp_apply_no = CONCAT('APPLY_', temp_id);
            -- 检查生成的id和apply_no是否已存在
            WHILE EXISTS (SELECT * FROM temp_data WHERE temp_id = temp_id OR temp_apply_no = temp_apply_no) DO
                SET temp_id = FLOOR(RAND() * 1000000) + 1;
                SET temp_apply_no = CONCAT('APPLY_', temp_id);
            END WHILE;
            -- 将生成的id和apply_no插入到临时表中
            INSERT INTO temp_data (temp_id, temp_apply_no) VALUES (temp_id, temp_apply_no);
            SET j = j + 1;
        END WHILE;
        -- 将临时表中的数据插入到user_base表中
        INSERT INTO acc_loan.user_base (id, apply_no, project_no, phone, id_no, id_type, batch_date, car_no, created_date, due_bill_no, hash_key, last_modified_date, remark, sex, user_id, user_name, version)
        SELECT temp_id, temp_apply_no, 'WS10043190001', '15625172814', '511423199309110012', 'IDENTITY', CURDATE(), CONCAT('CAR_', temp_id), NOW(), temp_apply_no, MD5(CONCAT('IDNO_', temp_id)), NOW(), CONCAT('REMARK_', temp_id), IF(RAND() > 0.5, 'MALE', 'FEMALE'), CONCAT('USER_', temp_id), CONCAT('USER_NAME_', temp_id), NULL
        FROM temp_data;
        -- 删除临时表
        DROP TEMPORARY TABLE IF EXISTS temp_data;
        SET i = i + 1;
        SET j = 1;
    END WHILE;
END //
DELIMITER ;

错误信息如下:

> 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE temp_id INT;
              DECLARE temp_apply_no VARCHAR(50);
            ' at line 15

图片.png

改正方法:

在MySQL 5.7中,DECLARE语句必须在BEGIN...END块之前进行声明。报错信息指出在DECLARE temp_id INT;语句附近存在语法错误。

为了解决这个问题,可以将DECLARE语句移动到BEGIN语句之前。

DELIMITER //
CREATE PROCEDURE generate_and_insert_data()
BEGIN
    DECLARE i INT DEFAULT 1;
    DECLARE j INT DEFAULT 1;
    DECLARE total_iterations INT DEFAULT 1000;
    DECLARE temp_id INT; -- 将DECLARE语句移动到BEGIN之前
    DECLARE temp_apply_no VARCHAR(50); -- 将DECLARE语句移动到BEGIN之前
    WHILE i <= total_iterations DO
        -- 创建临时表用于存储生成的id和apply_no
        CREATE TEMPORARY TABLE temp_data (
            temp_id INT,
            temp_apply_no VARCHAR(50)
        );
        -- 生成100个不重复的id和apply_no
        WHILE j <= 100 DO
            -- 生成随机的id和apply_no
            SET temp_id = FLOOR(RAND() * 1000000) + 1;
            SET temp_apply_no = CONCAT('APPLY_', temp_id);
            -- 检查生成的id和apply_no是否已存在
            WHILE EXISTS (SELECT * FROM temp_data WHERE temp_id = temp_id OR temp_apply_no = temp_apply_no) DO
                SET temp_id = FLOOR(RAND() * 1000000) + 1;
                SET temp_apply_no = CONCAT('APPLY_', temp_id);
            END WHILE;
            -- 将生成的id和apply_no插入到临时表中
            INSERT INTO temp_data (temp_id, temp_apply_no) VALUES (temp_id, temp_apply_no);
            SET j = j + 1;
        END WHILE;
        -- 将临时表中的数据插入到user_base表中
        INSERT INTO acc_loan.user_base (id, apply_no, project_no, phone, id_no, id_type, batch_date, car_no, created_date, due_bill_no, hash_key, last_modified_date, remark, sex, user_id, user_name, version)
        SELECT temp_id, temp_apply_no, 'WS10043190001', '15625172814', '511423199309110012', 'IDENTITY', CURDATE(), CONCAT('CAR_', temp_id), NOW(), temp_apply_no, MD5(CONCAT('IDNO_', temp_id)), NOW(), CONCAT('REMARK_', temp_id), IF(RAND() > 0.5, 'MALE', 'FEMALE'), CONCAT('USER_', temp_id), CONCAT('USER_NAME_', temp_id), NULL
        FROM temp_data;
        -- 删除临时表
        DROP TEMPORARY TABLE IF EXISTS temp_data;
        SET i = i + 1;
        SET j = 1;
    END WHILE;
END //
DELIMITER ;

修改后执行成功: 图片.png

标签:use,right,temp,INT,BEGIN,id,DEFAULT,MySQL,DECLARE
From: https://blog.51cto.com/u_13372349/7870286

相关文章

  • Mysql中mvcc实现原理
    Mysql中mvcc实现原理今天我们简单来介绍一下mvcc的实现原理。官方文档的链接也贴在这里官方文档mvcc全称Multi-VersionConcurrencyControl,多版本并发控制,顾名思义是维持了数据库中数据的多版本;这个机制主要是为了服务事务隔离级别中的READCOMMITTED和REPATEABLEREAD两种隔......
  • 了解 MySQL 数据库的三大日志(redo log、undo log、binary log)
    前言MySQL中有以下几种日志,包括:redolog(重做日志)undolog(回滚日志)binarylog(二进制日志)errorlog(错误日志)slowquerylog(慢查询日志)generallog(一般查询日志)relaylog(中继日志)事务的特性:原子性(Atomicity):事务是最小的执行单位,不允许分割。事务的原子......
  • Windows上卸载MySQL 5.1
        完整的卸载MySQL5.1的卸载方法:1、控制面板里的增加删除程序内进行删除2、删除MySQL文件夹下的my.ini文件,如果备份好,可以直接将文件夹全部删除3、开始->运行->regedit看看注册表里这几个地方删除没有HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\S......
  • 2023_10_14_MYSQL_DAY_05_笔记
    2023_10_14_MYSQL_DAY_05_笔记https://www.cnblogs.com/tdskee/p/16536166.html{MySQL的优化多种方法(至少15条)}#查看触发器showtriggers;#删除触发器droptrigger触发器名;#建立触发器droptriggerifexistsdept_del;createtriggerdept_delafterdeleteon......
  • 2023_10_14_MYSQL_DAY_06_MYSQL优化的种类
    MYSQL优化的种类MYSQL的优化,是每一个程序员在做数据查询处理的时候,经常有的步骤那么SQL的优化有很多种,它可以是在硬件方面的,可以是在代码层面的,可以是在数据库方面的优化。下面就详细整理一下30种优化MYSQL的方案:1.在读表的时候,尽可能的避免全表扫描,合理的根据业务需求,在wher......
  • mysql报错:You must reset your password using ALTER USER statement before executin
    新安装mysql后,登录后,执行任何命令都会报错:YoumustresetyourpasswordusingALTERUSERstatementbeforeexecutingthisstatement.【解决办法】MySQL版本5.7.6版本以前用户可以使用如下命令:mysql>SETPASSWORD=PASSWORD('Admin2022!');MySQL版本5.7.6版本开始的用户可以使......
  • mysql进阶
    一存储引擎mysql存储引擎默认的是innoDB 1、innoDB 特点 2、myisam 3、memory 3个的区别主要看innodb 和myisam ......
  • 远端MySQL的总结
    目录远端MySQL的总结目前场景使用需求操作思路异常汇总本地navicat与远端MySQL修改远程授权登陆设置登录数据库命令修改host允许任何ip访问授权root用户进行远程登录启动本地Navicat连接navicat报错1045忘记数据库密码找到.ini修改.ini重启mysql进入MySQL客户端重设密码无my.......
  • Mysql SELECT 语句执行过程
    整个SELECT语句查询流程1、客户端/服务端通信协议(Connectors)Mysql客户端/服务端通讯协议是半双工的,这就意味着在任意时刻只能有一端能发送数据,要么是客户端向服务端发送数据,要么是服务端向客户端发送数据,这两个动作不能同时进行,一旦一端开始发送数据,另外一端要完整......
  • MySQL解决查询语句1111 - Invalid use of group function错误
    是因为mysql查询语句的字段当中有聚合函数,where条件中不能用聚合函数的计算值作为查询条件,否则会出现:>1111-Invaliduseofgroupfunction错误。可以使用having解决。补充:这里主要要清楚where和having的作用以及区别:“WHERE” 是一个约束声明,在查询数据库的结果返回之前对......