我需要允许应用程序将数据插入MySQL数据库。由于各种原因,我无法以任何方式验证应用程序的用户,因此我考虑创建一个具有只写权限的用户。
我遇到的问题是某些表格中的重复值,我不想允许这样做。例如,有一个包含主键ID和SHA1列的表。如果应用程序想要向表中插入一些内容但SHA1已经存在,则不会发生任何事情(不应报告错误),但LAST_INSERT_ID()
应返回具有此特定SHA1的行的ID。
我看了INSERT ON DUPLICATE KEY
和BEFORE INSERT TRIGGER
,但我还是不确定如何做到这一点。
答案 0 :(得分:1)
首先,您需要通过向其添加唯一索引来使sha1
列唯一。
ALTER TABLE tbl ADD UNIQUE INDEX un_in (sha1);
然后你可以做这个查询
INSERT INTO tbl (sha1)
VALUES ('sha1_unique_value')
ON DUPLICATE KEY UPDATE
key_ID = LAST_INSERT_ID(key_ID);
此查询将尝试首先插入' sha1_unique_value'如果密钥已存在,则进入表中。然后它将kay_ID列设置为上次更新的id,返回您要查找的值。