当表名为“status”时,Mysql唯一约束问题和liquibase 3.0

时间:2013-07-11 07:10:05

标签: mysql liquibase

我有一个名为status的表:

| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| db_table | varchar(255)     | NO   |     |         |                |
| name     | varchar(255)     | NO   |     |         |                |
| rank     | varchar(6)       | YES  |     | NULL    |                |
| style_id | int(11) unsigned | NO   |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+

with create statement

CREATE TABLE `status` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `db_table` varchar(255) NOT NULL DEFAULT '',
  `name` varchar(255) NOT NULL DEFAULT '',
  `rank` varchar(6) DEFAULT NULL,
  `style_id` int(11) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8

luqibase generateChangelog命令

liquibase --url=jdbc:mysql://localhost/testdb generateChangeLog

输出

Liquibase generateChangeLog Failed: Error executing SQL select CONSTRAINT_NAME from information_schema.table_constraints where constraint_schema='testdb' and constraint_type='UNIQUE' and table_name='status': Unknown table 'status' in information_schema

我不知道为什么这是一个问题,并且在拼图中添加更多内容我从mysql获得此响应

select * 
from  information_schema.table_constraints 
where constraint_schema='testdb' 
and table_name='status';
  

ERROR 1109(42S02):information_schema`中的未知表'status'

虽然我看到没有条件table_name='status'列出状态

mysql和/或liquibase有什么问题? “状态”是作为表名不能使用的一些保留的东西或者特殊目的。

相同的架构适用于较旧的liquibase版本2.0.5 :(

修改

此问题必须与表名status

一起使用

案例A

drop table status;
create table statusx
(
    id int(11) unsigned auto_increment, 
    name varchar(20) ,
    primary key (`id`)
);

liquibase --url = jdbc:mysql:// localhost / testdb generateChangeLog

工作正常

案例b

drop table statusx;
create table status
(
   id int(11) unsigned auto_increment, 
   name varchar(20), 
   primary key (`id`)
);

liquibase --url=jdbc:mysql://localhost/testdb  generateChangeLog 

同样的错误:

  

Liquibase generateChangeLog失败:执行SQL时出错从info_schema.table_constraints中选择CONSTRAINT_NAME其中constraint_schema ='testdb'和constraint_type ='UNIQUE'和table_name ='status':information_schema中的未知表'status'

直接查询也失败了:

select * 
from information_schema.table_constraints 
where constraint_schema = 'testdb' 
  and table_name='status';

虽然这有效:

select * 
from  information_schema.table_constraints 
where constraint_schema='testdb' 
and table_name='statusx';

作品

select * 
from  information_schema.table_constraints 
where constraint_schema='ufg_a' 
and table_name='`status`';

我认为liquibase的修复方法是在表名周围使用反引号,例如table_name ='status'

与mysql有些奇怪,我希望 status 不是mysql中的保留字

0 个答案:

没有答案