当前位置: 首页 > 知识库问答 >
问题:

Liquibase未能在MySQL上添加非空、唯一的当前时间戳

岳枫
2023-03-14

我正在自学如何使用Liquibase进行MySQL数据库版本控制和迁移。

我正在使用Maven和MySQL处理数据库的Spring Boot项目。

我创建了一个主变更日志来包含几个变更日志文件,直到现在一切都很好。当应用我的第一次迁移创建一个包含id、email、name、created和updated列的简单用户表时,问题就开始了。

迁移运行良好,但有一点除外。Liquibase没有对所有列应用not NULL、更新的时间戳数据类型或当前的额外时间戳,也没有忽略电子邮件列的唯一索引。

我的第一次尝试是在一个。xml变更日志,我认为它可能是。xml格式,所以我将其更改为SQL语法。这也没用。我还先创建了表,然后添加了not null约束,但不起作用。

在这一点上,我不知道还能做什么,我也找不到更多关于它的好帖子或文档。

注意:它应用的唯一“特殊”约束是主键和自动递增,忽略所有其他特性。

如果我能得到任何帮助,我将不胜感激!

这是我的酒。属性:

url = jdbc:mysql://localhost/skullproject
username = skull
password = skullpass
driver = com.mysql.jdbc.Driver

以下是我的迁移XML更改日志:

<changeSet id="1" author="f6rnando">
    <createTable tableName="user">
        <column autoIncrement="true" name="id" type="BIGINT">
            <constraints primaryKey="true" nullable="false" />
        </column>
        <column name="email" type="VARCHAR(80)">
            <constraints nullable="false" />
        </column>
        <column name="password" type="VARCHAR(80)">
            <constraints nullable="false" />
        </column>
        <column name="name" type="VARCHAR(80)">
            <constraints nullable="false" />
        </column>
        <column name="updated" type="TIMESTAMP" defaultValueComputed="CURRENT_TIMESTAMP">
            <constraints nullable="false" />
        </column>
        <column name="created" type="DATETIME">
            <constraints nullable="false" />
        </column>
    </createTable>
</changeSet>

<changeSet author="f6rnando" id="1491156436761-3">
    <addUniqueConstraint columnNames="email"
        constraintName="email_UNIQUE" tableName="user" />
</changeSet>

这是我的MySQL更新日志:

--liquibase formatted sql

--changeset f6rnando:1
CREATE TABLE user (
  id BIGINT NOT NULL AUTO_INCREMENT,
  email VARCHAR(80) NOT NULL,
  password VARCHAR(80) NOT NULL,
  name VARCHAR(80) NOT NULL,
  updated TIMESTAMP NOT NULL DEFAULT current_timestamp,
  created DATETIME NOT NULL,
  PRIMARY KEY (id),
  UNIQUE INDEX email_UNIQUE (email ASC)
);

--changeset f6rnando:2
ALTER TABLE user MODIFY email VARCHAR(80) NOT NULL;

--changeset f6rnando:3
ALTER TABLE user MODIFY password VARCHAR(80) NOT NULL;

在我尝试了所有方法之后,结果总是一样的:MySQL表信息

我在MySQL Workbench上运行了CREATE TABLE语句,没有任何问题。创建的所有约束都很好:MySQL表在工作台上执行

共有1个答案

吴高畅
2023-03-14

经过一周的研究和试验,问题是Hibernate配置。在我的应用程序中。属性spring。jpa。冬眠ddl auto=create drop,这意味着根据实体类,创建数据库,然后在会话工厂关闭时删除数据库。显然,这压倒了液化行为。

为了解决这个问题,我设置了Spring。jpa。冬眠ddl自动到无。然后,Liquibase能够按预期行事。

 类似资料:
  • 问题内容: 我正在开发一个支持Google两步验证的应用程序。此应用程序还支持“可信任此设备30天”的功能。 我使用数据库保存所有这些信息,例如IP地址和到期时间。现在,当我填写时间戳以将当前时间增加30天时,它将比当前时间早的时间戳插入数据库中。 例如:当前时间= 。现在,当我加上30天(毫秒)时,得出的日期不是30天,而是大约19天。 问题答案: 此问题与32位整数溢出有关。由于整数的最大值为

  • 问题内容: MySQL中此查询的有效语法是什么? 注意:start_time是课程表的字段 问题答案: 有关其他日期/时间操作,请参见日期和时间功能。

  • 本文向大家介绍在MySQL中添加具有当前时间的新列作为默认值?,包括了在MySQL中添加具有当前时间的新列作为默认值?的使用技巧和注意事项,需要的朋友参考一下 为此,可以在MySQL中使用DEFAULT CURRENT_TIMESTAMP子句。以下是语法- 让我们首先创建一个表- 现在您可以使用insert命令在表中插入一些记录- 使用select语句显示表中的所有记录- 输出结果

  • 问题内容: 就性能而言,MySQL唯一索引和非唯一索引有什么区别? 假设我要在2列的组合上创建索引,并且该组合是唯一的,但是我创建了一个非唯一的索引。这会对MySQL使用的性能或内存产生重大影响吗? 同样的问题, 主 键和 唯一 索引之间有区别吗? 问题答案: UNIQUE和PRIMARY KEY是 约束 ,而不是索引。尽管大多数数据库通过使用索引来实现这些约束。除了索引之外,约束的额外开销也微不

  • 问题内容: 不知道在PostgreSQL 9.3+中是否可行,但是我想在非唯一列上创建唯一索引。对于像这样的表: 我想仅能[快速]查询不同的日子。我知道我可以用来帮助执行不同的搜索,但是如果不同值的数量大大少于索引覆盖的行数,这似乎会增加额外的开销。就我而言,大约30天中有1天与众不同。 我是创建关系表以仅跟踪唯一条目的唯一选择吗?思维: 并在每次插入数据时使用触发器来更新它。 问题答案: 索引只

  • 问题内容: 我有一个表,其中的列包含一些空值。我想在该列上添加约束,而不将现有的null更新为非null值。我想保留现有的空值,并检查将来的行,它们是否包含此列的非空值。这可能吗?如何? 问题答案: 您可以添加未验证的约束-它不会查看现有行,但是会检查是否有任何新行或更新行。 请注意,除非满足约束,否则您将无法更新现有行。 另外,请注意,不利之处在于,优化器在制定计划时将无法利用此约束-它必须假设