我很难弄清楚如何准确实现“如果未找到则插入”功能。考虑以下。
我们有一个名为artist
2 列的表,(name, id)
其中name
是唯一id
键,是串行主键。这是一个人为的例子,但它说明了我的问题:
SESSION A SESSION B
1. SELECT id FROM artist
WHERE name = 'Bob';
2. INSERT INTO artist (name)
VALUES ('Bob')
3. INSERT INTO artist (name)
VALUES ('Bob')
4. code that users 'Bob'
(e.g., a FK to Bob's ID)
5. ??? Bob already exists, but we
can't find it
4. COMMIT
Run Code Online (Sandbox Code Playgroud)
会话 B 开始尝试找到一个artist
叫 Bob 的人,但失败了。但是,会话 A 然后创建了 Bob。会话 B 尝试插入名为 Bob 的艺术家,但由于违反主键而失败。但这是我不明白的一点——如果我将操作 3 更改 …