MySQL脚本实现:仅当表为空时批量插入数据的方法
嘿,这个需求其实挺常见的,MySQL里有几种简单的办法能实现你要的「只有表为空时才插入数据」的逻辑,我给你整理两种常用方案,你可以按需选:
方法一:用 NOT EXISTS 子查询(推荐)
这是最直观高效的方式,直接在插入语句里加判断:先检查表有没有数据,要是没有就执行插入。而且可以把你要插的三条数据合并成一条语句,比分开三次插入更高效,写法如下:
INSERT INTO `testType` (`name`) SELECT 'URL' UNION ALL SELECT 'xD' UNION ALL SELECT 'LOL' WHERE NOT EXISTS (SELECT 1 FROM `testType`);
简单解释下:
- 前面的
SELECT ... UNION ALL是把你要插入的三个值拼成一个临时的数据集 - 后面的
WHERE NOT EXISTS (...)会先去testType表里查有没有记录,要是子查询返回空(也就是表没数据),才会执行前面的插入操作
方法二:用 COUNT(*) 做判断
如果你更习惯类似「判断表长度为0」的逻辑,也可以用统计行数的方式实现,写法是:
INSERT INTO `testType` (`name`) SELECT 'URL' UNION ALL SELECT 'xD' UNION ALL SELECT 'LOL' WHERE (SELECT COUNT(*) FROM `testType`) = 0;
这个逻辑和上面差不多,先统计表里的总行数,等于0就执行插入。不过要注意,COUNT(*)需要扫描全表统计,要是表以后数据多了,效率会比NOT EXISTS低一点,但你现在是检查表为空的场景,两种都能用。
额外提一句:不管用哪种方法,只要表已经有数据了,再执行这条语句都不会有任何变化——不会报错,也不会重复插入数据,完全符合你的需求~
内容的提问来源于stack exchange,提问作者user9674353
相关产品推荐
相关产品推荐

