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光盘.客户光盘.可选的发货地址