我有一个名为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中的保留字