2017-11-24 6 views
0

mariadb에서 "Subsystem"테이블을 만들 때 오류가 계속 발생합니다. 나는 mysql을 성공적으로 실행할 수 있었지만 mariadb로 시도 할 때 나는 외래 키와 관련하여 문법과 관련이 있거나없는 것으로 추측된다. - SHOW 엔진 INNODB 상태와를 얻을 수ERROR 1005 (HY000) : 'CBDB.Subsystem'테이블을 만들 수 없습니다. (errno : 150)

ERROR 1005 (HY000): Can't create table 'CBDB.Subsystem' (errno: 150) 

내가 도망 : 여기 내가 먼저 부모 테이블을 만들려고 먼저 만드는거야 테이블 ...

-- Creating Tables 
DROP TABLE IF EXISTS Storage_Type; 
CREATE TABLE Storage_Type (
stor_model VARCHAR(10) NOT NULL, 
stor_class VARCHAR(12) NOT NULL, 
stor_name VARCHAR(15) NOT NULL, 
CONSTRAINT pk_stor_model PRIMARY KEY (stor_model) 
); 

DROP TABLE IF EXISTS Service_Level; 
CREATE TABLE Service_Level (
serv_level CHAR(2) NOT NULL, 
serv_name VARCHAR(30), 
serv_maxiops VARCHAR(7), 
CONSTRAINT pk_serv_level PRIMARY KEY (serv_level) 
); 

DROP TABLE IF EXISTS Site; 
CREATE TABLE Site (
site_num VARCHAR(10) NOT NULL, 
site_name VARCHAR(15) NOT NULL, 
site_address VARCHAR(30) NOT NULL, 
site_suburb VARCHAR(20) NOT NULL, 
site_city VARCHAR(15) NOT NULL, 
site_pcode CHAR(4) NOT NULL, 
CONSTRAINT pk_site_num PRIMARY KEY (site_num) 
); 

---No sure what i'm doing wrong on this table?? 
DROP TABLE IF EXISTS Customer; 
CREATE TABLE Customer (
site_num VARCHAR(10) NOT NULL, 
cust_name VARCHAR(20) NOT NULL, 
site_description VARCHAR(50) NOT NULL, 
CONSTRAINT pk_site_num PRIMARY KEY (site_num), 
CONSTRAINT fk_site_num FOREIGN KEY (site_num) REFERENCES Site(site_num) 
); 

DROP TABLE IF EXISTS Pools; 
CREATE TABLE Pools (
sub_serial MEDIUMINT NOT NULL, 
pool_id CHAR(3) NOT NULL, 
data_date DATE NOT NULL, 
pool_name VARCHAR(30), 
pool_type CHAR(4), 
pool_totalcapacity INT NOT NULL, 
pool_usedcapacity INT NOT NULL, 
pool_usedpercent INT, 
pool_availablecapacity INT NOT NULL, 
pool_subscribedcapacity INT, 
pool_subscriptionpercent INT, 
serv_level CHAR(2), 
CONSTRAINT pk_pool PRIMARY KEY (sub_serial, pool_id, data_date), 
CONSTRAINT fk_serv_level FOREIGN KEY (serv_level) REFERENCES Service_Level(serv_level) 
); 

DROP TABLE IF EXISTS Costs; 
CREATE TABLE Costs (
cost_date DATE NOT NULL, 
serv_level CHAR(2), 
cost_gbmonth VARCHAR(10), 
cost_gbday VARCHAR(10), 
CONSTRAINT pk_cost PRIMARY KEY (cost_date,serv_level), 
CONSTRAINT fk_cost FOREIGN KEY (serv_level) REFERENCES Service_Level(serv_level) 
); 

--------ISSUES creating this table..... 
DROP TABLE IF EXISTS Subsystem; 
CREATE TABLE Subsystem (
sub_serial MEDIUMINT NOT NULL, 
sub_name VARCHAR(10) NOT NULL, 
stor_model VARCHAR(10) NOT NULL, 
cust_name VARCHAR(50) UNIQUE, 
CONSTRAINT pk_subsys PRIMARY KEY (sub_serial), 
CONSTRAINT fk_subsys_stor_model FOREIGN KEY (stor_model) REFERENCES Storage_Type(stor_model), 
CONSTRAINT fk_subsys_cust_name FOREIGN KEY (cust_name) REFERENCES Customer(cust_name) 
); 

오류입니다 다음, 나는 그 문제를 정확하게 지적하는 것.

> ------------------------ LATEST FOREIGN KEY ERROR 
> ------------------------ 171124 16:09:31 Error in foreign key constraint of table `CBDB`.`Subsystem`: FOREIGN KEY (cust_name) 
> REFERENCES Customer(cust_name)): Cannot find an index in the 
> referenced table where the referenced columns appear as the first 
> columns, or column types in the table and the referenced table do not 
> match for constraint. Note that the internal storage type of ENUM and 
> SET changed in tables created with >= InnoDB-4.1.12, and such columns 
> in old tables cannot be referenced by such columns in new tables. 

내가 잘못 가고있는 곳의 팁이나 아이디어 ??

건배 시간 후

답변

0

하고 "쇼 엔진 이노 상태"의 세부 사항을보고하고 mariadb 오류 코드와이를 참조. 그들은 프라이 머리 키가 다른 테이블의 참조 된 값이기 때문에 Customer 테이블에 Index가 없다고 지적했습니다. 내가하여 인덱스를 생성 : 테이블을 생성 한 후

create index idx_cust on Customer(cust_name); 

, 그러나 테이블 생성에서하고있는 구문이있다. 인덱스를 작성하여 외래 키를 올바르게 참조 할 수있었습니다. 잠시만 애매한 오류 메시지가 나타나면 도움이 될 수 있습니다.