Может ли кто-нибудь показать мне, как удалить две связанные строки?
Я использую 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
.
Используйте FK с ON DELETE CASCADE
- http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html
Когда вы удаляете строку из главной таблицы, движок Picture
SQL каскадирует в таблицу подробностей и удаляет ее тоже.
ENGINE = InnoDB
, так что не волнуйтесь.
ON DELETE CASCADE
после ограничения внешнего ключа. Это решит вашу проблему, используете ли вы Delphi или нет.