如何避免在MySQL中重复的随机ID选择?

主义

我需要id从表中选择两个唯一的随机数nodes,并将其插入表的parent列中edges但是问题在于它们有时会重复,并且需要它们始终保持不同,请问如何避免这种情况?

编码:

const mysql = require('mysql');

const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'DAGtest3'
});

connection.connect((err) => {
  if (err) throw err;
  console.log('Database Connected!');
});

var a = "INSERT INTO `edges` (`parent`, `child`) VALUES ((SELECT `id` FROM `nodes` ORDER BY rand() LIMIT 1 ) , (4) )";

connection.query(a, (err, res) => {
    if(err) throw err;
    console.log("1 edge inserted to previous data");
});
            
var b = "INSERT INTO `edges` (`parent`, `child`) VALUES ((SELECT `id` FROM `nodes` ORDER BY rand() LIMIT 1) , (4) )";
connection.query(b, (err, res) => {
    if(err) throw err;
    console.log("Another edge inserted to previous data");   
});

表的代码:

CREATE TABLE nodes (
    id INTEGER NOT NULL AUTO_INCREMENT,
    sensorvalue VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id)
);
 
CREATE TABLE edges (
    parent INTEGER NOT NULL REFERENCES nodes(id) ON UPDATE CASCADE ON DELETE CASCADE,
    child INTEGER NOT NULL REFERENCES nodes(id) ON UPDATE CASCADE ON DELETE CASCADE,
    PRIMARY KEY (parent, child)
);
 
CREATE INDEX parent_idx ON edges (parent);
CREATE INDEX child_idx ON edges (child);

提前致谢。

马特·摩根(Matt Morgan)

您不希望有两个连续的随机选择,因为第二个随机选择返回与第一个相同的行的可能性不为零。我认为您应该一次获取两行:

INSERT INTO `edges` (`parent`, `child`) SELECT `id`, 4 FROM `nodes` ORDER BY rand() LIMIT 2;

因此,您的代码将只执行一个查询,而不是两个:

var a = "INSERT INTO `edges` (`parent`, `child`) SELECT `id`, 4 FROM `nodes` ORDER BY rand() LIMIT 2";

connection.query(a, (err, res) => {
    if(err) throw err;
    console.log("2 edges inserted to previous data");
});

当我在本地设置数据库并运行上面的代码时,插入成功:

Database Connected!
2 edges inserted to previous data

当我在控制台中查询数据库时,我得到:

mysql> select * from edges;
+--------+-------+
| parent | child |
+--------+-------+
|      2 |     4 |
|      3 |     4 |
+--------+-------+
2 rows in set (0.00 sec)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

避免在php中的随机数组输出中重复

来自分类Dev

如何创建具有多个值的obj并随机选择值,而无需在jQuery / JS中重复

来自分类Dev

避免在mysql插入中重复

来自分类Dev

Python | 避免从列表中随机选择先前的值

来自分类Dev

避免在MySql中重复。

来自分类Dev

从数组中随机选择而无需重复

来自分类Dev

如何避免在Shadow DOM中重复样式?

来自分类Dev

如何避免在多个角度UI选择中重复

来自分类Dev

如何通过SQLite中的concret _id正确选择随机行

来自分类Dev

如何避免在MySQL中插入重复项?

来自分类Dev

从随机选择避免重复

来自分类Dev

我在我的js中调用随机颜色,但会避免选择

来自分类Dev

Javascript-从数组中随机选择时如何防止重复

来自分类Dev

从MySQL中随机选择数据

来自分类Dev

如何避免重复在C中随机化的数字

来自分类Dev

避免在MySql中重复。

来自分类Dev

如何避免在选择查询选项上重复选择?

来自分类Dev

从数组中随机选择而无需重复

来自分类Dev

如何避免MySQL子查询中的列重复?

来自分类Dev

如何在Java中不重复显示数组中随机选择的字符串

来自分类Dev

Bash:如何避免随机列表重复结果?

来自分类Dev

如何避免MySQL中的表格重复

来自分类Dev

MySQL如何避免选择请求中的数据重复

来自分类Dev

MySQL 和 UNIQUE 列:如何避免重复?

来自分类Dev

如何避免选择中的重复字符串?

来自分类Dev

如何选择重复的 DIV ID

来自分类Dev

如何避免mysql查询中的重复子句

来自分类Dev

如何避免 MySQL 查询结果重复?

来自分类Dev

提高选择然后插入的性能以避免重复记录(在mysql和php中)?

Related 相关文章

热门标签

归档