Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql IF存在时出错()_Mysql_Sql_Relational Database - Fatal编程技术网

Mysql IF存在时出错()

Mysql IF存在时出错(),mysql,sql,relational-database,Mysql,Sql,Relational Database,错误:如果第1行或其附近出现语法错误:如果不存在,请选择1 从name='Iphone1'A 有人能帮我理解我做错了什么吗?MySQL只支持编程块中的IF语句—存储过程、函数和触发器。因此,你不能用那种方式做你想做的事 相反,您可以只编写一个查询: IF NOT EXISTS (SELECT 1 FROM Products WHERE name='Iphone1' AND manufacturer='appl') THEN INSERT INTO Products(product_i

错误:如果第1行或其附近出现语法错误:如果不存在,请选择1 从name='Iphone1'A

有人能帮我理解我做错了什么吗?

MySQL只支持编程块中的IF语句—存储过程、函数和触发器。因此,你不能用那种方式做你想做的事

相反,您可以只编写一个查询:

IF NOT EXISTS (SELECT 1 FROM Products WHERE name='Iphone1' AND manufacturer='appl') THEN
      INSERT INTO Products(product_id, name, category, manufacturer) 
         VALUES (10000, 'IphoneZ', null, 'appl');
但实际上,最好是让数据库直接实施这种唯一性。可以使用唯一的约束/索引执行此操作:

INSERT INTO Products (product_id, name, category, manufacturer)
    SELECT product_id, name, category, manufacturer
    FROM (SELECT 10000 as product_id, 'IphoneZ' as name, null as category, 'appl' as manufacturer) t
    WHERE NOT EXISTS (SELECT 1 FROM Products p WHERE p.name = t.name and p.manufacturer = t.manufacturer);
然后,您可以编写一个查询来忽略错误,方法是:

CREATE UNIQUE INDEX unq_product_manufacturer_name ON product(manufacturer, name);

ON DUPLICATE键没有任何作用-它只是用来避免在插入重复值时返回错误。

if语句末尾缺少END if关键字。而且,此SQL语句只能在例程块(如存储过程或存储函数)中使用

您的SQL应该是这样的:

INSERT INTO Products (product_id, name, category, manufacturer)
    VALUES (10000, 'IphoneZ', null, 'appl')
    ON DUPLICATE KEY UPDATE category = VALUES(category);
是MySQL还是SQL server? 我想你打错了:name='Iphone1'。应该是“IphoneZ”。 有些地方使用单引号,有些地方使用双引号。 如果是mysql,请尝试下面的查询 在产品中插入产品id、名称、类别、制造商 从选择10000、'IphoneZ',null、'appl'中选择*作为tmp_表 如果不存在,请从产品中选择1,其中name='IphoneZ' 和制造商class='appl'限值1

如果是SQL server,请尝试下面的查询 如果不存在,请从产品中选择1,其中name='IphoneZ'和manufacturer='appl' 插入产品id、名称、类别、制造商
值10000,'IphoneZ',null,'appl'

双引号而不是单引号?请阅读使用谷歌搜索标题和“mysql”的手册:。请阅读。
IF NOT EXISTS (SELECT 1 FROM Products WHERE name='Iphone1' AND manufacturer = 'appl') THEN
  INSERT INTO Products(product_id, name, category, manufacturer) 
  VALUES (10000, 'IphoneZ', null, 'appl');
END IF;