Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL脚本和查询中的随机变量_Mysql_Sql - Fatal编程技术网

Mysql SQL脚本和查询中的随机变量

Mysql SQL脚本和查询中的随机变量,mysql,sql,Mysql,Sql,我开始编写一个sql脚本,试图为它创建一个过程,使用2个整数之间的随机变量创建一个插入查询 这就是我到目前为止所做的: DELIMITER $$ CREATE PROCEDURE REL9() BEGIN DECLARE k INT DEFAULT 1; DECLARE Random INT; DECLARE Upper INT DEFAULT 9999; DECLARE Lower INT DEFAULT 1; WHILE k < 20 DO SET Random =

我开始编写一个sql脚本,试图为它创建一个过程,使用2个整数之间的随机变量创建一个插入查询

这就是我到目前为止所做的:

DELIMITER $$
CREATE PROCEDURE REL9()
BEGIN
  DECLARE k INT DEFAULT 1;

DECLARE Random INT;
DECLARE Upper INT DEFAULT 9999;
DECLARE Lower INT DEFAULT 1;

  WHILE k < 20 DO
   SET Random = ROUND(((Upper - Lower -1) * RAND() + Lower), 0);
        INSERT INTO `sc_db`.`relations` (`idRelations`, `cdate`, `rel_type`, `port_cdom`, `host_cdom`, `dom_idObjects`, `cdom_idObjects`, `rel_name`) VALUES (NULL, '5555', 'Transitive', 'localhost', 'localhost', 'Random', 'Random', 'IS_IN');

    SET k = k + 1;
  END WHILE;
END$$
DELIMITER ;
分隔符$$
创建过程REL9()
开始
声明k INT默认值为1;
声明随机整数;
声明上限INT默认值9999;
声明下限INT默认值为1;
当k<20时
设置Random=ROUND(((上-下-1)*RAND()+下),0);
插入'sc_db`.'relations`、'cdate`、'rel_type`、'port_cdom`、'host_cdom`、'dom_idObjects`、'cdom_idObjects`、'rel_name`)值(NULL、'5555、'Transitive','localhost','Random','Random','IS_IN');
设置k=k+1;
结束时;
结束$$
定界符;
调用过程时,我得到一个外键错误,很可能是由于未正确设置或调用随机变量。这些“随机”键(1到9999)确实存在于数据库中。 如何在插入值中包含变量?我在网上搜索过,一些结果显示变量的前缀可以是@,但出于某种原因,我得到了这样的错误


非常感谢您的帮助。

您不是在插入随机值,而是在插入一个包含单词
random
的字符串:

[...snip...] 'localhost', 'Random', 'Random', 'IS_IN');
                          ^------^--^------^---
带引号的字符串:带有字符
R
a
n
等的字符串。

不带引号:如果希望每个插入都有不同的随机数,则使用名为
Random
的变量

DELIMITER $$
CREATE PROCEDURE REL9()
BEGIN
  DECLARE @k INT DEFAULT 1;

DECLARE @Random INT;
DECLARE @Upper INT DEFAULT 9999;
DECLARE @Lower INT DEFAULT 1;

  WHILE k < 20 DO
        SET @Random = ROUND(((@Upper - @Lower -1) * RAND() + @Lower), 0);

        INSERT INTO `sc_db`.`relations` (`idRelations`, `cdate`, `rel_type`, `port_cdom`, `host_cdom`, `dom_idObjects`, `cdom_idObjects`, `rel_name`) VALUES (NULL, '5555', 'Transitive', 'localhost', 'localhost', @Random, @Random, 'IS_IN');

    SET @k = @k + 1; 
#Or @k -= 1;
  END WHILE;
END$$
DELIMITER ;
分隔符$$
创建过程REL9()
开始
声明@k INT默认值为1;
声明@Random INT;
声明@Upper INT DEFAULT 9999;
声明@Lower INT DEFAULT 1;
当k<20时
设置@Random=ROUND(((@Upper-@Lower-1)*RAND()+@Lower),0);
插入'sc_db`.'relations`、'cdate`、'rel_type`、'port_cdom`、'host_cdom`、'dom_idObjects`、'cdom_idObjects`、'rel_name`)值(NULL、'5555、'Transitive','localhost','localhost','Random','IS_IN');
设置@k=@k+1;
#或@k-=1;
结束时;
结束$$
定界符;
还有,那些是什么
dom\u-idObjects
cdom\u-idObjects

如果“@”不起作用,则说明您正在使用其他编译器。你能提供更多的细节吗?

这不完全是解决方案确切地说,它为什么不是解决方案?我想它应该是这么简单。我刚开始学这个。谢谢我一直认为MySQL格式化需要@作为变量的前缀。就像Marc提到的,当把一个字符串放在’之间时,它被解释为一个字符串,而不是一个变量。你的代码甚至可以编译吗?也。。您是否试图向所有20个条目添加不同的随机数??如果是这样的话,你就有点不对劲了。是的,那是复印时的一个错误。我的错。编译器仍然不接受变量名中的@。现在我正在使用WindowsV4.1.14中的phpmyadmin来测试脚本。dom_idObjects、cdom_idObjects是另一个表的外键,我已经有10.000条记录。很好,这些idObjects是FK。在这种情况下,为什么要将它们分配给随机变量?如果编译器无法识别'@',只需删除'@'符号并尝试运行它即可。