+ -------+---------------+------+-----+-------------------+-------+
| ID | NUMBER(10) | NO | PRI | "A_SEQ"."NEXTVAL" | NULL |
| NAME | VARCHAR2(480) | YES | NULL | NULL | NULL |
| AGE | NUMBER(10) | YES | NULL | NULL | NULL |
+ -------+---------------+------+-----+-------------------+-------+
3 rows in set( 0.013sec)
此处为修改表 tablename 中的 ID 值为序列 sequence_name 的下一个值 。具体而言,sequence_name.nextval 表示调用 sequence_name 序列的 nextval 函数,该函数返回序列的下一个值 。因此,执行述语句后,当 tablename 表中插入一行数据时,会自动为 ID 列赋值为 sequence_name 序列的下一个值 。
3、验证该方法是否达到自增列的效果 。
obclient [oboracle]> INSERTINTOAtable( NAME,AGE) VALUES( 'zhangsan', 18);
Query OK, 1 row affected (0.047 sec)
obclient [oboracle]> INSERTINTOAtable( NAME,AGE) VALUES( 'lisi', 19);
Query OK, 1 row affected (0.002 sec)
obclient [oboracle]> select* fromAtable;
+ ----+----------+------+
| ID | AME | AGE |
+ ----+----------+------+
| 10 | zhangsan | 18 |
| 11 | lisi | 19 |
+ ----+----------+------+
2 rows in set( 0.013sec)
3方法三:SEQUENCE + 触发器
OB 延用 Oracle 中创建触发器的方法达到自增列的效果,具体步骤如下:
1、首先创建一个序列 。
obclient [oboracle]> CREATESEQUENCEB_seq
-> MINVALUE1
-> MAXVALUE 999999
-> STARTWITH1
-> INCREMENTBY1;
Query OK, 0 rows affected (0.023 sec)
2、创建一个表 。
obclient [oboracle]> CREATETABLEBtable (
-> IDNUMBER,
-> NAMEVARCHAR2( 480),
-> AGE NUMBER( 10, 0)
-> );
Query OK, 0 rows affected (0.129 sec)
3、创建一个触发器,在每次向表中插入行时,触发器将自动将新行的 ID 列设置为序列的下一个值 。
obclient [oboracle]> CREATEORREPLACETRIGGERset_id_on_Btable
-> BEFOREINSERTONBtable
-> FOREACHROW
-> BEGIN
-> SELECTB_seq.NEXTVAL INTO:new.id FROMdual;
-> END;
-> /
Query OK, 0 rows affected (0.114 sec)
该触发器在每次向 Btable 表中插入行之前触发,通过 SELECT B_seq.NEXTVAL INTO :new.id FROM dual; 将 ID 列设置为 B_seq 序列的下一个值 。:new.id 表示新插入行的 ID 列,dual 是一个虚拟的表,用于生成一行数据用以存储序列的下一个值 。
4、验证该方法是否达到自增列的效果 。
obclient [oboracle]> INSERTINTOBtable( NAME,AGE) VALUES( 'zhangsan', 18);
Query OK, 1 row affected (0.111 sec)
obclient [oboracle]> INSERTINTOBtable( NAME,AGE) VALUES( 'lisi', 19);
Query OK, 1 row affected (0.002 sec)
obclient [oboracle]> select* fromBtable;
+ ------+----------+------+
| ID | NAME | AGE |
+ ------+----------+------+
| 1 | zhangsan | 18 |
| 2 | lisi | 19 |
+ ------+----------+------+
2 rows in set( 0.008sec)
4方法四:GENERATED BY DEFAULT AS IDENTITY 语法
1、在创建表时使用 GENERATED BY DEFAULT AS IDENTITY 语法来创建自增长的列 。
obclient [oboracle]> CREATETABLECtable (
-> IDNUMBERGENERATEDBYDEFAULTASIDENTITYMINVALUE1MAXVALUE 999999INCREMENTBY1STARTWITH1primary key,
-> NAMEVARCHAR2( 480),
-> AGE NUMBER( 10, 0)
-> );
Query OK, 0 rows affected (0.121 sec)
obclient [oboracle]> desc Ctable;
+ -------+---------------+------+-----+------------------+-------+
| FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA |
+ -------+---------------+------+-----+------------------+-------+
| ID | NUMBER | NO | PRI | SEQUENCE.NEXTVAL | NULL |
| NAME | VARCHAR2(480) | YES | NULL | NULL | NULL |
| AGE | NUMBER(10) | YES | NULL | NULL | NULL |
+ -------+---------------+------+-----+------------------+-------+
3 rows in set( 0.011sec)
2、验证该方法是否达到自增列的效果 。
obclient [oboracle]> INSERTINTOCtable( NAME,AGE) VALUES( 'zhangsan', 18);
Query OK, 1 row affected (0.015 sec)
obclient [oboracle]> INSERTINTOCtable( NAME,AGE) VALUES( 'lisi', 19);
Query OK, 1 row affected (0.001 sec)
obclient [oboracle]> select* fromCtable;
+ ----+----------+------+
| ID | NAME | AGE |
+ ----+----------+------+
推荐阅读
- 车臣到底是不是俄罗斯领土 车臣现在属于俄罗斯吗
- 船到桥头自然直下一句 船到桥头自然直19
- 2021年几月几号入伏到几号结束头伏饺子二伏面 2021年几月几号入伏到几号结束
- 李宗盛|离婚11年后,李宗盛娶小27岁美女:从少年到白头,我终于放下了你
- etc注销账户要到本地银行吗
- 湘西到底有没有僵尸??♀? 湘西到底有没有僵尸
- 怎么把文件刻录到光盘保存起来
- 怎么才能安慰自己
- 泸州老窖|重达几吨的翡翠原石,居然被1根细线切开!这是怎么做到的?
- 明星流量排行榜在哪里看的到