mysql实现不设置唯一键对某字段唯一性插入

疑问

当一张表某个字段不适合建唯一键,且在某个插入场景里需要该字段值不存在时才插入,我们该如何写sql呢?
今天我们不用锁表,用一行代码搞定它

实现

我们表User 为例
字段 id, name, tmp

SQL:

INSERT INTO User(name) SELECT '张三' FROM DUAL WHERE NOT EXISTS(SELECT name FROM User WHERE name = '张三')

原子性

这里你有没有一丝疑问,子查询到插入的这个过程是不是原子性的呢?
我们实验一下:


image

事实证明,在上述语句中,查询到插入的过程是加锁的。查询到插入的过程是事务操作,其实,所有子查询也都是如此

本文由【希希大队长】原创

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容