MySql Basic表创建/处理

时间:2013-10-26 03:22:56

标签: mysql sql sql-server

我正在尝试创建一个简单的表,我在其中插入字段,并在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无用的语法检查器也无济于事。

我该怎么做?感谢。

1 个答案:

答案 0 :(得分:1)

这段代码似乎有很多问题。 (没有违法行为!)


首先,程序需要包含BEGINEND

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时给出的错误。我敢打赌,他们比你想象的更有用!