1

我正在尝试创建一个简单的表,在其中插入字段并在 MySql 中进行一些检查。我使用 Microsoft SQL 相对容易。相反,MySql 给出了 evrrytime 查询错误,甚至没有指定发生了什么。除了糟糕的 MySql 软件设计,这就是我想要做的:

1 个包含 4 个字段的表,其中包含一个自动增量自动生成的数字,用于将 ID 作为主键

 CREATE TABLE `my_db`.`Patients_table` (
`ID_Patient` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`Patient_name` VARCHAR( 200 ) NOT NULL ,
`Recovery_Date` DATETIME NOT NULL ,
`Recovery_count` INT NOT NULL
) ENGINE = MYISAM 

一个简单的存储过程,用于插入此类字段并在插入之前检查是否存在某些内容:

CREATE PROCEDURE nameInsert(IN nome, IN data)
INSERT INTO Patients_table (Patient_name,Recovery_Date) values (nome,data)

 IF (EXISTS (SELECT Recovery_count FROM Tabella_nomi) = 0) THEN
 INSERT INTO (Patients_table (Recovery_count)
ELSE
SET Recovery_count = select Recovery_count+1 from Patients_table
END

这在很多层面上似乎都是错误的,MySQL 无用的语法检查器也无济于事。

我怎样才能做到这一点?谢谢。

4

1 回答 1

1

这段代码似乎有很多错误。(无意冒犯!)


首先,程序需要用BEGINand包裹END

CREATE PROCEDURE nameInsert(IN nome, IN data)
BEGIN
    ...[actually do stuff here]
END

其次,由于您的表的所有字段都声明为NOT NULL,因此您必须INSERT使用语句插入所有字段(这包括该Recovery_Date列,不包括该AUTO_INCREMENT列)。DEFAULT CURRENT_TIMESTAMP如果您希望它自动设置,您可以添加到日期列。

INSERT INTO Patients_table (Patient_name,Recovery_Date) values (nome,data)

第三IF,你的谓词到底在做什么?

EXISTS (SELECT Recovery_count FROM Tabella_nomi) = 0

如果你想检查一行是否存在,不要放在= 0最后。此外,Tabella_nomi未在该过程的任何地方声明。此外,您的SELECT语句应该有一个WHERE子句,因为我假设您要选择一个特定的行(这将选择所有recovery_counts 的结果集)。


第四,第二个INSERT说法似乎有点乱。它应该看起来更像第一个INSERT,并记住我在上面提出的观点。

INSERT INTO (Patients_table (Recovery_count)

ELSE声明

SET Recovery_count = select Recovery_count+1 from Patients_table

也有一些问题。SET用于设置变量,而不是行中的值。我不是 100% 确定您从该语句中的意图是什么,但看起来您打算增加Recovery_count某行的列(如果它已经存在)。在这种情况下,你打算做这样的事情:

UPDATE Patients_table SET Recovery_count = Recovery_count+1 WHERE <conditional predicate>

条件谓词是这样的:

Patients_name = nome

尝试这些事情,并查看当您尝试执行CREATE STATEMENT. 我敢打赌它们比你想象的更有用!

于 2013-10-26T04:20:01.567 回答