有人可以指导我正确指导以下查询吗?它不能在phpMyAdmin下工作。
INSERT INTO `Setting`
(`id`, `type`, `name`, `value`, `parentId`, `createdAt`, `updatedAt`, `createdById`, `updatedById`)
VALUES
(NULL, 0, 'howItWorks', 'Some URL', NULL, NULL, NULL, -1, NULL),
(NULL, 0, 'howItWorksThumb', 'Some URL', (SELECT id FROM Setting WHERE name = 'howItWorks'), NULL, NULL, -1, NULL);
同样的查询在PostgreSQL下工作。
我收到的错误:#1093 - 您无法在FROM子句中为更新指定目标表'Setting'
问题是与LAST_INSERT_ID()解决方案相关的已解释问题的更新:
使用LAST_INSERT_ID()解决方案;子行应该在父行之后立即插入。
我想在插入父行后不立即获取子行的parentId。解决方案是什么?
如果我想为同一父行添加两个孩子呢?
答案 0 :(得分:1)
MySQL不允许您在同一个表中的子查询中SELECT
进入主查询中。因此,您需要将其拆分为两个INSERT
个查询:
您可以使用LAST_INSERT_ID()
获取在上一个INSERT
中分配的自动增量ID,而不是使用子查询。
INSERT INTO `Setting` (`id`, `type`, `name`, `value`, `parentId`, `createdAt`, `updatedAt`, `createdById`, `updatedById`)
VALUES (NULL, 0, 'howItWorks', 'Some URL', NULL, NULL, NULL, -1, NULL);
INSERT INTO `Setting` (`id`, `type`, `name`, `value`, `parentId`, `createdAt`, `updatedAt`, `createdById`, `updatedById`)
VALUES (NULL, 0, 'howItWorksThumb', 'Some URL', LAST_INSERT_ID(), NULL, NULL, -1, NULL);
不幸的是,使用LAST_INSERT_ID()
仍然不允许您将它们组合到单个查询中,因为它在执行任何插入之前调用该函数。
如果您稍后再进行第二次插入,则可以使用正常的INSERT ... SELECT ...
执行此操作:
INSERT INTO `Setting` (`id`, `type`, `name`, `value`, `parentId`, `createdAt`, `updatedAt`, `createdById`, `updatedById`)
SELECT NULL, 0, 'howItWorksThumb', 'Some URL', id, NULL, NULL, -1, NULL
FROM Setting
WHERE name = 'howItWorks'
答案 1 :(得分:0)
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, type TINYINT NOT NULL
, name VARCHAR(100) NOT NULL
, value VARCHAR(100) NOT NULL
, parentId INT NULL
, createdById INT NOT NULL
);
将以下内容绑定到事务中是明智的。
INSERT INTO my_table
( type
, name
, value
, createdById
)
VALUES
( 0
, 'howItWorks'
, 'Some URL'
, -1
);
INSERT INTO my_table
( type
, name
, value
, parentId
, createdById
)
SELECT 0
, 'howItWorksThumb'
, 'Some URL'
, LAST_INSERT_ID()
, -1
FROM my_table;
交易结束
SELECT * FROM my_table;
+----+------+-----------------+----------+----------+-------------+
| id | type | name | value | parentId | createdById |
+----+------+-----------------+----------+----------+-------------+
| 1 | 0 | howItWorks | Some URL | NULL | -1 |
| 2 | 0 | howItWorksThumb | Some URL | 1 | -1 |
+----+------+-----------------+----------+----------+-------------+
答案 2 :(得分:-1)
查看您创建的表的数据类型。并在您创建的字段上另见DEFAULT。如果ID为NULL,则DEFAULT = auto_increment。