Igori
Эксперт
Дата регистрации:
04.07.2011 21:09:44
Сообщений: 104
Михаил, у меня создались две таблицы:
CREATE TABLE usr(
userid INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(80) NOT NULL,
surname VARCHAR(80) NOT NULL,
PRIMARY KEY (userid)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
CREATE TABLE mashin(
mashinid INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(80) NOT NULL,
PRIMARY KEY (mashinid)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
Третья таблица не создается , чтобы я не делал. Почему , в чем дело? Подскажи!
CREATE TABLE linc(
linid INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
userid INT(10) UNSIGNED NOT NULL,
mashinid INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (linid),
FOREIGN KEY (userid) REFERENCES usr(userid)
ON UPDATE CASCADE
ON DELETE RESTRICT,
FOREIGN KEY (mashinid) REFERENCES mashin(masinid)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
Admin
Администратор
Дата регистрации:
27.05.2010 21:23:42
Сообщений: 3063
Базу Вы не указываете, в которой таблица должна быть создана, вот Вам ошибку и пишет. Через точку с именем таблицы укажите.
Igori
Эксперт
Дата регистрации:
04.07.2011 21:09:44
Сообщений: 104
CREATE TABLE linc.Имя базы(
linid INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
userid INT(10) UNSIGNED NOT NULL,
mashinid INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (linid),
FOREIGN KEY (userid) REFERENCES usr(userid)
ON UPDATE CASCADE
ON DELETE RESTRICT,
FOREIGN KEY (mashinid) REFERENCES mashin(masinid)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
Вот так?
Igori
Эксперт
Дата регистрации:
04.07.2011 21:09:44
Сообщений: 104
Михаил я понял, что надо так: CREATE TABLE linc.Имя базы(........), да?
Igori
Эксперт
Дата регистрации:
04.07.2011 21:09:44
Сообщений: 104
Михаил ответь пожалуйста , мне очень необходимо разобраться!
Admin
Администратор
Дата регистрации:
27.05.2010 21:23:42
Сообщений: 3063
Да, так, но судя по всему ошибка там не такая простая. Третья таблица не работает из-за foreign key. Вот как можно починить, для примера:
DROP TABLE IF EXISTS linc;
DROP TABLE IF EXISTS usr;
CREATE TABLE usr (
userid INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(80) NOT NULL,
surname VARCHAR(80) NOT NULL,
PRIMARY KEY (userid)
) ENGINE=INNODB DEFAULT CHARSET=cp1251;
CREATE TABLE linc (
linid INT(10) UNSIGNED NOT NULL,
parent_usrid INT(10) UNSIGNED NOT NULL,
INDEX par_ind (parent_usrid),
FOREIGN KEY (parent_usrid) REFERENCES usr(userid)
ON UPDATE CASCADE
ON DELETE RESTRICT
) ENGINE=INNODB DEFAULT CHARSET=cp1251;
Igori
Эксперт
Дата регистрации:
04.07.2011 21:09:44
Сообщений: 104
Вот это для чего, поясни пожалуйста!
DROP TABLE IF EXISTS linc;
DROP TABLE IF EXISTS usr;
Admin
Администратор
Дата регистрации:
27.05.2010 21:23:42
Сообщений: 3063
На эти строки можете не обращать внимания и не писать их. Я когда тестировал, добавил эту запись, чтобы старые таблицы удалялись, перед попыткой добавить новые. Ну и название базы по-хорошему тоже надо указывать.
Igori
Эксперт
Дата регистрации:
04.07.2011 21:09:44
Сообщений: 104
Михаил, привет! Моя ошибка была в том, что я не объявил в таблице "linc" поля "userid" и "ashinid" ндексными,да?
CREATE TABLE linc(
linid INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
userid INT(10) UNSIGNED NOT NULL,
mashinid INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (linid),
FOREIGN KEY (userid) REFERENCES usr(userid)
ON UPDATE CASCADE
ON DELETE RESTRICT,
FOREIGN KEY (mashinid) REFERENCES mashin(masinid)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
Я просто хочу понять,чтобы в будующем не делать ошибок.
Admin
Администратор
Дата регистрации:
27.05.2010 21:23:42
Сообщений: 3063
Да, в этом была ошибка. Ещё, вероятно, не стоит называть поля так же, как и в родительских таблицах (т.е. userid в linc лучше переименовать, как у меня в примере). Хотя и так должно работать.