
正文
oracle怎么修改约束 oracle5种约束
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
oracle该怎么添加删除主键约束?
添加约束语句格式:\x0d\x0aalter table 表名 add constraint 主键约束名 primary key(主键列名表序列);\x0d\x0a如:\x0d\x0aalter table 修课表 add constraint pk_xh_kc primary key(学号,课程号);\x0d\x0a\x0d\x0a删除约束语句格式:\x0d\x0aalter table 表名 drop CONSTRAINT 主键约束名;\x0d\x0a如:\x0d\x0aalter table 修课表 drop CONSTRAINT pk_xh_kc;
相关问答
Q1: oracle 添加、修改、删除、约束-语法
创建表结构oracle怎么修改约束:
向表中添加主键约束
向表中添加Sequences
添加字段oracle怎么修改约束的语法:
修改字段的语法:
删除字段的语法:
添加、修改、删除多列的话oracle怎么修改约束,用逗号隔开。
Q2: Oracle如何添加主键约束
工具/材料
SQL Developer
01
首先打开SQL Developer软件,找一个没有主键约束的表,如下图所示
02
然后我们新建一个查询,在界面中输入如下的约束修改语句,如下图所示,主要通过add constranint来添加约束
03
编写完约束添加语句以后,点击工具栏中的执行按钮,如下图所示,如果输出栏显示已变更则证明主键约束创建成果
04
然后我们进入STUDENT表的约束添加页中可以看到,我们加的主键约束已经添加进去了,如下图所示
05
另外,创建表的时候可以直接添加主键约束,如下图所示,直接在表创建语句中添加constraint即可
06
表创建完以后,记得在左侧刷新数据库信息,如下图所示,因为你创建的信息不刷新的话不会更新
07
最后打开你所创建的表,看到你添加的主键约束已经加入进来了,这种方式的效果alter的方式是一样的
Q3: oracle更改check 约束
现在要说的是在列这一层次过滤的基于表定义之前就规范好的 CHECK 约束。(MySQL 版本 = 8.0.16)
mysql create table f1 (r1 int constraint tb_f1_r1_chk1 check (mod(r1,3)=0));
Query OK, 0 rows affected (0.03 sec)
mysql create table f2 (r1 int constraint tb_f2_r1_chk1 check (mod(r1,3)=0) not enforced);
Query OK, 0 rows affected (0.02 sec)
这里 CHECK 约束的相关限制如下:
1. constraint 名字在每个数据库中唯一。
也就是说单个数据库里不存在相同的两个 constraint,如果不定义,系统自动生成一个唯一的约束名字。
2. check 约束针对语句 insert/update/replace/load data/load xml 生效;针对对应的 ignore 语句失效。
3. 并非每个函数都可以使用,比如函数结果不确定的:NOW(),CONNECTION_ID(),CURRENT_USER()。
4. 不适用于存储过程和存储函数。
5. 系统变量不适用。
6. 子查询不适用。
7. 外键动作(比如 ON UPDATE, ON DELETE) 不适用。
8. enforced 默认启用,如果单独加上 not enforced ,check 约束失效。
Q4: 小议Oracle外键约束修改行为(一)
Oracle的外键用来限制子表中参考的字段的值 必须在主表中存在 而且在主表的记录发生变化导致外键参考唯一约束值发生了变化时 定义了一系列的动作
在SQL 标准中定义了几种外键改变后 如何处理子表记录的动作 其中包括
限制Restrict 这种方式不允许对被参考的记录的键值执行更新或删除的操作 置为空Set to null 当参考的数据被更新或者删除 那么所有参考它的外键值被置为空
置为默认值Set to default 当参考的数据被更新或者删除 那么所有参考它的外键值被置为一个默认值
级联Cascade 当参考的数据被更新 则参考它的值同样被更新 当参考的数据被删除 则参考它的子表记录也被删除
不做操作No action 这种方式不允许更新或删除被参考的数据 和限制方式的区别在于 这种方式的检查发生在语句执行之后 Oracle默认才会的方式就是这种方式
Oracle明确支持的方式包括No action Set to null和Cascade 对于Set to Default和Restrict Oracle的约束类型并不直接支持 不过可以通过触发器来实现
简单看一下Oracle的默认处理方式No action
SQL CREATE TABLE T_P (ID NUMBER NAME VARCHAR ( ));
表已创建
SQL ALTER TABLE T_P ADD PRIMARY KEY (ID);
表已更改
SQL CREATE TABLE T_C (ID NUMBER FID NUMBER NAME VARCHAR ( ));
表已创建
SQL ALTER TABLE T_C ADD CONSTRAINT FK_T_C FOREIGN KEY (FID) REFERENCES T_P (ID);
表已更改
SQL INSERT INTO T_P VALUES ( A );
已创建 行
SQL INSERT INTO T_P VALUES ( B );
已创建 行
SQL INSERT INTO T_C VALUES ( A );
已创建 行
SQL MIT;
提交完成
对于No Action操作而言 如果主键的记录被外键所参考 那么主键记录是无法更新或删除的
SQL DELETE T_P WHERE ID = ;DELETE T_P WHERE ID = *第 行出现错误:ORA : 违反完整约束条件 (YANGTK FK_T_C) 已找到子记录日志
SQL UPDATE T_P SET ID = WHERE ID = ;UPDATE T_P SET ID = WHERE ID = *第 行出现错误:ORA : 违反完整约束条件 (YANGTK FK_T_C) 已找到子记录日志
SQL DELETE T_P WHERE ID = ;
已删除 行
不过No Action又和Restrict操作有所区别 No Action允许用户执行语句 在语句执行之后 或者事务结束的时候才会检查是否违反约束 而Restrict只有检测到有外键参考主表的记录 就不允许删除和更新的操作执行了
这也使得No Action操作支持延迟约束
SQL ALTER TABLE T_C DROP CONSTRAINT FK_T_C;
表已更改
SQL ALTER TABLE T_C ADD CONSTRAINT FK_T_C FOREIGN KEY (FID) REFERENCES T_P (ID) DEFERRABLE INITIALLY DEFERRED;
表已更改
SQL SELECT * FROM T_P;
ID NAME A
SQL SELECT * FROM T_C;
ID FID NAME A
SQL DELETE T_P WHERE ID = ;
已删除 行
SQL INSERT INTO T_P VALUES ( A );
已创建 行
SQL MIT;
提交完成
lishixinzhi/Article/program/Oracle/201311/17487
oracle怎么修改约束的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于oracle5种约束、oracle怎么修改约束的信息别忘了在本站进行查找喔。






