Задавайте вопросы, мы ответим
Вы не зашли.
Привет всем!
Есть родительская таблица:
-- СОЗДАНИЕ ТАБЛИЦЫ КАТАЛОГОВ СЕРВИСОВ
CREATE TABLE servcatalog (
idCatalog INT UNSIGNED NOT NULL AUTO_INCREMENT,
nameservic VARCHAR(100) NOT NULL,
typeservic TINYINT(3) UNSIGNED NOT NULL,
adress VARCHAR(200) NOT NULL,
region TINYINT(3) UNSIGNED NOT NULL,
phone VARCHAR(30) NOT NULL,
email VARCHAR(50) NOT NULL,
website VARCHAR(70) NULL,
descript TEXT NOT NULL,
access ENUM('0','1') NOT NULL,
PRIMARY KEY (idCatalog),
INDEX typeservic (typeservic)
) ENGINE = InnoDB COMMENT = 'Таблица Каталог сервисов'
Дочерняя таблица:
-- СОЗДАНИЕ ТАБЛИЦЫ ОТЗЫВОВ
CREATE TABLE servOtziv (
idOtziv INT UNSIGNED NOT NULL AUTO_INCREMENT,
nameuser VARCHAR(30) NOT NULL,
maseg VARCHAR(200) NOT NULL,
ocenka TINYINT(3) UNSIGNED NOT NULL,
idCatalog INT UNSIGNED NOT NULL,
PRIMARY KEY (idOtziv),
INDEX ixCatalog (idCatalog),
CONSTRAINT ixCat FOREIGN KEY (idCatalog) REFERENCES servcatalog (idCatalog)
ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB COMMENT = 'Таблица отзывов сервисов'
При создании табл. servOtziv с внешним ключом выдает постоянно ошибку:
Error Code: 1005
Can't create table '.\auto\servotziv.frm' (errno: 121)
В чем проблема??? Типы столбцов совпадают почему не можно создать таблицу с внешним ключом. Спасибо!
Неактивен
Заметил следующее. Получается так: к родительской таблице устанавливаются связи с двома таблицами: servCatMarka, servCatVid - FOREIGN KEY устанавливается без проблема, а вот когда к родительской таблице servcatalog пытаешся прикрепить еще одну таблицу с внешним кключом servOtziv, то сервер выдает ошибку: Error Code: 1005 Can't create table '.\auto\servotziv.frm' (errno: 121). Получается, что боьше чем две табл. к родителю не прикрутишь или как??? Разясните кто-может!!!
Неактивен
Странная штука, приведите, пожалуйста, полную структуру базы; в текущем виде
всё работает ровно так, как Вы написали.
Неактивен
Вот список таблиц и их связи. Интиресно что с помощью
ALTER TABLE servOtziv ADD (CONSTRAINT fk_servOtziv FOREIGN KEY (idCatalog) REFERENCES servСatalog (idCatalog) ON DELETE CASCADE ON UPDATE CASCADE);
после создания табл. servOtziv без внешних ключей а затем добавляем - получается!!! В чем проблема что сразу невозможно создать связи???
-- СОЗДАНИЕ ТАБЛИЦЫ КАТАЛОГОВ СЕРВИСОВ
CREATE TABLE servСatalog (
idCatalog INT UNSIGNED NOT NULL AUTO_INCREMENT,
nameservic VARCHAR(100) NOT NULL,
typeservic TINYINT(3) UNSIGNED NOT NULL,
adress VARCHAR(200) NOT NULL,
region TINYINT(3) UNSIGNED NOT NULL,
phone VARCHAR(30) NOT NULL,
email VARCHAR(50) NOT NULL,
website VARCHAR(70) NULL,
descript TEXT NOT NULL,
access ENUM('0','1') NOT NULL,
PRIMARY KEY (idCatalog),
INDEX typeservic (typeservic)
) ENGINE = InnoDB COMMENT = 'Таблица Каталог сервисов'
-- СОЗДАНИЕ СВЯЗУЮЩЕЙ ТАБЛИЦЫ
CREATE TABLE servCatMarka (
idCatalog INT UNSIGNED NOT NULL,
Id_Marka SMALLINT(11) UNSIGNED NOT NULL,
INDEX ixCatalog (idCatalog),
INDEX ixMarka (Id_Marka),
CONSTRAINT ixCatalog FOREIGN KEY (idCatalog) REFERENCES servCatalog (idCatalog)
ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB COMMENT = 'Таблица связующая таблицы: servCatalog and markaauto';
-- СОЗДАНИЕ СВЯЗУЮЩЕЙ ТАБЛИЦЫ
CREATE TABLE servCatVid (
idCatalog INT UNSIGNED NOT NULL,
idVid INT UNSIGNED NOT NULL,
INDEX ixCatalog (idCatalog),
INDEX ixVid (idVid),
CONSTRAINT ixCat FOREIGN KEY (idCatalog) REFERENCES servCatalog (idCatalog)
ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB COMMENT = 'Таблица связующая таблицу servCatalog and servVidrabot';
-- СОЗДАНИЕ ТАБЛИЦЫ ОТЗЫВОВ
CREATE TABLE servOtziv (
idOtziv INT UNSIGNED NOT NULL AUTO_INCREMENT,
nameuser VARCHAR(30) NOT NULL,
maseg VARCHAR(200) NOT NULL,
ocenka TINYINT(3) UNSIGNED NOT NULL,
idCatalog INT UNSIGNED NOT NULL,
PRIMARY KEY (idOtziv),
INDEX ixCatalog (idCatalog)
) ENGINE = InnoDB COMMENT = 'Таблица отзывов сервисов';
Неактивен
Ааааа! Вы убили мой мозг
mysql> select md5('servСatalog'), md5('servCatalog'); +----------------------------------+----------------------------------+ | md5('servСatalog') | md5('servCatalog') | +----------------------------------+----------------------------------+ | a334e6fdf63f218c5f651a1218c622de | a636ea766039c206c2776a9cfda54664 | +----------------------------------+----------------------------------+ 1 row in set (0.00 sec)
Я надеюсь, намёк понятный
Неактивен
Не понял - хеширования. Причем? что вы указали за выборку? Объясните, плиз!
Неактивен
Хэширования — чтобы отличить два слова друг от друга. Например, буква
«а» и буква «a» — разные буквы, хоть и выглядят очень похоже
Неактивен
Но Вы так и не объяснили, почему я не могу создать табл. из внешн. ключами (причем сдесь хеширование, я првда извеняюсь, если я что-то не понимаю!!!). Синтаксис создания правильный. Почему внешн. ключи я могу создать лишь после создания табл. сначала без внегн. ключей, а лишь затем с помощьюю ALTER TABLE servOtziv ADD (CONSTRAINT fk_servOtziv FOREIGN KEY (idCatalog) REFERENCES servСatalog (idCatalog) ON DELETE CASCADE ON UPDATE CASCADE); добавляю ключи???
Неактивен
Синтаксис правильный, а вот название таблички неправильное (хотя и
похожее). Когда копируете правильное название — работает.
Неактивен
Так получается проблема в названиях таблиц. Возможно при наборе названия табл. какая-то из букв была напечатана на рус. языке и это несработало? Верно!!!
Неактивен
И еще одна задачка: Создаю родительскую таблицу
CREATE TABLE servСatalog (
idCatalog INT UNSIGNED NOT NULL AUTO_INCREMENT,
nameservic VARCHAR(100) NOT NULL,
typeservic TINYINT(3) UNSIGNED NOT NULL,
adress VARCHAR(200) NOT NULL,
region TINYINT(3) UNSIGNED NOT NULL,
phone VARCHAR(30) NOT NULL,
email VARCHAR(50) NOT NULL,
website VARCHAR(70) NULL,
descript TEXT NOT NULL,
access ENUM('0','1') NOT NULL,
PRIMARY KEY (idCatalog),
INDEX typeservic (typeservic)
) ENGINE = InnoDB DEFAULT CHARSET=cp1251 COMMENT = 'Таблица Каталог сервисов'
Вылазит ошибка: #1146 - Table 'test.servСЃatalog' doesn't exist
Хотя пишет что табл. создана. Что это еще такое???
Отредактированно yuriy (24.05.2011 17:18:37)
Неактивен
Ѓa ← русская буква
Неактивен
Вопрос не совсем по БД, но по теме букв... У нас в сервисе тоже бывают подобные случаи, когда пользователи отправляю текст, где вместо латинских букв прописаны русские с тем же видом. Я не думаю, что кто-то переключал постоянно раскладки, чтобы вот так "выпендриться". Кто знает, почему так происходит? Всякие там пунто свитчеры вроде всё слово преобразовывают, а не отдельные буквы. Или тут дело рук различных вредоносных программ?
Неактивен
Не представляю
Как вариант — удачно преобразованное слово «исправили». Ну или копипаст
какой-то куска слова...
Неактивен