sql oracle 主键 索引的区别,oracle 主键索引和unique 索引 和sql server 主键的异同

SQL> create table test2(

2  id int,

3  name varchar2(10)

4  );

表已创建。

SQL> alter table test2 add constraint test2_id   primary key (id);

表已更改。

SQL> insert into test2 values(1,'1');

已创建 1 行。

SQL> insert into test2 values(3,'3');

已创建 1 行。

SQL> select rowid,id from test2;

ROWID                      ID

------------------ ----------

AAARW+AABAAAVfKAAA          1

AAARW+AABAAAVfKAAB          3

SQL> insert into test2 values(2,'2');

已创建 1 行。

SQL> select rowid,id from test2;

ROWID                      ID

------------------ ----------

AAARW+AABAAAVfKAAA          1

AAARW+AABAAAVfKAAC          2

AAARW+AABAAAVfKAAB          3

SQL> insert into test2 values(6,'6');

已创建 1 行。

SQL> insert into test2 values(7,'7');

已创建 1 行。

SQL> insert into test2 values(4,'4');

已创建 1 行。

SQL> select * from test2;

ID NAME

---------- --------------------

1 1

3 3

2 2

6 6

7 7

4 4

SQL> select rowid,id,name from test2;

ROWID                                      ID NAME

------------------ ---------- --------------------

AAARW+AABAAAVfKAAA          1    1

AAARW+AABAAAVfKAAB          3    3

AAARW+AABAAAVfKAAC          2    2

AAARW+AABAAAVfKAAD          6    6

AAARW+AABAAAVfKAAE          7     7

AAARW+AABAAAVfKAAF          4     4

已选择6行。

这说明 oracle创建的主键 不是聚集索引,而是普通的 b树索引,因为 插入后的数据不按主键的聚集 存储,通过工具查看 oracle主键只是一个 不可为空的唯一索引 且按照 rowed 升序排列

DROP TABLE SYS.TEST2 CASCADE CONSTRAINTS;

CREATE TABLE SYS.TEST2

(

ID   NUMBER (38) NOT NULL,

NAME VARCHAR2 (10),

CONSTRAINT TEST2_ID PRIMARY KEY (ID)

)

TABLESPACE SYSTEM

LOGGING

NOCACHE

STORAGE (BUFFER_POOL DEFAULT);

0818b9ca8b590ca3270a3433284dd417.png

----------------------------------------

SQL> create table test3(

2  id int,

3  name varchar2(10)

4  );

表已创建。

SQL> alter table test3 modify id unique;

SQL> insert into test3 (name) values('1');

已创建 1 行。

SQL> insert into test3 (name) values('2');

已创建 1 行。

oracle  的 unique 索引可以插入 null 值 ,而primary  key 却不可以

SQL> select rowid ,id,name from test3;

ROWID                      ID NAME

------------------ ---------- --------------------

AAARXCAABAAAVvKAAA            1

AAARXCAABAAAVvKAAB            2

同样的问题 归于 sql server

0818b9ca8b590ca3270a3433284dd417.png

--以下是工具生成的建表 sql

USE [sl]

GO

/****** 对象:  Table [dbo].[test2]    脚本日期: 07/05/2011 23:48:17 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

SET ANSI_PADDING ON

GO

CREATE TABLE [dbo].[test2](

[id] [int] NOT NULL,

[name] [varchar](50) NULL,

CONSTRAINT [PK_test2] PRIMARY KEY CLUSTERED

(

[id] ASC

)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

SET ANSI_PADDING OFF

--插入数据

insert into test2 values(1,'1')

insert into test2 values(3,'3')

insert into test2 values(2,'2')

insert into test2 values(6,'6')

insert into test2 values(7,'7')

insert into test2 values(4,'4')

--查询

0818b9ca8b590ca3270a3433284dd417.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值