【问题标题】:MySQL/SQL prevent deleting records that are use in another tableMySQL/SQL 防止删除在另一个表中使用的记录
【发布时间】:2014-06-01 23:48:57
【问题描述】:

两张表的结构如下:

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。

答案可能只是描述方式,而不是必要的查询代码。
我不确定是否可以通过设置外键或触发其他方式来完成?
抱歉,如果我用重复的方式向 stackoverflow 发送垃圾邮件,但我有点累(这里是凌晨 2 点),但因此无法入睡。如果需要,我明天会删除它。
抱歉英语不好:(

【问题讨论】:

    标签: mysql sql delete-row sql-delete


    【解决方案1】:

    Foregin key 将拒绝删除其他表中使用的行。只需将Company 更改为Companies.ID 的Foregin Key

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多