Как удалить две связанные строки из базы данных MySQL?

0

Может ли кто-нибудь показать мне, как удалить две связанные строки?

Я использую Delphi 2007 и MySQL.

У меня есть база данных с двумя таблицами:

CREATE TABLE 'Picture'.'Picture' (
  'ID' INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  'IMG' LONGBLOB,
  PRIMARY KEY ('ID')
)
ENGINE = InnoDB;

CREATE TABLE 'contacts' (
  'ID' int(10) unsigned NOT NULL auto_increment,
  'FirstName' varchar(45) NOT NULL,
  'LastName' varchar(45) NOT NULL,
  'Phone' varchar(45) default NULL,
  'PICID' int(10) unsigned default NULL,
  PRIMARY KEY  ('ID'),
  KEY 'FK_contacts_1' ('PICID'),
  CONSTRAINT 'FK_contacts_1' FOREIGN KEY ('PICID') REFERENCES 'picture' ('ID')
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

В моем приложении Delphi у меня есть кнопка Delete. Когда я нахожу контакт с моей DBGrid и нажимаю кнопку Delete, я могу удалить только контакт из contacts таблицы, я также хочу удалить контактную картинку.

Я хочу удалить строку из таблицы contacts и строки из таблицы Picture. Таблица Picture связано с табличными contacts с foreign key.

  • 1
    Добавить ON DELETE CASCADE после ограничения внешнего ключа. Это решит вашу проблему, используете ли вы Delphi или нет.
Теги:
foreign-keys

1 ответ

2

Используйте FK с ON DELETE CASCADE - http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

Когда вы удаляете строку из главной таблицы, движок Picture SQL каскадирует в таблицу подробностей и удаляет ее тоже.

  • 0
    @nalply вы уверены, что это будет каскад? Любая версия MySQL с любым бэкэндом таблицы? я написал "должен каскад" с намерением.
  • 0
    Важно, что двигатель InnoDB. У меня есть проект, который использует именно это. Опера имеет ENGINE = InnoDB , так что не волнуйтесь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню