我正在自学如何使用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表在工作台上执行
经过一周的研究和试验,问题是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值。我想保留现有的空值,并检查将来的行,它们是否包含此列的非空值。这可能吗?如何? 问题答案: 您可以添加未验证的约束-它不会查看现有行,但是会检查是否有任何新行或更新行。 请注意,除非满足约束,否则您将无法更新现有行。 另外,请注意,不利之处在于,优化器在制定计划时将无法利用此约束-它必须假设