因为项目需要使用mysql,之前不太用,一直用的是sqlserver2005
所以写的语法很多都不对
查了很久没明白
在sqlserver中 if not exists (select * from TABLE2) insert into TABLE(XXXX) values(XXXX)
转换成mysql的语法要怎么去写
还有
怎么样能够正确的使用exists
说说你的见解
但不要仅仅只是给个转帖的地址
所以写的语法很多都不对
查了很久没明白
在sqlserver中 if not exists (select * from TABLE2) insert into TABLE(XXXX) values(XXXX)
转换成mysql的语法要怎么去写
还有
怎么样能够正确的使用exists
说说你的见解
但不要仅仅只是给个转帖的地址
解决方案 »
- 求示例数据库
- mysql make问题
- vc 调用 libmysql 能 通过http proxy 访问远程mysql数据库吗
- 定义数据库时用 integer(5) 比 integer(10) 省空间吗?
- 关于mysql的一个问题,希望高手给我解决下
- mysql中为变量赋值
- 在數據庫中建了一個用戶,怎樣操作才能使得它只可以對裡面其中一個數據庫只有select 權限呢?
- 向数据库中插入数据遇到的问题,请指教一下,谢谢.
- 如何检查服务器数据大小,如何下载数据库内容?
- INSERT INTO pre_forum_post_tableid SET `pid`=''; #分表
- 如何学习数据库知识
- mysql 两个大数据量表连接更新数据问题
SQL语句中:
SELECT *,IF(NOT EXISTS (SELECT 1 FROM `goods` WHERE gid=2),2,1 ) FROM `goods`
SP中:
DELIMITER $$
CREATE PROCEDURE dd()
BEGIN
IF NOT EXISTS (SELECT * FROM TABLE2) THEN
INSERT INTO `TABLE`(XXXX) VALUES(XXXX);
END IF;
END$$
DELIMITER ;
where not exists (select * from TABLE2)
我也是使用了同样的方法
但是报语法错误了啊
mysql5.5的
INSERT INTO `TABLE`(XXXX) SELECT DISTINCT XXXX FROM TABLE2
WHERE NOT EXISTS (SELECT * FROM TABLE2)
注意TABLE为保留字,加`,在5.5下测试通过
为了避免一些不必要的麻烦
我真实的表名字都是带有下划线的
这个问题本来问的时候是由于需要进行不重复插入引起的
以前用过mysql
不过是几年前的事情了
现在需要再用下
可是sql却用不起来了
我那边对于table2进行不重复插入失败了....
不知道还有其他什么原因不
你用什么客户端执行的这些语句
截图我看看呢
insert into Tt(XXXX) select distinct XXXX from Tt2
where not exists (select 1 from Tt2 where id=...)贴建表及插入记录的SQL,及要求结果出来看看
如果表中有唯一索引
考虑 INSERT IGNORE
一个id,一些字段,其中id是主键
要求只有一个
你写一个可以防止重复添加的sql语句
我不断的执行这个语句不报错,并且数据库中该条数据如果没有则被insert进来
如果已经存在了则无动作执行
INSERT IGNORE INTO tt(id) VALUES(1);
我是测试通过的,一直让你贴建表及插入记录的SQL,及要求结果出来看看你做了吗?其它人怎么知道你的要求?
不需要建表语句
如果是主键,插入重复值,如果成功插入了重复值,那也肯定是会报错的现在是
abcd等几个字段
其中的x是主键
插入的时候,x字段是通过程序生成的UUID
需要进行判断的是
如果存在a=1,b=2,c=3,b=4的记录则不插入
否则插入一个a=1,b=2,c=3,b=4
insert ignore tablename (id,a,b,c,d) values ('UUID保证不会重复',1,2,3,4)
已经用了ignore并且成功了
不知道这样写是不是有其他的问题(貌似你不是技术人员吧....)
INSERT IGNORE要求主键 OR 唯一索引,到此个回答,你才讲,要插入4个字段
insert tablename (id,a,b,c,d) select distinct 'UUID保证不会重复',1,2,3,4 from tt
where not exists(select 1 from tt where a=1 and b=2 and c=3 and b=4)你搜索一下我回答的问题,就知道我是否是技术人员
你测试过INSERT IGNORE没有?如果有重复值,是不会插入的,也不会报错。有
warning
主键的生成方式不需要你操心
真正需要操心的是其他的字段
例如如果你要在数据库中进行初始化某个表
那么就很需要这样的不重复插入的句子了字段的内容和数量一点意义都没有,都只是一种形式,
只是要抽象为某种模式去思考问题
于是你给出的那个解答
insert tablename (id,a,b,c,d) select distinct 'UUID保证不会重复',1,2,3,4 from tt
where not exists(select 1 from tt where a=1 and b=2 and c=3 and b=4)
从语法的角度我是理解的
也懂得的
但是有个问题就是
例如初始化某个表的时候
sqlserver会这么写
if not exists(select * from TABLE where XX1 = XX1 and XX2 = XX2 ......)
insert into TABLE(XX1,XX2....)
values (XX1,XX2.....)
现在的mysql使用的对应的语句是
INSERT IGNORE INTO tt(主键,XX1,XX2...) VALUES(主键值,XX1,XX2....);
这样的句子不报错
但是不知道是不是有语法或者语义上的错误
主键是唯一的,用INSERT IGNORE不会报错,也不会插入记录