【问题标题】:Mysql 5.5 Adds Default Value Automatically for Primary KeysMysql 5.5 自动为主键添加默认值
【发布时间】:2018-03-20 09:02:28
【问题描述】:

当我在 mysql 5.5 中运行以下查询时,我可以看到该表的主键默认值为 '',即使我没有指定它

CREATE TABLE `test1` (
  `id` VARCHAR(10),
  `data` VARCHAR(50),
  PRIMARY KEY (`id`)
);

当我在 mysql 5.5 中运行以下查询时,我可以看到该表的主键默认值为 '0',即使我没有指定它

CREATE TABLE `test2` (
  `id` int(10),
  `data` VARCHAR(50),
  PRIMARY KEY (`id`)
);

这在 ma​​riadb 10.2 中不会发生。

我曾经使用 information_schema 中的值来比较数据库结构。但现在似乎无法比较 5.5 和 10.2 数据库中 2 个表列的默认值。有人知道为什么会自动添加吗?以及对此的解决方案?

【问题讨论】:

  • MariaDB 10.2 做了什么?

标签: mysql mariadb


【解决方案1】:

根据5.7之前版本10.1.7之前的MariaDB documentationMariaDBMySQL之前的版本5.7将这些列转换为默认值为0的NOT NULL列。但是随后两个DB都改变了它们的行为并且目前该列已转换为 NOT NULL,但没有默认值。

因此,您可以更改其中一个数据库版本以实现相同的行为

【讨论】:

    【解决方案2】:

    如果列定义不包含明确的 DEFAULT 值,MySQL 将确定默认值。

    【讨论】:

      【解决方案3】:

      由于主键不能为 NULL 且不能重复,如果您在插入记录时没有为其指定值,MYSQL 会为第一条记录分配默认值。 您可以将此主键设置为自动增量,您也可以根据需要插入值,即使它是自动增量类型(如果您愿意)。

      【讨论】:

        猜你喜欢
        • 2014-03-21
        • 1970-01-01
        • 2012-03-03
        • 2015-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-26
        • 2010-12-09
        相关资源
        最近更新 更多