2013-05-02 36 views
0

我有一個數據庫,通過它可以通過應用程序輸入數據。具體來說,我在文本框中輸入一定的值,然後點擊保存按鈕,該按鈕處理將其保存到數據庫中的任務。我面臨的問題是,即使我沒有在文本框中輸入任何值,然後單擊保存按鈕,該值被保存到數據庫(我應該在代碼中處理的情況下)。現在我想編寫一個SQL腳本,以便它阻止將空值輸入到數據庫中。將空白值輸入到數據庫中

例如讓說..books是

因此,如果試圖進入一個空白的作者姓名,並嘗試保存它,它不應該保存它包含列AUTHOR_NAME,價格表,今年

我嘗試這樣做:

DELIMITER | 

CREATE TRIGGER test AFTER INSERT ON books 
    FOR EACH ROW BEGIN 
    IF NEW.author_name= '' THEN  
    delete from books where author_name= ''; 
    END IF;  
END; 
|books 
DELIMITER ; 

誰能告訴我如何做到這一點,有沒有其他的方法來實現這一目標?

+0

是否有一個理由,爲什麼你不能改變的代碼? – Romski 2013-05-02 06:19:05

+0

您的表定義是否允許在該列中爲NULL?代碼(你不能改變)是否對失敗的插入有錯誤處理?當你說你無法更改代碼時,你是否說你無法更改插入/更新等的SQL? – gillyspy 2013-05-02 07:08:21

+0

我現在不能更改代碼:(@ gillyspy表不允許空值。是代碼中有錯誤處理機制,對於失敗的插入.yes我無法更改sql的更新/插入。 – harin04 2013-05-02 07:19:44

回答

1

您應驗證應用程序中的用戶輸入。

+0

我認爲這是最好的回答如果你可以實現這個,不需要在DB上做東西 – Geek 2013-05-02 06:17:12

0

你觸發應該是這個樣子:

CREATE TRIGGER <name of the trigger> BEFORE INSERT ON <name of table> 
    FOR EACH ROW BEGIN 
     IF NEW.<fieldname> = '' 
     THEN 
     SET NEW='Error: Cannot insert record empty value for <fieldname>'; 
     END IF; 
    END 
    ; 

創建觸發器BEFORE插入

+0

我在第5行發生錯誤SET NEW ='ERROR:Can not .....'; – harin04 2013-05-02 08:46:11

+0

如果你想產生錯誤可以看看這個:http://www.brokenbuild.com/blog/2006/08/15/mysql-triggers-how-do-you-abort-an-insert-update-or-delete-with-a-trigger/ – danieln 2013-05-02 08:49:53

0

檢查應用程序中空白的輸入值,這應該是應用程序邏輯的一部分。 if empty, dont insert - 就是這樣。

0

你想要的是所謂的「約束」:

ALTER TABLE books MODIFY author_name varchar(200) NOT NULL; 
+0

他問空字符串,你的答案處理空值 – danieln 2013-05-02 06:37:15

+0

它的非空值,我想阻止它的空值? – harin04 2013-05-02 07:23:38

+0

是不是空字符串在MySQL中的空值?與Oracle是一樣的,我認爲。 – 2013-05-02 16:37:40