2013-04-08 43 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