当前位置: 首页 > 面试题库 >

MySQL列设置为NOT NULL但仍允许NULL值

令狐昌胤
2023-03-14
问题内容

我将每个列都设置为,NOT NULL但是由于某种原因,我仍然能够NULL在每个列中添加一个值。这是我的表信息(创建语法):

CREATE TABLE `addresses` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `address` varchar(100) NOT NULL,
    `city` varchar(100) NOT NULL,
    `state` varchar(4) NOT NULL,
    `zip` varchar(30) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4545 DEFAULT CHARSET=utf8;

这是一个有效的示例INSERT

INSERT INTO `addresses` (`street`, `city`, `state`, `zip`) VALUES ('', '', '', '');

有什么想法为什么会这样?


问题答案:

您要插入空字符串,而空字符串不是NULL,要检查NULL错误,请执行以下操作:

INSERT INTO `addresses` (`street`, `city`, `state`, `zip`) VALUES (NULL, NULL, NULL, NULL);

你会看到错误。该NOT NULL只对那些不值检查NULL

为了防止空字符串,您必须使用触发器,或者NULL在执行INSERT查询之前对服务器端编程语言进行检查以将空字符串转换为。的示例触发器INSERT可能类似于:(这只是一个示例)

CREATE TRIGGER avoid_empty
    BEFORE INSERT ON addresses
        FOR EACH ROW
        BEGIN
        IF street = '' THEN SET street = NULL END IF;
END;


 类似资料:
  • 我试图执行我的保存endpoint到邮递员,我收到这个错误: 原因:org.h2.jdbc.JdbcBatchUpdateException: NULL不允许列CREATION_DATE;SQL语句:插入到客户(authentication_uid、creation_date、customer_uid、default_payment_method_uid、guid、last_edit_date、p

  • 在java链表中,如果head=null,则LinkedList为空。但是,当我将head设置为null并打印tail的值时,会显示该值。为什么我们说head==null意味着LinkedList是空的?当链表应该为空时,为什么显示尾部值?我们不也应该检查id(tail==null)吗? 主类 输出:5- 45

  • 问题内容: 我拼凑了一个图片网站。基本模式是非常简单的MySQL,但是在尝试表示与图像相关联的可能的管理标志(“不合适”,“受版权保护”等)时遇到了一些麻烦。我目前的概念如下: (为了方便阅读而被截断;我发誓要搭配各种外键和索引) 在标志类型的查找表上是外键,并且您可以想象 应该 在上外键。现在的问题是,当第一次发出标志时,没有逻辑解析类型(我将其声明为的一种很好的用法)。但是,如果设置了值,则应

  • 我将null传递给json.parse(),虽然第一个参数文档中说明它应该是一个字符串值,但它仍然可以提供。 为什么这不会抛出一个错误,即使文档声明这是用于字符串的,这能在多个浏览器中安全可靠地使用吗?

  • 问题内容: 最初,表“ MyTable”的定义如下: 如何以允许“ Col 3”列为NULL的方式更新它? 问题答案: 以下MySQL语句应修改您的列以接受NULL。

  • 问题内容: 我正在将CSV插入表中。我对CSV中的内容没有任何控制,很多字段为空白。例如,在我的第一条记录中,“ baths_full”字段为空(两个逗号背对背)。 在运行MySQL 5.5.37的生产服务器上,它将带​​有的记录插入为空字段。在运行MySQL 5.6.19的本地计算机上,出现以下错误: 奇怪的是,表的架构是相同的。实际上,我使用生产机器的导出来创建本地数据库。 该字段设置为Tin