繁体   English   中英

如何从表和所有引用中删除数据?

[英]How to delete a data from a table and all the references?

我需要从“客户”表中删除一个消费者,并从“ContactDetails”、“发票”和“ServiceTicket”表中删除与他相关的所有数据。

这是表格:

CREATE TABLE ContactDetail (
    DetailID integer IDENTITY(1,1) PRIMARY KEY,
    FirstName varchar(40) NOT NULL,
    SurName varchar(40) NOT NULL,
    DoB date NOT NULL,
    Address01 varchar(80) NOT NULL,
    Address02 varchar(80),
    City varchar(40) NOT NULL,
    County varchar(40) NOT NULL,
    EirCode varchar(8) NOT NULL,
    Email varchar(40),
    PhoneNumber varchar(20),
    MobileNumber varchar(20) NOT NULL
);

CREATE TABLE Customer (
    CustomerID varchar(9) PRIMARY KEY,
    DetailID integer FOREIGN KEY REFERENCES ContactDetail(DetailID),
    LastActivity date NOT NULL,
    CustumerStatus varchar(9) NOT NULL
);

CREATE TABLE SalesPerson (
    SalesPersonID varchar(9) PRIMARY KEY,
    DetailID integer FOREIGN KEY REFERENCES ContactDetail(DetailID)
);

CREATE TABLE Mechanic (
    MechanicID varchar(9) PRIMARY KEY,
    DetailID integer FOREIGN KEY REFERENCES ContactDetail(DetailID)
);

CREATE TABLE Car (
    CarSerialNumber varchar(12) PRIMARY KEY,
    CarIsForSale varchar(1) NOT NULL,
    CarCondition varchar(1) NOT NULL,
    CarMiliage integer,
    CarMake varchar(40),
    CarModel varchar (40),
    CarYear date,
    CarColor varchar (20),
    CarTransmission varchar (10),
    CarEngineSize varchar (10),
    CarFuelType varchar (10),
    CarDoors integer,
    CarBodyStyle varchar (20),
    CarSalePrice decimal (19,4)
);

CREATE TABLE Invoice (
    InvoiceNumber integer IDENTITY(1,1) PRIMARY KEY,
    SalesPersonID varchar(9) FOREIGN KEY REFERENCES SalesPerson(SalesPersonID),
    CustomerID varchar(9) FOREIGN KEY REFERENCES Customer(CustomerID),
    CarSerialNumber varchar(12) FOREIGN KEY REFERENCES Car(CarSerialNumber),
    InvoiceDate datetime NOT NULL,
);

CREATE TABLE ServiceTicket (
    ServiceNumber varchar(9) PRIMARY KEY,
    MechanicID varchar(9) FOREIGN KEY REFERENCES Mechanic(MechanicID),
    CustomerID varchar(9) FOREIGN KEY REFERENCES Customer(CustomerID),
    CarSerialNumber varchar(12) FOREIGN KEY REFERENCES Car(CarSerialNumber),
    ServiceTicketDate date NOT NULL,
    ServiceDue date NOT NULL,
    ServiceDescription varchar (80) NOT NULL,
    ServicePrice decimal(19,4) NOT NULL,
);

我将首先确保您的表包含 PRIMARY 和外键并将其包含在您的示例中。 此外,最好为所有有问题的表包含创建表语句和示例数据,以便用户可以测试并为您提供选项

您可以使用递归 pl/sql function。 (1)您要删除表中的一行(2)使用您的 function 查找相关表的所有外键引用(3)删除相关外键引用的外键表中的行(4 ) 直到您到达没有更多外键引用的表,go 到 (2)

select uc.constraint_name, ucc.table_name, ucc.column_name from
user_constraints uc
left join user_cons_columns ucc on (uc.r_constraint_name = ucc.constraint_name)
where uc.table_name = 'TABLENAME'
and uc.constraint_type = 'R'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM