如果在NOTNULL列上未指定值,如何使MySQL产生错误?
假设表中有一个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
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()
”中)产生错误
有没有一种不用扳机的方法
只有在定义列时定义nodefault
时,才可以在没有触发器的情况下执行此操作。同样适用于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产生错误?