2013-04-13 3 views
1

Я знаю, что это было запрошено, и мне очень жаль, но я честно не могу найти ответ.Невозможно создать таблицу (errno: 150)

Это мой админы стол:

CREATE TABLE `admins` (
    `admin_id` int(11) NOT NULL AUTO_INCREMENT, 
    `admin_user` varchar(15) NOT NULL, 
    `admin_password` varchar(15) NOT NULL, 
    `admin_fName` varchar(20) NOT NULL, 
    `admin_lName` varchar(20) NOT NULL, 
    PRIMARY KEY (`admin_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 

И стол Я пытаюсь создать для ссылки на admin_fname:

CREATE TABLE IF NOT EXISTS posts(
    post_id INT NOT NULL AUTO_INCREMENT, 
     post_title varchar(50), 
     post_content varchar(255), 
     post_user varchar(20) NOT NULL, 
     PRIMARY KEY (post_id), 
     FOREIGN KEY (post_user) REFERENCES admins(admin_fName) 
) ENGINE = INNODB; 

post_user, кажется, имеют те же атрибуты, admin_fname, и есть данных в родительской таблице. может ли любой орган объяснить, что здесь происходит?

ответ

2

Вы не можете указать post_user на столбе admin_fname на столе admins, потому что вы не определили ключ на нем. Чтобы ответить на ваш вопрос прямо, вы должны добавить ключ на колонке,

CREATE TABLE `admins` 
(
    `admin_id` int(11) NOT NULL AUTO_INCREMENT, 
    `admin_user` varchar(15) NOT NULL, 
    `admin_password` varchar(15) NOT NULL, 
    `admin_fName` varchar(20) NOT NULL, 
    `admin_lName` varchar(20) NOT NULL, 
    KEY (admin_fName),      -- <<== adding key 
    PRIMARY KEY (`admin_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 

, но это не очень хорошая идея, чтобы ссылаться на NON_UNIQUE колонку, потому что на длинных записях пробега могут смешиваться для пользователей, имеющих один и тот же fname. Лучший дизайн - оставить таблицу как есть. Добавьте столбец таблицы posts, ссылающийся на его первичный ключ.

CREATE TABLE `admins` 
(
    `admin_id` int(11) NOT NULL AUTO_INCREMENT, 
    `admin_user` varchar(15) NOT NULL, 
    `admin_password` varchar(15) NOT NULL, 
    `admin_fName` varchar(20) NOT NULL, 
    `admin_lName` varchar(20) NOT NULL, 
    PRIMARY KEY (`admin_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1; 

CREATE TABLE IF NOT EXISTS posts 
(
     post_id INT NOT NULL AUTO_INCREMENT, 
     post_title varchar(50), 
     post_content varchar(255), 
     admin_id int(11) NOT NULL, 
     PRIMARY KEY (post_id), 
     FOREIGN KEY (admin_id) REFERENCES admins(admin_id) 
) ENGINE = INNODB; 
+0

ах, thankyou, чувствую себя довольно глупо для забывания: I – ReallyGoodPie

+0

см. Мой обновленный ответ. ': D' надеюсь, что вы поняли мою точку зрения. –

+0

Спасибо, очень благодарен :) – ReallyGoodPie

Смежные вопросы