【问题标题】:MySQL INSERT WHERE a variable is not duplicatedMySQL INSERT WHERE 变量不重复
【发布时间】:2012-07-26 10:53:10
【问题描述】:

我在使用DECLARECALL 函数和IF settelment 时遇到了一些问题。到目前为止我所拥有的是:

CREATE PROCEDURE number_of_projects(project_name VARCHAR)
BEGIN
    DECLARE variable INT;
    SET variable = 4;
    SELECT variable;

    SELECT count(project_id) FROM atm_projects WHERE project_name = variable;
END

IF number_of_projects("PROJECT NAME") = 0
    THEN
    INSERT INTO atm_projects(project_id,project_name,added_from_mti)
    VALUES (project_id,'PROJECT NAME',1)
ENDIF

主要目标是在project_name不重复的表中插入一行。

我可以将project_name 更改为UNIQUE 键,但请告诉我我的代码有什么问题,我该如何解决?

我需要了解 PROCEDURECALL procedureIF 的工作原理。

【问题讨论】:

  • 您不能在函数、触发器或过程之外使用if 语句。并且您的程序周围缺少分隔符。

标签: mysql sql database database-design


【解决方案1】:

尝试:

CREATE PROCEDURE number_of_projects(project_name VARCHAR(255))
BEGIN
    DECLARE var_project_no INT;
    SET var_project_no = 0;
    SELECT var_project_no;

    SELECT count(project_id) INTO var_project_no FROM atm_projects WHERE var_project_name = 4;


    IF var_project_no = 0
    THEN
        INSERT INTO atm_projects(project_id,project_name,added_from_mti)
        VALUES (project_id,'PROJECT NAME',1)
    END IF;
END;

【讨论】:

  • 我只需要检查 project_name 是否像 "PROJECT1" == "PROJECT1" 那样重复,另外,PROCEDURE 就像 PHP 中的函数、方法?
  • 还有一件事我如何将这个 SELECT count(project_id) INTO var_project_no FROM atm_projects WHERE project_name = 'PROJECT NAME'; 放入变量中?
  • 使用 INTO 子句可以做到这一点。没有它与 php 函数有些不同,存储过程(sp)基本上是一组查询和 if else 条件。您可以在 mysql 中创建可以返回值但 sp 不能的函数。
  • 你有一点空闲时间看看我是如何用 PHP 完成这项任务的吗? codepad.org/oIMOb5nA
  • 你确定..如果你在列 type_of_work_name 上有一个唯一键,那么你不需要使用另一个查询进行选择,你可以直接使用 INSERT INTO table ON DUPLICATE KEY UPDATE..
【解决方案2】:

您已将 project_name 声明为 varchar,但未指定长度。改成varchar(100)

【讨论】:

    【解决方案3】:
    CREATE PROCEDURE number_of_projects(project_name VARCHAR(255))
    BEGIN
    
     if NOT  exists(SELECT Top 1 1  FROM atm_projects WHERE var_project_name = 4)
     BEGIN 
       INSERT INTO atm_projects(project_id,project_name,added_from_mti)
       Select project_id,project_name ,1
     END
    END;
    

    【讨论】:

      猜你喜欢
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      • 2012-07-27
      • 2017-09-26
      • 2012-02-26
      • 1970-01-01
      相关资源
      最近更新 更多