ORACLE 12C基础
admin
2023-04-22 14:03:03
0

1.CON_ID,0为cdb,1为cdb$root, 2为pdb seed,3以上为pdb
2.自增长列
ORACLE 12C基础
在12c之前,Oracle只能通过sequence来实现这个功能
sys@newtestCDB> create table test(id number generated always as identity , name varchar2(20));

Table created.

Elapsed: 00:00:00.04
sys@newtestCDB> insert into test(name) values('smith');

1 row created.

Elapsed: 00:00:00.01
sys@newtestCDB> insert into test(name) values('smith3');

1 row created.

Elapsed: 00:00:00.01
sys@newtestCDB> insert into test(name) values('smith4');

1 row created.

Elapsed: 00:00:00.01
sys@newtestCDB> select * from test;

    ID NAME

     1 smith
     2 smith3
     3 smith4

Elapsed: 00:00:00.02
sys@newtestCDB> update test set id=1 where id=2;
update test set id=1 where id=2
*
ERROR at line 1:
ORA-32796: cannot update a generated always identity column

Elapsed: 00:00:00.03
sys@newtestCDB> insert into test(id,name) values(null,'smith4');
insert into test(id,name) values(null,'smith4')
*
ERROR at line 1:
ORA-32795: cannot insert into a generated always identity column

Elapsed: 00:00:00.01
sys@newtestCDB> insert into test(id,name) values(2,'smith4');
insert into test(id,name) values(2,'smith4')
*
ERROR at line 1:
ORA-32795: cannot insert into a generated always identity column
sys@newtestCDB> delete from test where id=3;

1 row deleted.

Elapsed: 00:00:00.03
sys@newtestCDB> insert into test(name) values('smith5');

1 row created.

Elapsed: 00:00:00.01
sys@newtestCDB> select * from test;

    ID NAME

     2 smith3
     4 smith5

Elapsed: 00:00:00.01
结论:
GENERATED ALWAYS AS IDENTITY 可以不指定该列进行插入
GENERATED ALWAYS AS IDENTITY不能在该列中插入NULL值
GENERATED ALWAYS AS IDENTITY不能指定具体值插入
GENERATED ALWAYS AS IDENTITY 不能使用update更新该列
sys@newtestCDB> create table test(id number generated by default as identity , name varchar2(20));

Table created.

Elapsed: 00:00:00.03
sys@newtestCDB> insert into test(name) values('smith');

1 row created.

Elapsed: 00:00:00.01
sys@newtestCDB> insert into test(name) values('smith3');

1 row created.

Elapsed: 00:00:00.01
sys@newtestCDB> insert into test(name) values('smith4');

1 row created.

Elapsed: 00:00:00.01
sys@newtestCDB> insert into test(id,name) values(null,'smith4');
insert into test(id,name) values(null,'smith4')
*
ERROR at line 1:
ORA-01400: cannot insert NULL into ("SYS"."TEST"."ID")

Elapsed: 00:00:00.02
sys@newtestCDB> insert into test(id,name) values(2,'smith3');

1 row created.

Elapsed: 00:00:00.01
sys@newtestCDB> update test set id = NULL where id=2;
update test set id = NULL where id=2
*
ERROR at line 1:
ORA-01407: cannot update ("SYS"."TEST"."ID") to NULL
结论:
GENERATED BY DEFAULT AS IDENTITY 可以不指定该列进行插入
GENERATED BY DEFAULT AS IDENTITY不能在该列中插入NULL值
GENERATED BY DEFAULT AS IDENTITY 可以指定具体值插入
GENERATED BY DEFAULT AS IDENTITY 可以使用update更新该列,但不能更新为NULL
sys@newtestCDB> create table test(id number generated by default ON NULL as identity , name varchar2(20));

Table created.

Elapsed: 00:00:00.03
sys@newtestCDB> insert into test(id,name) values(null,'smith4');

1 row created.

Elapsed: 00:00:00.01
结论:

GENERATED BY DEFAULT ON NULL AS IDENTITY 可以不指定该列进行插入
GENERATED BY DEFAULT ON NULL AS IDENTITY 方式可以指定具体值插入
GENERATED BY DEFAULT ON NULL AS IDENTITY 可以在该列中插入null值
GENERATED BY DEFAULT ON NULL AS IDENTITY 可以使用update更新该列
sys@newtestCDB> col tablename format A20
sys@newtestCDB> col table_name format A20
sys@newtestCDB> col sequence_name format A20
sys@newtestCDB> SELECT a.name AS table_name,
2 b.name AS sequence_name
3 FROM sys.idnseq$ c
4 JOIN obj$ a ON c.obj# = a.obj#
5 JOIN obj$ b ON c.seqobj# = b.obj#
6 where a.name='TEST';

TABLE_NAME SEQUENCE_NAME


TEST ISEQ$$_83962

Elapsed: 00:00:00.01
sys@newtestCDB> create table test(id number generated by default as identity , name varchar2(20));

Table created.

Elapsed: 00:00:00.03
sys@newtestCDB> SELECT a.name AS table_name,
2 b.name AS sequence_name
3 FROM sys.idnseq$ c
4 JOIN obj$ a ON c.obj# = a.obj#
5 JOIN obj$ b ON c.seqobj# = b.obj#
6 where a.name='TEST';

TABLE_NAME SEQUENCE_NAME


TEST ISEQ$$_83964

Elapsed: 00:00:00.01
sys@newtestCDB> SELECT object_name, object_type FROM user_objects where object_name='ISEQ$$_83964';

OBJECT_NAME

OBJECT_TYPE

ISEQ$$_83964
SEQUENCE

Elapsed: 00:00:00.05
sys@newtestCDB> drop table test;

Table dropped.

Elapsed: 00:00:00.04
sys@newtestCDB> SELECT object_name, object_type FROM user_objects where object_name='ISEQ$$_83964';

no rows selected

Elapsed: 00:00:00.00
sys@newtestCDB> create table test(id number generated by default as identity , name varchar2(20));

Table created.

Elapsed: 00:00:00.06
sys@newtestCDB> SELECT a.name AS table_name,
2 b.name AS sequence_name
3 FROM sys.idnseq$ c
4 JOIN obj$ a ON c.obj# = a.obj#
5 JOIN obj$ b ON c.seqobj# = b.obj#
6 where a.name='TEST';

TABLE_NAME SEQUENCE_NAME


TEST ISEQ$$_83966

Elapsed: 00:00:00.01
sys@newtestCDB> drop SEQUENCE ISEQ$$_83966;
drop SEQUENCE ISEQ$$_83966
*
ERROR at line 1:
ORA-32794: cannot drop a system-generated sequence

Elapsed: 00:00:00.02
结论:
Identity Columns 是基于序列实现的
GENERATED IDENTITY 中sequence不能单独被删除
GENERATED IDENTITY 中sequence 表被删除时同时删除
ORACLE 12C基础这是12.1的图,12.2还有新变化

相关内容

热门资讯

终于了解“钱潮十三水到底是不是... 家人们!今天小编来为大家解答钱潮十三水透视挂怎么安装这个问题咨询软件客服徽4282891的挂在哪里买...
我来教教您“新猴王拼三张辅助器... 家人们!今天小编来为大家解答新猴王拼三张透视挂怎么安装这个问题咨询软件客服徽9752949的挂在哪里...
终于懂了“吉林白山麻将辅助器?... 家人们!今天小编来为大家解答吉林白山麻将透视挂怎么安装这个问题咨询软件客服徽9752949的挂在哪里...
最新引进“笑傲江湖开挂神器?”... 您好:笑傲江湖这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这款游戏...
今日重磅消息“来趣广西麻将到底... 您好:来趣广西麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9784099】很多玩家在这款...
今日重磅消息“麻辣竞技究竟有挂... 有 亲,根据资深记者爆料麻辣竞技是可以开挂的,确实有挂(咨询软件无需打开...
终于懂了“南通快胡麻将究竟有挂... 终于懂了“南通快胡麻将究竟有挂吗?”(详细开挂教程)您好,南通快胡麻将这个游戏其实有挂的,确实是有挂...
【第一财经】“么么都莱游戏怎么... 有 亲,根据资深记者爆料么么都莱游戏是可以开挂的,确实有挂(咨询软件无需...
【第一财经】“同城游比鸡真的有... 【第一财经】“同城游比鸡真的有挂吗?”(必胜开挂神器)您好,同城游比鸡这个游戏其实有挂的,确实是有挂...
【第一资讯】“游戏茶苑真的有挂... 有 亲,根据资深记者爆料游戏茶苑是可以开挂的,确实有挂(咨询软件无需打开...