Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: внешние ключи

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: ON UPDATE ON DELETE
Варяг
Отправлено: 25 Октября, 2010 - 13:56:45
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




Здравствуйте!

Создал таблицу запросом (привожу самое интересное Радость ):
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE `tovar` (
  2.        `idtovar` int(5) NOT NULL AUTO_INCREMENT,
  3.        `idkategory` int(3) NOT NULL,
  4.      PRIMARY KEY (`idtovar`),
  5.        FOREIGN KEY(`idkategory`) REFERENCES `kategory`(`idkategory`)
  6.        ON UPDATE CASCADE
  7.        ON DELETE CASCADE
  8. )TYPE=MyISAM CHARACTER SET `utf8`;


И, как я понял, если удалить из kategory строку со значением idkategory, то строки из таблицы tovar со значением idkategory должны удалиться. Но на самом деле они не удаляются. Что я не так сделал?

Благодарю.
 
 Top
EuGen Администратор
Отправлено: 25 Октября, 2010 - 14:00:07
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Тип таблицы у Вас MyISAM - этот тип не поддерживает внешние ключи. Для Вашей задачи нужен InnoDB:
ALTER TABLE `tovar` ENGINE=InnoDB


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Варяг
Отправлено: 25 Октября, 2010 - 14:10:37
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




EuGen, странно, но ни запросом ALTER TABLE `tovar` ENGINE=InnoDB, ни созданием таблицы с типом InnoDB не получается изменить тип. Как был, так и остается MyISAM. Denwer чтоли не поддерживает InnoDB?
 
 Top
EuGen Администратор
Отправлено: 25 Октября, 2010 - 14:19:55
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Насчет Denwer я не уверен. Возможно, этот тип таблиц не входит в базовую поставку.
Почитайте, например,
http://www[dot]denwer[dot]ru/other/mysqltr[dot]html


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Варяг
Отправлено: 25 Октября, 2010 - 14:32:38
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




EuGen, благодарю. Оказывается этот тип отключен для экономии ресурсов. сейчас попробую перенастроить запросы под InnoDB
(Добавление)
EuGen, теперь все заработало, благодарю Подмигивание
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB