我需要在一个查询中使用select,insert,delete和update。
(我需要将旧表中的数据复制到new,然后删除旧的,然后更新另一个)。
插入并选择(复制功能我能够,但现在我有问题)
我有这个问题:
INSERT INTO news_n (id, data)
SELECT (id, data)
FROM news
WHERE id > 21
由于
答案 0 :(得分:6)
您无法在一个 查询 中完成所有操作,但您可以在一个 交易中完成所有操作 >如果您使用的是事务存储引擎(如InnoDB)。这可能是您想要的,但很难说只使用您在问题中提供的信息。
START TRANSACTION;
INSERT...;
DELETE...
UPDATE...;
COMMIT;
答案 1 :(得分:1)
MySQL
不支持MERGE
,因此您必须在两个查询中执行此操作:
INSERT
INTO news_n (id, data)
SELECT id, data
FROM news
WHERE id > 21
ON DUPLICATE KEY UPDATE
SET data = news.data
DELETE
FROM news_n
WHERE id NOT IN
(
SELECT id
FROM news
WHERE id > 21
)
,前提是您在两个表中都有PRIMARY KEY (id)
。
答案 2 :(得分:1)
在一个查询中,我认为不可能。
您可以尝试编写存储过程并使用触发器来实现
答案 3 :(得分:0)
您无法将Select / Update / etc组合到一个查询中。您必须为要完成的每个操作编写单独的查询。