在MYSQL中UPDATE/INSERT INTO/DELETE FROM表
问题描述:
我在MYSQL数据库TABLE1中有一个表,COLA,COLB,COLC和(COLA,COLB)列是复合主键。这样在MYSQL中UPDATE/INSERT INTO/DELETE FROM表
-----------------------
| COLA | COLB | COLC |
-----------------------
| A | B | C |
-----------------------
| A | Q | D |
-----------------------
| A | E | J |
-----------------------
| B | W | P |
-----------------------
东西也有后台脚本,将数据传送给Java程序,应在下列条件下更新表:
- 如果新值有主键的任何一双新然后INSERT新行插入表中。
- 如果新值有任何公共对主键然后UPDATE该表。
- DELETE所有其他行其中COLA值匹配与新值。
如果新vaues是( 'A', 'B', 'L'),( 'A', 'Y', 'd'),( 'A', 'Q', 'Z')那么就应该:
- UPDATE 和第二行。
- 插入新行('A','Y','D')。
- 删除只有第3行。
所以表应该看起来像
-----------------------
| COLA | COLB | COLC |
-----------------------
| A | B | L |
-----------------------
| A | Q | Z |
-----------------------
| B | W | P |
-----------------------
| A | Y | D |
-----------------------
要实现这一点,我正在运行两个查询:
INSERT INTO TABLE1 VALUES('A','B','L'),('A','Y','D'),('A','Q','Z') ON DUPLICATE KEY UPDATE COLC=VALUES(COLC);
这是工作,我想要的方式。但是,当我试图删除我得到其他行成问题,我想做的是:
DELETE FROM TABLE1 WHERE NOT ((COLA='A' AND COLB='B') OR (COLA='A' AND COLB='Y') OR (COLA='A' AND COLB='Q'));
但它不工作。因为它也会删除最后一行。 所以
- 如何实现查询?
- 它可以被分成一个查询?
感谢提前:)
答
我得到的回答第一个问题。查询应该是
DELETE FROM TABLE1 WHERE COLA='A' AND NOT ((COLA='A' AND COLB='B') OR (COLA='A' AND COLB='Y') OR (COLA='A' AND COLB='Q'));
+0
这似乎没有很大的可扩展性:-( – Strawberry
+0
请分享如何改进。 – Sushovan
从单个查询中插入(或插入)和删除是不可能的。 –
谢谢。有没有更好的方法? – Sushovan
您可以继续使用当前的两种查询方法。一些好心的MySQL人员会发表一个答案。 –