当我在用户表中插入新记录时,首先检查电子邮件和昵称尚未添加。另一个同时注册相同数据的用户有可能是我的错误结果吗?澄清:策略查询执行
连接1:
> SELECT * FROM account WHERE username = 'test';
空集(0.00秒)
连接2:
> SELECT * FROM account WHERE username = 'test';
空集(0.00秒)
> INSERT INTO account(username) VALUES ('test');
查询行,1行受影响(0.01秒)
连接1:
> INSERT INTO account(username) VALUES ('test');
错误。重复密钥
我想知道的是,如果MySQL以这种方式工作,通过在查询时运行查询以及使用最佳实践。 我注意到在转换过程中,其他连接所做的更改不可见。为什么?您可以在转换之外使用SELECT ... FOR UPDATE?大量使用外键来确保数据完整性是一种推荐的做法?
编辑: 换句话说。忽略这个愚蠢的例子。我想谁登记下一个用户有一个年龄比所有那些已经
> SELECT MAX (age) FROM account;
[...检查,如果用户的年龄较高...]
> INSERT INTO accounts (age) VALUES ('$ var');
更大怎样确保有两个用户在同一个野外阵营有风险吗?
他已经有一个唯一索引:“*错误重复键*” – 2011-04-17 13:53:47
@ypercube:是的,这是一个最好的做法反正)) – zerkms 2011-04-17 13:58:52