如果字段值为空,则在 MySQL 中插入一条新记录,同时在不同字段中添加 ID+1
Insert a new record in MySQL while adding ID+1 in a different field if the value of the field is null
我正在修改我的程序,以允许用户在我的 table 之一的数据库中为他们的记录定义一个习惯代码。因此,我在数据库中添加了一个新列,以保留用户定义的每个项目的 "local code",而不是项目的 "universal code",后者实际上是记录的 ID我的 table.
所以,我想写一个 SQL 查询,当它插入一条新记录时,如果 'local_code' 为空(我可以通过 PHP 来确定,但我也向 SQL 解决方案开放),它会在 'local_code' 中插入项目的 ID。像这样:
INSERT INTO items (`field_1`, `local_code`, `field_2`, ...)
VALUES ('blah blah blah', PREVIOUS_RECORD_ID + 1, 'blah blah blah', ...);
所以,基本上,我的问题是如何在没有并发问题的情况下找到 PREVIOUS_RECORD_ID。我不能在这里使用 LAST_INSERT_ID() 并且如果两个用户同时添加新记录,使用 SELECT max(id) FROM items 会导致并发问题。
如果有人能想出一个使用 MySQL 触发器的解决方案(比如在插入新记录后更新 local_code
为空的触发器),那也很好。
提前致谢。
示例:
假设我的数据库有三列:id、code、name
id | code | name
1 AAA blah blah blah1
2 BBB blah blah blah2
现在我想插入一条新记录。如果用户没有输入代码,我希望我的 SQL 查询执行此操作
INSERT INTO items (`code`, `name`)
VALUES (3, 'blah blah blah3', ...);
但是如果用户输入了 "CCC" 作为代码,它应该工作如下:
INSERT INTO items (`code`, `name`)
VALUES ("CCC", 'blah blah blah3', ...);
我可以使用 PHP 来确定代码是否为空,以确定哪个 SQL 查询应该是 运行。所以,我真正的问题是代码为 NULL 的第一种情况。此外,如果有人有一个 SQL 解决方案来处理这两种情况,那就太棒了。
据我了解:
- 我们关注 2 列,我将它们命名为 universal_code 和 local_code
- universal_code 是一个 auto_increment 并且永远是 previous_insert + 1
- 用户何时提交数据
universal_code = auto_increment
if local_code is not null
local_code = submitted local_code value
else
local_code should be same as universal_code
我会做什么:
使用两个查询进行此操作以避免并发问题。插入然后更新
- 插入空白行 local_code 和 return 新插入 universal_code
- 检查 local_code。如果 local_code 为空,则使用 universal_code 更新行,否则使用提交的 local_code 值
更新行
我正在修改我的程序,以允许用户在我的 table 之一的数据库中为他们的记录定义一个习惯代码。因此,我在数据库中添加了一个新列,以保留用户定义的每个项目的 "local code",而不是项目的 "universal code",后者实际上是记录的 ID我的 table.
所以,我想写一个 SQL 查询,当它插入一条新记录时,如果 'local_code' 为空(我可以通过 PHP 来确定,但我也向 SQL 解决方案开放),它会在 'local_code' 中插入项目的 ID。像这样:
INSERT INTO items (`field_1`, `local_code`, `field_2`, ...)
VALUES ('blah blah blah', PREVIOUS_RECORD_ID + 1, 'blah blah blah', ...);
所以,基本上,我的问题是如何在没有并发问题的情况下找到 PREVIOUS_RECORD_ID。我不能在这里使用 LAST_INSERT_ID() 并且如果两个用户同时添加新记录,使用 SELECT max(id) FROM items 会导致并发问题。
如果有人能想出一个使用 MySQL 触发器的解决方案(比如在插入新记录后更新 local_code
为空的触发器),那也很好。
提前致谢。
示例:
假设我的数据库有三列:id、code、name
id | code | name
1 AAA blah blah blah1
2 BBB blah blah blah2
现在我想插入一条新记录。如果用户没有输入代码,我希望我的 SQL 查询执行此操作
INSERT INTO items (`code`, `name`)
VALUES (3, 'blah blah blah3', ...);
但是如果用户输入了 "CCC" 作为代码,它应该工作如下:
INSERT INTO items (`code`, `name`)
VALUES ("CCC", 'blah blah blah3', ...);
我可以使用 PHP 来确定代码是否为空,以确定哪个 SQL 查询应该是 运行。所以,我真正的问题是代码为 NULL 的第一种情况。此外,如果有人有一个 SQL 解决方案来处理这两种情况,那就太棒了。
据我了解:
- 我们关注 2 列,我将它们命名为 universal_code 和 local_code
- universal_code 是一个 auto_increment 并且永远是 previous_insert + 1
- 用户何时提交数据
universal_code = auto_increment
if local_code is not null
local_code = submitted local_code value
else
local_code should be same as universal_code
我会做什么:
使用两个查询进行此操作以避免并发问题。插入然后更新
- 插入空白行 local_code 和 return 新插入 universal_code
- 检查 local_code。如果 local_code 为空,则使用 universal_code 更新行,否则使用提交的 local_code 值 更新行