2013-04-08 20 views
1

我想要一個腳本來阻止空值條目進入數據庫。我能夠通過代碼中的某些更改來實現此目的,但我的意圖不是在代碼中更改它而是編寫可以運行以執行此任務的腳本將空值條目阻塞到數據庫中

例如,表「book」具有author_name,price,標題。 我不想允許任何輸入數據庫中有空作者姓名

+0

您可以修改表結構並將author_name設置爲非空 – 2013-04-08 06:30:39

回答

5

您需要在列的定義中使用NOT NULL子句。例如 -

CREATE TABLE book (
    author_name varchar(50) NOT NULL, 
    price decimal(19, 2) DEFAULT NULL, 
    title varchar(255) DEFAULT NULL 
); 

這就像一個約束。


的解決方法,約束空白值 -

CREATE TRIGGER trigger1 
    AFTER INSERT 
    ON book 
    FOR EACH ROW 
BEGIN 
    IF author_name = '' THEN 
    SIGNAL SQLSTATE VALUE '02001' 
     SET MESSAGE_TEXT = 'Blank value is not allowed'; -- Raise error 
    END IF; 
END 

文檔 - SIGNAL聲明。

+0

感謝您的回覆,我已經完成了這項工作,如果我分配空白值,它正在更新到數據庫,如何處理該問題。 – harin04 2013-04-08 06:59:43

+0

空白不爲NULL。如果你想約束空白值,那麼你需要編寫一個觸發器來引發錯誤。 – Devart 2013-04-08 07:13:29

+0

我已經添加了一個例子。 – Devart 2013-04-08 07:18:49

0

按照文檔:http://dev.mysql.com/doc/refman/5.1/en/create-table.html

create_definition: 
    col_name column_definition 
column_definition: 
    data_type [NOT NULL | NULL] [DEFAULT default_value] 
     [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] 
     [COMMENT 'string'] 
     [COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}] 
     [STORAGE {DISK|MEMORY|DEFAULT}] 
     [reference_definition] 

你column_definition應該看起來像

author_name VARCHAR(50) NOT NULL