我知道这个问题已经回答了很多时间,但我真的想知道这是如何正确的行为,我与文件,但有些东西仍然缺少。。。
我有一个id为的表,但我没有使用id进行插入,也没有任何索引或唯一键,对此我没有任何计划:如果我必须解决这个问题,
我写下以下内容:
insert into mytable(name,details,industry,attachments) values('abc','xyz',1,'BlobImage')
ON DUPLICATE KEY UPDATE [what should be here]
我不知道该项目的主键被插入,所以它会自动判断或如何?
1条答案
按热度按时间oaxa6hgo1#
我可以看到关于复制密钥更新的工作原理有一些混乱,所以我会尽力解释。
mysql对复制没有任何问题:
在数据库服务器级别避免重复数据是您需要选择的可选功能。上面的例子还说明了mysql根本不需要主键(或者重要的键)。所有这些都是系统提供的工具,您可以使用它们来完成任务:帮助实现标准化设计、提高性能等等。
直觉可以暗示,一次又一次地拥有相同的数据不可能仅仅是正确的。好吧,这取决于你的数据意味着什么。例如,这很可能是错误的:
……但这很好(但基本上是相同的设计):
mysql> create table user_tag (
-> username varchar(20),
-> tag varchar(20),
-> tag_count int(10) default 1,
-> unique index unique_user_tag_combination (username, tag)
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> insert into user_tag (username, tag) values ('jim', 'sql');
Query OK, 1 row affected (0.00 sec)
mysql> insert into user_tag (username, tag) values ('jim', 'sql');
ERROR 1062 (23000): Duplicate entry 'jim-sql' for key 'unique_user_tag_combination'
mysql> insert into user_tag (username, tag) values ('jim', 'sql') on duplicate key update tag_count = tag_count + 1;
Query OK, 2 rows affected (0.00 sec)
mysql> insert into user_tag (username, tag) values ('jim', 'sql') on duplicate key update tag_count = tag_count + 1;
Query OK, 2 rows affected (0.00 sec)
mysql> select * from user_tag;
+----------+------+-----------+
| username | tag | tag_count |
+----------+------+-----------+
| jim | sql | 3 |
+----------+------+-----------+
1 row in set (0.00 sec)