插入mysql数据库,如果记录已存在,则更新
如何插入到 mysql 数据库,如果记录已存在,则更新...我知道此页面上有一个解决方案: http://dev.mysql.com/doc/ refman/5.1/en/insert-on-duplicate.html
sib_table
+=======================================================+
| sib_id | std_id | sib_name | sib_sex | sib_age |
+=======================================================+
| 1 | 77 | Sajjad | m | 5/17/1990 |
| 1 | 77 | Farah | f | 9/14/1980 |
| 1 | 77 | Bilal | m | 1/10/1995 |
+=======================================================+
如果我想向该表添加另一个同级表,sql 会是什么。
INSERT INTO sib_table
(std_id,sib_name,sib_sex,sib_age)
VALUES ('77','Sajjad','m','1/5/2010')
ON DUPLICATE KEY
UPDATE id = LAST_INSERT_ID(id), c = 3;
INSERT INTO sib_table
(std_id,sib_name,sib_sex,sib_age)
VALUES
('77','Aamna','f','1/27/2005')
ON DUPLICATE KEY
UPDATE id = LAST_INSERT_ID(id), c = 3;
Possible Duplicate:
How do I update if exists, insert if not (aka upsert or merge) in MySQL?
how to insert into mysql database, if records already exists, then update...I know there is a solution on this page:
http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html
sib_table
+=======================================================+
| sib_id | std_id | sib_name | sib_sex | sib_age |
+=======================================================+
| 1 | 77 | Sajjad | m | 5/17/1990 |
| 1 | 77 | Farah | f | 9/14/1980 |
| 1 | 77 | Bilal | m | 1/10/1995 |
+=======================================================+
What sql would be if I want to add anther sibling to this table.
INSERT INTO sib_table
(std_id,sib_name,sib_sex,sib_age)
VALUES ('77','Sajjad','m','1/5/2010')
ON DUPLICATE KEY
UPDATE id = LAST_INSERT_ID(id), c = 3;
INSERT INTO sib_table
(std_id,sib_name,sib_sex,sib_age)
VALUES
('77','Aamna','f','1/27/2005')
ON DUPLICATE KEY
UPDATE id = LAST_INSERT_ID(id), c = 3;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您已经很接近了,但您需要像对待
UPDATE
语句一样对待ON DUPLICATE KEY
子句。这意味着您需要设置一个唯一的密钥,以便尝试执行以下操作:...只能一次。然后添加
ON DUPLICATE KEY UPDATE
子句来更改其余字段(即不属于键的字段)以进行匹配。因此,举例来说,假设我正确读取了表结构,如果您在
std_id
和sib_name
列上放置唯一的复合键,这将确保您无法添加两个同名的兄弟姐妹。 这意味着当您像这样添加另一个时:...它将执行以下两件事之一:
这种结构比 MySQL 的 REPLACE 更强大,因为它允许您对冲突行执行不同的操作,而不仅仅是用您尝试插入的内容覆盖它。当然,大多数时候 REPLACE 的功能才是真正想要的。但最好了解更通用的说法。
You're close, but you need to treat the
ON DUPLICATE KEY
clause just like anUPDATE
statement. That means you need to setup a unique key so that trying to do:... will only work once. Then you add the
ON DUPLICATE KEY UPDATE
clause to change the rest of the fields (i.e. the ones that aren't part of the key) to match.So, for example, assuming I read the table structure correctly, if you put a unique composite key on the columns
std_id
andsib_name
, this will ensure that you can't add two siblings of the same name. And that means that when you go to add another like this:... it will do one of two things:
This structure is more powerful than MySQL's
REPLACE
because it lets you do something different to the conflicting row than merely overwrite it with what you tried to insert. Of course, most of the time the functionality ofREPLACE
is what is actually wanted. But it is better to know the more generic statement.请尝试以下操作:
Try the following:
检查案例中的行数:
check number of rows in a case: