我正在使用Liquibase生成MySQL和HSQLDB数据库。
在几个表中,我有一列称为“ last_modified”,这是该特定记录上的最新更新的TIMESTAMP。
<changeSet author="bob" id="7">
<createTable tableName="myTable">
<column autoIncrement="true" name="id" type="INT">
<constraints nullable="false" primaryKey="true" />
</column>
<column name="name" type="VARCHAR(128)">
<constraints nullable="false" />
</column>
<column name="description" type="VARCHAR(512)" />
<column defaultValueBoolean="true" name="enabled" type="BIT">
<constraints nullable="false" />
</column>
<column name="last_modified" type="TIMESTAMP"/>
</createTable>
<modifySql dbms="mysql">
<append value=" engine innodb" />
</modifySql>
</changeSet>
我注意到,如果使用MySQL,则该列的生成SQL为:
`last_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
虽然如果我使用HSQLDB,则在更新的情况下什么也不会发生,但是我希望具有与MySQL数据库相同的行为,并且更新时的默认值等于CURRENT_TIMESTAMP。
如何将CURRENT_TIMESTAMP设置为ON UPDATE的默认值?
您无法使用默认值执行此操作。MySQL行为是非标准的,并且不受其他数据库支持。正确的方法是使用TRIGGER,将其定义为BEFORE UPDATE,并在每次更新行时设置时间戳。
更新:从HSQLDB 2.3.4版开始支持此功能。例如:CREATE TABLE T1(ID INT, last_modified timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL)
。注意,NOT NULL约束必须出现在DEFAULT和ON UPDATE子句之后。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句