父表为a表,字段为name ,id ,dep。其中name为主键
子表为b表,字段为number,grade。其中number为主键将a表的name字段添加为b表的外键(级联关系)时
如何也时也将a表name字段的数据移动到b表的name字段中?
子表为b表,字段为number,grade。其中number为主键将a表的name字段添加为b表的外键(级联关系)时
如何也时也将a表name字段的数据移动到b表的name字段中?
按你的意思,父子表关系应该这样设计父表:name,id,dep(name为主键)
子表:name,serial_no,number,grade(name,serial_no为联合主键)
这是最常用父子表关系设计
select a.id,a.dep from tablea a,tableb b where a.name = b.name
a表,字段为name(pk) ,id , dep
b表, 字段为number (pk),id,grade 建立外键关系之后 子表b表的name字段为外键,此时外键name字段的数据应该由b表的id字段控制即:
原表关系 a:name(pk) id dep
李 012 A部门
王 023 B部门 b: number (pk) id grade
01 012 A级
02 023 A级
03 012 c级
建立外键关系后的b表应为:
b: number(Pk) name(fk) id grade
01 李 012 A级
02 王 023 A级
03 李 012 C级 用ALTER TABLE b ADD FOREIGN KEY (name)
REFERENCES a (name) ON DELETE CASCADE ON UPDATE CASCADE;
建立外键后,数据如何导入?
你做联合查询不就可以得到你所需要的数据了么?
select b.number,a.name,a.id b.grade from a,b where a.id = b.id
SQL> -- create a foreign key with a cascade delete with more than one field
SQL>
SQL> CREATE TABLE supplier
2 ( supplier_id numeric(10) not null,
3 supplier_name varchar2(50) not null,
4 contact_name varchar2(50),
5 CONSTRAINT supplier_pk PRIMARY KEY (supplier_id, supplier_name)
6 );Table created.SQL>
SQL>
SQL> CREATE TABLE products
2 ( product_id numeric(10) not null,
3 supplier_id numeric(10) not null,
4 supplier_name varchar2(50) not null,
5 CONSTRAINT fk_supplier_comp
6 FOREIGN KEY (supplier_id, supplier_name)
7 REFERENCES supplier(supplier_id, supplier_name)
8 ON DELETE CASCADE
9 );Table created.SQL>
SQL> desc products;
Name Null? Type
----------------------------------------------------------------------------------------------------- -------- -------------------------------------------------------------------- PRODUCT_ID NOT NULL NUMBER(10)
SUPPLIER_ID NOT NULL NUMBER(10)
SUPPLIER_NAME NOT NULL VARCHAR2(50)SQL> desc supplier;
Name Null? Type
----------------------------------------------------------------------------------------------------- -------- -------------------------------------------------------------------- SUPPLIER_ID NOT NULL NUMBER(10)
SUPPLIER_NAME NOT NULL VARCHAR2(50)
CONTACT_NAME VARCHAR2(50)SQL>
SQL> drop table products cascade constraints;Table dropped.SQL>
SQL> drop table supplier cascade constraints;Table dropped.SQL>