Mysql 我的SQL语句有问题吗
它告诉我我这里有个错误:Mysql 我的SQL语句有问题吗,mysql,sql,Mysql,Sql,它告诉我我这里有个错误: if not exists (select * from ARCUS where CUSTOMER_NO = a) begin insert into ARCUS (CUSTOMER_NO) values (a) end 假设此代码位于存储过程中,则在INSERT查询后缺少分号 if not exists (select * from ARCUS where CUSTOMER_NO = a) begin insert into ARCUS (C
if not exists (select * from ARCUS where CUSTOMER_NO = a)
begin
insert into ARCUS (CUSTOMER_NO) values (a)
end
假设此代码位于存储过程中,则在
INSERT
查询后缺少分号
if not exists (select * from ARCUS where CUSTOMER_NO = a)
begin
insert into ARCUS (CUSTOMER_NO) values (a);
end
但是,如果CUSTOMER\u NO
是表中的唯一键,则可以通过单个查询执行此操作:
insert ignore into ARCUS (CUSTOMER_NO) values (a);
这样做的好处是它不必在过程中。此外,作为变体,您可以执行以下操作:
insert into ARCUS (CUSTOMER_NO)
select 'a'
where not exists (select 1 from ARCUS where CUSTOMER_NO = 'a');
@巴尔马有很好的解决方案,但我不能+1答案 只需在“客户号”上添加一个唯一的键 当您使用mysql时,还应该用小写字母书写字段和tbl名称,以提高可读性
ALTER TABLE `arcus` ADD UNIQUE INDEX `unique_customer_no` (`customer_no`);
然后做:
INSERT IGNORE INTO `arcus` SET `customer_no` = 'a';
您只能在存储过程中而不是在查询中使用
IF
和BEGIN
语句。CUSTOMER_NO=a-可能需要引号。我怀疑a
是过程的一个参数,而不是一个文本,因此不应该引用它。实际上a是一个文本,我只是用短字符串进行测试。@skirsch00-如果是的话,然后,正如Barmar所注意到的,您需要引号。只需添加一个唯一的键-如果它能通过更改控制那么简单的话..看起来这可能是表的主键。哪个更改?在示例中,如果不存在,他尝试插入。。。。如果唯一键值allready存在,则将忽略插入行。主服务器是唯一的,您只需添加一个插入信号我已将其更新为“将忽略插入ARCUS(公司CD,客户号)值('CU','A');”现在它不会给出错误,但也不会执行任何操作。客户号
的数据类型是什么?如果它是INT
,'a'
不是它的有效值。这就是为什么如果你花时间发布一个有代表性的模式,数据库问题通常更容易回答的原因<代码>显示创建表有助于为现有表生成其中一个表,并且可以进行编辑以删除不相关的列。如果此列必须是唯一的,则使用unique
约束来执行此操作,而不是在insert上进行测试。我忘了需要一个键,但现在我遇到另一个错误。将忽略插入ARCUS(公司光盘、客户光盘、记录光盘、公司光盘、客户光盘、可选光盘)值(“CU”、“A”、“CUA”);它应该是(公司光盘,客户光盘,记录密钥)
,然后去掉多余的.COMPANY光盘.CUSTOMER光盘.客户光盘.可选的发货地址
。