关于外键的理解和实验步骤

我的实验过程
1.创建两个表
create table zb(n number not null primary key,b varchar2(10),c date default sysdate);
create table wb(n number not null primary key references zb(n),c date default sysdate);
2.给zb及wb分别insert into数据
insert into zb(n,b) values(3,'c');

insert into wb(n) values(1);

当给外表insert into上面三行(即与主表一样的n号时,系统没问题,错误产生)
当insert into 不相同的n号时
如:
insert into wb(n) values(4);
insert into wb(n) values(4)
Error at line 1
ORA-02291: integrity constraint (CSM.SYS_C00204894) violated - parent key not found

Script. Terminated on line 4.

说父表中没有数据发现。

说明什么,要么wb的行数少于zb的,要么最多和zb的行数一样多。
也就是说wb的n列,必须是zb的n列号码的子集。

3.测一下关于删除的例子:
delete from zb where n=1;
delete from zb where n=1
Error at line 1
ORA-02292: integrity constraint (CSM.SYS_C00204894) violated - child record found

Script. Terminated on line 5.

说明是互相约束的,如果删除zb即父表的行,那个n列中的值如果在wb中,那就出现上面的错误,
如果不在,即:
insert into zb(n,b) values(5,'c');
commit;

这个n=5不在wb中
即,再测试:
delete from zb where n=5;
1 row deleted.

说明是可以删除的

4.如何解决上述错误?
解决办法:
1.create table wb(n number not null primary key references zb(n) on  delete cascade,c date default sysdate);
创建一个加on delete cascade参数的外键


给表插入上面的数据。
2.删除zb(即父表中的数据,n号在wb中)
delete from zb where n=2;
1 row deleted.
这说明这样是可以删除的。
叉插入的情况(主要测试wb)
插入依旧要遵守规则 ,在子表即wb中的行n号码,是zb中的n号的子集才成,如果不是,系统拒绝插入。

另:
如果外键的定义中没有on delete cascade参数
则删除zb的行,n的号在wb中的n号的话,则需要先删除wb中的相应的行,才能删除zb的行。


 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/119941/viewspace-721665/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/119941/viewspace-721665/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习MySQL约束时,你可以按照以下实验步骤进行: 1. 安装MySQL:首先,你需要安装MySQL数据库管理系统。可以从MySQL官方网站下载适合你操作系统的版本,并按照安装指南进行安装。 2. 创建数据库:使用MySQL客户端连接到数据库服务器,并创建一个新的数据库。可以使用以下命令创建数据库: ```sql CREATE DATABASE mydatabase; ``` 3. 创建:在创建之前,你需要定义的结构和列的属性。使用CREATE TABLE语句来创建,并在其中指定列的名称、数据类型和约束。以下是一个示例: ```sql CREATE TABLE students ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, age INT, class_id INT, CONSTRAINT fk_class FOREIGN KEY (class_id) REFERENCES classes(id) ); ``` 上面的示例创建了一个名为students的,其中包含id、name、age和class_id四个列。id列被定义为主键约束,name列被定义为非空约束,class_id列被定义为外键约束。 4. 插入数据:使用INSERT INTO语句将数据插入到中。例如: ```sql INSERT INTO students (id, name, age, class_id) VALUES (1, 'Alice', 20, 1), (2, 'Bob', 21, 2), (3, 'Charlie', 19, 1); ``` 这将向students中插入三行数据。 5. 测试约束:尝试插入违反约束条件的数据,例如插入重复的主键值或空值。观察MySQL数据库管理系统如何拒绝这些违规操作,并返回错误消息。 6. 修改约束:如果需要修改的约束条件,可以使用ALTER TABLE语句。例如,你可以添加或删除约束、修改列的数据类型等。 通过按照以上步骤进行实验,你将能够理解和掌握MySQL中约束的使用方法,并能够在实际项目中应用它们来确保数据库数据的完整性和一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值