【问题标题】:How to create one table which shares common id with another and which row gets removed in both tables once it's removed from first如何创建一个与另一个共享公共 id 的表,以及一旦从第一个表中删除哪一行在两个表中被删除
【发布时间】:2013-01-04 16:44:55
【问题描述】:

如何创建一个与另一个共享公共 id 的表,并且一旦从第一个表中删除哪一行会在两个表中被删除?

我听说过 FOREIGN KEY, REFERENCES,但不确定如何实际创建此类表。 有什么例子可以让我开始吗?

【问题讨论】:

    标签: postgresql foreign-keys cascade database-administration


    【解决方案1】:

    我认为您要么在谈论级联删除,要么在谈论您不应该做的非常奇怪的事情。 :)

    外键信息:http://www.postgresql.org/docs/8.3/static/tutorial-fk.html

    级联删除信息(搜索“ON DELETE CASCADE”页面):http://www.postgresql.org/docs/8.2/static/ddl-constraints.html

    编辑:添加示例:

    表创建:

    CREATE TABLE products (
        product_no integer PRIMARY KEY,
        name text,
        price numeric
    );
    
    CREATE TABLE orders (
        order_id integer PRIMARY KEY,
        shipping_address text,
        ...
    );
    
    CREATE TABLE order_items (
        product_no integer REFERENCES products ON DELETE RESTRICT,
        order_id integer REFERENCES orders ON DELETE CASCADE,
        quantity integer,
        PRIMARY KEY (product_no, order_id)
    );
    

    触发级联删除示例:

    DELETE FROM orders                  -- This will delete all orders with 
    WHERE order_id BETWEEN 1 AND 10 ;   -- order_id between 1 and 10 and 
                                        -- all associated order items.
    

    【讨论】:

    • 嗯,我已经读过了。你能展示工作的例子吗,你先做对了
    • 举个例子?创建一组使用级联删除的表?
    • @Jason:答案很好,除了最后一部分。从order_items 删除不会级联任何东西。如果您从orders 中删除任何行,那么是的,order_items 中的所有关联行也将被删除(通过级联效应)
    • 好的,我正在删除 order_items 并希望修改订单而不是反之:/
    • 哎呀,这就是我的意思。谢谢指正。
    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 2012-09-10
    • 1970-01-01
    相关资源
    最近更新 更多