gpt4 book ai didi

mysql按顺序插入查找下一个

转载 作者:太空宇宙 更新时间:2023-11-03 12:27:29 25 4
gpt4 key购买 nike

抱歉,这个在标题中很难解释。

我有一个像这样的简单表格:

CREATE TABLE `categories` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(125) NOT NULL,
`desc` text NOT NULL,
`ordering` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
)

ordering 列通常在客户端中设置——也就是说,客户端可以拖动这些类别并重新排序,因此它不是 auto_incremented。

我的问题是,当我想使用直接 SQL 插入在客户端外部插入一行时,有没有办法在同一语句中快速获取 ordering 列的最大值?

类似于:

INSERT INTO `categories` (title, desc, ordering)
VALUES ('test title', 'description', (SELECT max(ordering) FROM `categories`)+1);

我已经尝试了很多关于这个主题的变体,但都没有成功。

最佳答案

让它起作用的诀窍是避免使用 VALUES 子句,而是使用 SELECT 作为 INSERT 的行源,

像这样:

INSERT INTO `categories` (title, desc, ordering)
SELECT 'test title', 'description', MAX(ordering)+1 FROM `categories`

注意:这可能适用于不允许并发插入的 MyISAM 表。但是对于其他允许并发插入的引擎,这种方法可能会“被设计破坏”。我认为不能保证同时运行的两个 INSERT 语句不会为排序列生成相同的值。

当类别表为空时,此设计也“被设计破坏”,因为 MAX(ordering) 将返回 NULL。但是 IFNULL 函数可以解决这个问题。

SELECT 'test title', 'description', IFNULL(MAX(ordering),0)+1 FROM `categories`

关于mysql按顺序插入查找下一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16951256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com