如果在NOTNULL列上未指定值,如何使MySQL产生错误?

如果在NOTNULL列上未指定值,如何使MySQL产生错误?,mysql,null,Mysql,Null,假设表中有一个NOTNULL列 如果使用这种语句,我如何使MySQL产生错误 INSERT INTO tableName () VALUES (); 谢谢。要将列设置为非空,请使用以下语法: ALTER TABLE table_name MODIFY column_name [data type] NOT NULL; DELIMITER $$ CREATE TRIGGER trgBEFORE UPDATE ON `tbl` FOR EACH ROW BEGIN declar

假设表中有一个NOTNULL列

如果使用这种语句,我如何使MySQL产生错误

INSERT INTO tableName () VALUES ();

谢谢。

要将列设置为非空,请使用以下语法:

ALTER TABLE table_name
MODIFY column_name [data type] NOT NULL;
DELIMITER $$

    CREATE TRIGGER trgBEFORE UPDATE ON `tbl`
    FOR EACH ROW BEGIN
declare msg varchar(255);
      IF (NEW.col1IS NULL ) THEN
           set msg = concat('MyTriggerError: Trying to insert a null value );
        signal sqlstate '45000' set message_text = msg;
      ELSE
            SET NEW.col1= NEW.col1);
      END IF;
    END$$

DELIMITER ;
如果将列声明为
非空
将产生错误!!
如果您想要自定义错误消息,则需要创建触发器操作! 这里有一个触发器可以帮助您:

ALTER TABLE table_name
MODIFY column_name [data type] NOT NULL;
DELIMITER $$

    CREATE TRIGGER trgBEFORE UPDATE ON `tbl`
    FOR EACH ROW BEGIN
declare msg varchar(255);
      IF (NEW.col1IS NULL ) THEN
           set msg = concat('MyTriggerError: Trying to insert a null value );
        signal sqlstate '45000' set message_text = msg;
      ELSE
            SET NEW.col1= NEW.col1);
      END IF;
    END$$

DELIMITER ;
如何使MySQL在向包含
notnull
列的表插入行时,以及在未向该列指定值时(如“
INSERT INTO tableName()VALUES()
”中)产生错误

有没有一种不用扳机的方法

只有在定义列时定义no
default
时,才可以在没有触发器的情况下执行此操作。同样适用于
alter。。。列…

示例1

create table ck_nn( i int not null );
insert into ck_nn values();
create table ck_nn2( i2 int not null default 999 );
insert into ck_nn2 values();
上面的
insert
抛出一个错误,因为列上没有定义默认值。
消息可以类似于
字段“i”没有默认值的情况

示例2

create table ck_nn( i int not null );
insert into ck_nn values();
create table ck_nn2( i2 int not null default 999 );
insert into ck_nn2 values();
上面的
insert
不会引发任何错误,因为列上定义了默认值

select * from ck_nn2;

+-----+
|  i2 |
+-----+
| 999 |
+-----+

示例@

我知道现在已经晚了,但这可能会对某人有所帮助

您可以在配置文件中或在运行时为当前会话设置SQL模式。 要产生错误,需要启用严格的sql模式,方法是:
SET GLOBAL sql_mode='STRICT_ALL_TABLES'
设置全局sql_模式='STRICT_TRANS_TABLES'

有关sql模式的详细信息。

它插入了哪些值?该列是否设置了默认值?它插入了0+警告。是否允许您将默认值设置为NULL?该列不是NULL,但它仍然不会产生错误,而是在值+警告上填充0。那么您的问题是什么?它不会引发错误?我的问题是“当向包含NOTNULL列的表中插入行时,当没有像“INSERT INTO tableName()VALUES()”那样为该列指定值时,如何使MySQL产生错误。有没有一种没有触发器的方法?尝试:INSERT INTO tbl VALUES(NULL);看这里,mysql在检查约束方面有点糟糕——我会使用触发器来保持我的逻辑order@Up_One:关键是OP的问题。如果使用这种语句,我如何使MySQL产生错误?