MySQL / SQL阻止删除在另一个表中使用的记录

时间:2014-06-01 23:48:57

标签: mysql sql delete-row sql-delete

两个表的结构如下:

use exercise;

create table Companies 
(
    ID  int,
    Name    varchar(100),
    City    varchar(100),
    c_size varchar(100),
    PRIMARY KEY (ID)
);

insert into Companies(ID, Name, city, company_size) 
values
(222, 'Karma LLC','CITY2', 'big'),
(223, 'Manny Ind.','CITY1', 'medium'),
(224, 'Random PLC','CITY1', 'medium'),
(225, 'Hijack LLC','CITY1', 'medium'),
(226, 'Travels LLC','CITY1', 'small'),
(227, 'Mirana Ind.','CITY2', 'small'),
(228, 'Polla Ind.','CITY3', 'small'),
(229, 'Americano LLC','CITY3', 'small'),
(230, 'Macaroni LLC','CITY4', 'small');

CREATE TABLE INVOICES
(
    ID INT auto_increment,
    `DATE` DATE,
    Company INT,
    Amount DECIMAL(7,2),
    PRIMARY KEY (ID)
);

INSERT INTO INVOICES(`DATE`,Company,Amount)
VALUES
('2014-01-02', 222, 19500.00),
('2014-01-02', 222, 29205),
('2014-01-07', 222, 152.50),
('2014-01-07', 223, 6590),
('2014-01-07', 223, 4999),
('2014-01-09', 224, 720.60),
('2014-01-09', 225, 1100),
('2014-02-05', 226, 885),
('2014-02-05', 222, 9678.7);  

如您所见,有些公司支付发票,有些则没有。我想知道防止删除公司的方式,即支付发票。例如,公司Americano LLC(229)可以删除,但Karma LLC不能删除。

答案可能只是描述如何,而不是必要的查询代码 我不确定是否可以通过设置外键或触发其他东西来完成? 对不起,如果我垃圾堆栈重复堆栈,但我有点累(这里凌晨2点),但因为它无法入睡。如果需要,我明天会删除它 对不起英语不好:(

1 个答案:

答案 0 :(得分:2)

外键将拒绝删除行,该行在其他表中使用。只需将Company更改为Companies.ID

的外键即可
相关问题