2013-10-26 17 views
1

我想創建一個簡單的表,我插入字段,我在MySql中做一些檢查。我已經使用Microsoft SQL相對容易。相反,MySql給evrrytime查詢錯誤,甚至沒有指定發生了什麼。可憐的MySQL軟件設計之餘,這裏就是我想要做的事:MySql基本表創建/處理

1表有自動增加的自動生成的編號4個字段DET的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無用的語法檢查器沒有幫助。

我該怎麼做?謝謝。

+0

我認爲你應該至少閱讀MySQL [創建過程](http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html)和[插入](http:/ http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html)的基礎知識。 /dev.mysql.com/doc/refman/5.6/en/insert.html)聲明。不要責怪你甚至沒有試圖理解的東西。 – bansi

回答

1

這段代碼似乎有很多錯誤。 (沒有進攻意圖!)


首先,程序需要與BEGINEND包裹:

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

,因爲你的表聲明與所有領域NOT NULL,你必須插入所有字段與INSERT政治家t(這包括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時。我敢打賭,你認爲他們更有用!

+0

嗨,謝謝你的回答,不用擔心,根本沒有進攻。我正在學習SQL和MySQL,這使得一些混亂是正常的。 恢復計數它只是一個計數器,我會隨着MAX(Recovery_count)+1每增加一次病人獲得醫療服務而增加(這只是一個示例,而不是真實情況,整個場景是發明的)。 一一回復您的觀點。 第一張: 是的,我複製了一個錯誤版本的代碼。實際的代碼有一個BEGIN和END。 第二張: 確定 第三張: 恢復計數它是一個計數器。這是會遞增每次讓我檢查,如果在第一個地方存在,否則 –

+0

我將它設置爲1。 三: –

+0

四: OK 第五: 是啊,是我不好。如果以前存在Recovery_count,UPDATE就是我需要的。 我會嘗試這些建議並讓您知道 –