【问题标题】:Why does MySQL still insert even when it shouldn't为什么即使不应该插入 MySQL 仍然插入
【发布时间】:2020-04-10 01:23:26
【问题描述】:

这是我的数据库(仅作为示例):

+----------------+---------------+------+-----+---------+---------------+
| Field          | Type          | Null | Key | Default | Extra         |
+----------------+---------------+------+-----+---------+---------------+
| id             | integer       | NO   |PK   | NONE    |AUTO_INCREMENT |
| name           | string        | NO   |     | NONE    |               |
| email          | string        | YES  |     | NULL    |               |
| phoneNumber    | string        | YES  |     | NULL    |               |
| password       | string        | NO   |     | NONE    |               |
| maxDistance    | integer       | NO   |     | NONE    |               |
| showMeOnApp    | integer       | NO   |     | NONE    |               |
| created_at     | datetime      | NO   |     | NONE    |               |
| updated_at     | datetime      | NO   |     | NONE    |               |
+----------------+---------------+------+-----+---------+---------------+

所以这里的问题是,当我在 phpMyAdmin 上进行插入而不在 passwordcreated_at 上添加任何值时,例如应该有值的字段,即使我没有,它仍然会插入行设置一个值。为什么这个?我认为这应该给我一个错误,比如:Password can't be null, maxDistance can't be null... 你知道吗?类似的东西,我现在得到的是这样的:

1 row inserted
Warning: #1366 Incorrect integer value: '' for column `databasename`.`users`.`maxDistance` at row 1
Warning: #1366 Incorrect integer value: '' for column `databasename`.`users`.`showMeOnApp` at row 1
Warning: # 1265 Truncated data for column 'created_at' in row 1
Warning: # 1265 Truncated data for column 'updated_at' in row 1

但无论如何都要插入。

所以这是我的问题,如果我不满足所有条件,为什么它仍然插入行?

【问题讨论】:

  • 从表中删除default null...
  • 实际上只是emailphoneNumber 是默认null
  • 让别人DEFAULT NOT NULL...
  • @Antony Jack 没有这个选项DEFAULT NOT NULL
  • INSERT 查询在哪里?

标签: mysql phpmyadmin


【解决方案1】:

您似乎不了解Null 属性对于列架构的含义。当设置为TRUE 时,表示您可以为该列插入NULL 值;如果您未能为该列指定值,它将默认为 NULL 值。

当架构中的Null 属性为FALSE 时,这意味着您可以将该列设置为NULL,尝试这样做可能会产生警告,并且可能根据您使用的 MySQL 版本及其配置方式,将该列的值设置为“”(空字符串)。在这种情况下,如果您未能为该列指定值,它将默认为“”(空字符串)。

【讨论】:

  • 是的,我明白这一点,但例如在 PostgreSQL 上,如果我没有在 not null 字段上设置值,它不会让我插入 hte 行。你知道如果我不满足所有条件,MySQL 是否有一个选项让它不允许我插入?
  • 但是您已经满足所有条件:您已经为数据库提供了插入行所需的最少信息。如果您询问如何配置 MySQL 以要求字段,您可以see that question answered here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-15
  • 2016-08-27
相关资源
最近更新 更多