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);
----------------------------------------
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
--以下是工具生成的建表 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')
--查询