liquibase生成不同的uuid,尽管uuid()在< property>

rqmkfv5c  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(436)

我们在liquibase运行了以下程序:

  1. <property name="UUID-20-off-General-US" value="uuid()" dbms="mysql"/>
  2. <changeSet id="GeneralDiscountRateCard20" author="foo">
  3. <sql dbms="mysql">
  4. INSERT INTO rate (id, pricing_model, name)
  5. VALUES (${UUID-20-off-General-US}, 'CPM', '20% off Discount US');
  6. INSERT INTO rate_map (id, rate_map_name, rate_id)
  7. VALUES (uuid(), 'general_20_discount_us', ${UUID-20-off-General-US})
  8. </sql>
  9. </changeSet>

我们希望看到在两个表中使用相同的uuid(而在另一个表中使用不同的uuid) id 第二张table)。相反,我们发现了3个不同的uuid。他们看起来几乎一模一样,只是数字5-8不同:

  1. 0dec159a-ded8-11e8-813e-42010a80044f
  2. 0dec7a69-ded8-11e8-813e-42010a80044f
  3. 0decc891-ded8-11e8-813e-42010a80044f
  4. ^^^^

大概是因为 uuid() 在同一个分数秒左右被调用。
<property> 有延迟插值吗?有没有一种方法可以在对的两个引用之间实际拥有相同的uuid <property> ?

ftf50wuq

ftf50wuq1#

打电话 uuid() 将按设计返回不同的uuid,即使在同一查询中使用。

  1. MariaDB [(none)]> SELECT uuid(), uuid();
  2. +--------------------------------------+--------------------------------------+
  3. | uuid() | uuid() |
  4. +--------------------------------------+--------------------------------------+
  5. | c6996867-e19c-11e8-b32e-e0cb4eeb0025 | c699686c-e19c-11e8-b32e-e0cb4eeb0025 |
  6. +--------------------------------------+--------------------------------------+

运行查询时,将得到以下sql语句:

  1. INSERT INTO rate (id, pricing_model, name)
  2. VALUES (uuid(), 'CPM', '20% off Discount US');
  3. INSERT INTO rate_map (id, rate_map_name, rate_id)
  4. VALUES (uuid(), 'general_20_discount_us', uuid())

产生三个不同的uuid。当您想“重用”一个值时,您必须将该值(而不是函数调用)保存在变量/属性中,并使用它,如下所示:

  1. <property name="UUID-20-off-General-US" value="'c699686c-e19c-11e8-b32e-e0cb4eeb0025'" dbms="mysql"/>
  2. <changeSet id="GeneralDiscountRateCard20" author="foo">
  3. <sql dbms="mysql">
  4. INSERT INTO rate (id, pricing_model, name)
  5. VALUES (${UUID-20-off-General-US}, 'CPM', '20% off Discount US');
  6. INSERT INTO rate_map (id, rate_map_name, rate_id)
  7. VALUES (uuid(), 'general_20_discount_us', ${UUID-20-off-General-US})
  8. </sql>
  9. </changeSet>

或者你不用硬编码的 <property /> 标记并通过ant或命令行传递计算值。

展开查看全部

相关问题