Задавайте вопросы, мы ответим
Вы не зашли.
Неактивен
Есть ли в таблице banner составной ключ на (`active`, `position`, `zone`) ?
Неактивен
position
zone
active
такой ключик есть
сделал индекс в поряжке active, position, zone - толку никакого. Та же ошибка.
Отредактированно Proger (28.02.2009 20:01:52)
Неактивен
Порядок следования колонок в ключе важен.
Приведите SHOW CREATE TABLE views и SHOW CREATE TABLE banners
Неактивен
пожалуйста:
CREATE TABLE `views` (
`bid` int(4) NOT NULL auto_increment,
`active` enum('da','net') NOT NULL,
`zone` enum('map','blog','forum','file','photo','page','all','reg','index','er404') NOT NULL,
`allowview` bigint(15) NOT NULL,
`allview` bigint(15) NOT NULL,
`position` enum('top','upper','footer') NOT NULL,
PRIMARY KEY (`bid`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 AUTO_INCREMENT=31 ;
CREATE TABLE `banners` (
`id` int(4) NOT NULL auto_increment,
`position` enum('top','upper','footer') NOT NULL default 'top',
`code` varchar(500) NOT NULL,
`click` int(8) NOT NULL,
`zone` enum('map','blog','forum','file','photo','page','all','reg','index','er404') NOT NULL default 'all',
`active` enum('da','net') NOT NULL,
`link` varchar(250) NOT NULL,
PRIMARY KEY (`id`),
KEY `active` (`active`,`position`,`zone`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=31 ;
Неактивен
ENGINE=MyISAM - обе таблицы должны быть innodb
Неактивен
Гм... как-то и не подумал даже. Сделал. Теперь пишет:
#1452 - Cannot add or update a child row: a foreign key constraint fails (`adv/#sql-78e_1f76`, CONSTRAINT `FK_views_1` FOREIGN KEY (`active`, `position`, `zone`) REFERENCES `banners` (`active`, `position`, `zone`))
Неактивен
Ну значит сейчас в этих двух таблицах условия внешнего ключа не выполняются, то есть в stat есть тройки (active, position, zone), которых в banners нет. Логично перед тем, как наложить ограничение на данные, привести их в соответствие с ограничением.
В текущей ситуации не очень понимаю зачем foreign key
Неактивен
мммм... что-то значит я не понял. Мне надо просто чтобы значения из banners автоматом транслировались в табличку views
Неактивен
Если views - статистика, то можно обновлять в ней информацию
INSERT INTO views VALUES (..) ON DUPLICATE KEY UPDATE allview=allview+1
Автоматом транслировать данные можно только триггерами
Неактивен
views статистика кликов по баннерам. Идут запросы только UPDATE к таблице views.
Хм... тогда наверное проще при выборке подгружать. А триггеры это в 5.0.10 mysql есть? ну и собственно мне не важно как, но хотелось бы оное реализовать.
Неактивен
UPDATE можно заменить на INSERT ... ON DUPLICATE KEY UPDATE
Триггеры есть в 5.0, но решение через триггеры будет менее устойчивым, так как придется следить и за вставкой новых баннеров и за изменениями существующих
Неактивен
Здравствуйте!
У меня похожая ситуация.
Есть две таблички:
CREATE TABLE `Teploobm` (
`id_teploobm` INT( 4 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`name_teploobm` VARCHAR( 50 ) NOT NULL ,
`kind_teploobm` VARCHAR( 30 ) ,
PRIMARY KEY ( `id_teploobm` )
) TYPE = InnoDB COMMENT = 'Таблица, содержащая информацию о теплообменниках';
и
CREATE TABLE `Komplekt_teploobm` (
`num_teploobm` INT( 4 ) NOT NULL ,
`num_zapch` INT( 4 ) NOT NULL ,
`count` INT( 3 ) NOT NULL ,
PRIMARY KEY ( `num_teploobm` , `num_zapch` )
) TYPE = InnoDB COMMENT = 'Таблица комплектующих теплообменника';
Мне нужно установить в таблице Komplekt_teploobm на столбец num_teploobm внешний ключ, ссылающийся
Неактивен
Посмотрите внимательно на синтаксис — Вы не указываете, какая колонка должны ссылаться на
другую таблицу: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
В Вашем случае должно быть что-то типа ADD FOREIGN KEY (num_teploobm) REFERENCES Teploobm (id_teploobm)
Неактивен
Спасибо! эту проблему я решила, теперь выскакивает следующая ошибка.
Пишу так:
ALTER TABLE `Komplekt_teploobm` ADD FOREIGN KEY ( `num_teploobm` ) REFERENCES `Teploobm` ( `id_teploobm` ) ON DELETE RESTRICT ON UPDATE CASCADE
#1005 - Can't create table '.\teploobmennnik\#sql-b94_8.frm' (errno: 150)
Вот! Собственно с этой ошибкой были проблемы.
Неактивен
Оператор ALTER TABLE работает, создавая временную копию исходной таблицы. Изменения осуществляются на копии, затем исходная таблица удаляется и новая переименовывается. Приведенная вами ошибка указывает на то, что таблица не может быть создана по причине неправильного оформленного внешнего ключа. (http://dev.mysql.com/doc/refman/5.0/en/ … codes.html)
Смотрим документацию по определению внешнего ключа http://dev.mysql.com/doc/refman/5.0/en/ … aints.html
1. Corresponding columns in the foreign key and the referenced key must have similar internal data types inside InnoDB so that they can be compared without a type conversion. The size and sign of integer types must be the same.
В вашем случае `id_teploobm` определена как UNSIGNED, а `num_teploobm` - нет.
Соответственно нужно или убрать UNSIGNED из определения `id_teploobm`, или `num_teploobm` определить как UNSIGNED. Например,
Неактивен
большое спасибо!!!
Неактивен