oracle——修改表结构&约束

修改表结构

1.创建表
在这里插入图片描述
2.#为member表增加字段
在这里插入图片描述
如果增加的数据列没有默认值,则所有已有的数据的列的内容都是null,而如果增加的列指定了DEFAULT默认值的话,则所有已有的数据列都是设置的默认值。
3.#将name字段的默认值定义为“xixi”
在这里插入图片描述
4.#修改字段名(无数据)
ALTER TABLE 表名称 RENAME COLUMN 原列名称 TO 新列名称
在这里插入图片描述
5.#删除表中字段的默认值
在这里插入图片描述
6.删除列

alter table member drop column age;

约束

一.非空约束
当数据表中的某个字段上的内容不希望设置为null的话,则可以使用NOT NULL进行指定。
1.#定义一张数据表
在这里插入图片描述
2插入两组数据;
#正确的数据:
在这里插入图片描述在这里插入图片描述
#错误的数据:
在这里插入图片描述
二.唯一约束/UNIQUE/UK
唯一约束指的是某一个列上的数据是不允许重复的,如邮件地址
1.#定义一张数据表
在这里插入图片描述
2. #插入正确的数据:
在这里插入图片描述
#插入错误的数据:
在这里插入图片描述
三.主键约束/PRIMARY KEY/PK
主键约束=非空约束+唯一约束。
1.#建立主键约束
在这里插入图片描述
2.#插入正确数据
在这里插入图片描述
3.#插入重复数据
在这里插入图片描述
== 出现以下错误提示,可以看到错误提示很明显。
ORA-00001: unique constraint (SCOTT.PK_MID) violated==

四.检查约束/CHECK/CK
检查约束指为表中的数据增加一些过滤条件,如:
设置年龄的时候范围为0-250
设置性别的时候为男、女和其他
1.#设置检查约束
在这里插入图片描述
2.增加正确的数据
在这里插入图片描述
#增加错误的数据,性别
在这里插入图片描述
出现以下错误提示:
ORA-02290: check constraint (SCOTT.CK_SEX) violated
3.#增加错误的数据,年龄
在这里插入图片描述
出现以下错误提示;
ORA-02290: check constraint (SCOTT.CK_AGE) violated
五.外键约束
之前的约束都是在单张表中进行的,而==外键约束是在两张表中进行的,这两张表是存在父子关系的,==即子表中的某个字段的取值范围是由父表所决定。
例如,多个人有多本书,创建数据表
1.#该表较之前的多添加了约束。
在这里插入图片描述
2.下面来插入数据
在这里插入图片描述
在这里插入图片描述
#输入以下的数据则会报错
在这里插入图片描述
提示以下报错:
ORA-02291: integrity constraint (SCOTT.FK_MID) violated - parent key not found
因为member.mid没有指定的数据,member只有mid为1和2的,所以book.mid如果数据有错误,则无法执行更新操作。

使用外键最大好处是控制了子表中某些数据的取值范围,但是同样带来了不少的问题,如:
1、
#删除member表中mid为1的数据
在这里插入图片描述
提示以下错误信息:
ORA-02292: integrity constraint (SCOTT.FK_MID) violated - child record found
此时只能删除子表记录之后再删除父表记录
在这里插入图片描述
同理正确做法先删除子表,再删除父表
错误演示:#直接删除member表
在这里插入图片描述
注意:先删除父表会提示以下错误信息:
ORA-02449: unique/primary keys in table referenced by foreign keys
所以需要先删除子表,再删除父表。
在这里插入图片描述
在这里插入图片描述
2…但是这种操作明显不方便,如果说想在主表数据删除之后,子表中对应的数据也可以删除的话,则可以在建立外键的时候指定一个级联删除的功能,修改数据库创建脚本;
在这里插入图片描述
在这里插入图片描述
#执行完成之后,再次插入数据;(代码同上)
#删除主表
在这里插入图片描述
#该表中的数据删除成功,然后查看booK表
在这里插入图片描述

此时由于存在级联删除的操作,所以主表中的数据删除之后,对应的子表中的数据也都会被同时删除。
3.删除数据的时候,让子表中对应的数据设置为null
== 当主表中的数据删除后,对应的子表中的数据相关项希望设置为null,而不是删除。可以继续修改数据库的创建脚本:==
在这里插入图片描述
在这里插入图片描述
插入数据&再次执行删除操作
#查看MEMBER表==(主表中的数据删除)==
在这里插入图片描述
#查看BOOK表(子表中的数据相关项希望设置为null在这里插入图片描述
4.#强制删除表,不再关心约束
这样删除表之后,子表还在。
在这里插入图片描述
更好的做法:
在以后进行数据表删除的时候,最好是先删除子表,再删除父表。

发布了47 篇原创文章 · 获赞 11 · 访问量 2203

猜你喜欢

转载自blog.csdn.net/qq_45630589/article/details/104311900
今日推荐