oracle外键必须手工设置索引

navicat for mysql索引类型有  1. Normal    2. Unique  3. Full Text

外键是指定义外键的表的列的值必须在另一个表中出现。
被参照的表称之为父表(parent table),创建外键的表称之为子表(child table)。子表中的外键关联了父表中的主键。
一般在创建表时定义外键

一般的情况下,表的主键是必要的,没有主键的表可以说是不符合设计规范的
一个表只能有一个PRIMARY KEY,但可以有多个UNIQUE KEY
Primary key的(单列注解,或 多列 作为联合主键)必须为NOT NULL(oracle和mysql都适用, 即设置多列为联合主键)

有主键约束和唯一性约束(1列或多列),则Oracle 则会自动在相应的约束列上 加上唯一索引,
即你在keys下添加主键/唯一 约束, 会在indexes下直接看到 
(对于 navicat for mysql在 索引设置处 看不到主键列 已成为索引, 看不到 不代表它不存在)。

但对于外键约束,无论是mysql还是oracle, 都不会自动建立索引(oracle-pl/sql在indexes下也看不到, navicat for mysql在索引列也看不到),
必须到indexes下 手工建立索引(对于navicat for mysql会在你创建好外键,保存时, 提示你是否为外键添加必要的索引,点击确定 跳转到索引设置标签页,
添加索引就可以了), 总之 无论mysql还是oracle外键必须手动添加索引,这是常识。
如我们的pm_templet_id表的外键templet_id就是外键,一定要添加唯一索引.

navicat for mysql 在字段列只能创建主键    索引需要在索引设置 标签页, 单独设置

如下是 pl/sql oracle的keys于indexes设置

扫描二维码关注公众号,回复: 9037106 查看本文章

keys共3中 主键Primary Key  外键 Foreign  唯一索引 Unique 


index 有3中  Normal 一般索引  Unique唯一索引 Bitmap位图索引

Oracle建立自增主键(sequence和触发器(触发器是作用于某个表的触发器)都要用,)

首先,你要有一张表!
CREATE TABLE example(
ID Number(4) NOT NULL PRIMARY KEY,
NAME VARCHAR(25),
PHONE VARCHAR(10),
ADDRESS VARCHAR(50));
如果对于以上的建表语句还有疑问的话,建议您不要继续了!有那么些时间您还不如去看看金庸读读琼瑶!
然后,你需要一个自定义的sequence
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXVALUE -- 不设置最大值
NOCYCLE -- 一直累加,不循环
NOCACHE -- 不建缓冲区
以上代码完成了一个序列(sequence)的建立过程,名称为emp_sequence,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,如果你设置了最大值那么你可以用cycle 会使seq到最大之后循环.

对于nocache顺便说一下如果你给出了cache值那么系统将自动读取你的cache值大小个seq
,这样在反复操作时会加快运行速度,但如果遭遇意外情况如当机了或oracle死了,则下次取出的seq值将和上次的不连贯.(如果连不连贯无所谓建议用cache,因为时间就是金钱呀!跑题了!)


书接上文,你只有了表和序列还不够,还需要一个触发器来执行它!代码如下:
CREATE TRIGGER "触发器名称" BEFORE
INSERT ON example FOR EACH ROW WHEN (new.id is null)
begin
select emp_sequence.nextval into: new.id from dual;
end;
打完收工!下面你就试试插入数据吧!
INSERT INTO example(Name,phone,address) Values('Cao','56498543','Heibei');

发布了78 篇原创文章 · 获赞 12 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_29883183/article/details/88655675
今日推荐