查看: 609|回复: 1

[oracle] oracle建表语句,id是自动增长

 关闭 [复制链接]

该用户从未签到

发表于 2016-3-22 16:27:24 | 显示全部楼层 |阅读模式
SQL> CREATE SEQUENCE test_sequence2
  2    increment by 1    -- 每次递增1
  3    start with 1       -- 从1开始
  4    nomaxvalue      -- 没有最大值
  5    minvalue 1       -- 最小值=1
  6    NOCYCLE;      -- 不循环

Sequence created.

SQL> CREATE TABLE test_create_tab2 (
  2    id   INT,
  3    val  VARCHAR(10),
  4    PRIMARY KEY (id)
  5  );

Table created.

SQL> CREATE OR REPLACE TRIGGER BeforeTestCreate2Insert
  2    BEFORE INSERT ON test_create_tab2
  3  FOR EACH ROW
  4  BEGIN
  5    SELECT test_sequence2.nextval INTO :new.id  FROM dual;
  6  END;
  7  /

Trigger created.

SQL> INSERT INTO test_create_tab2(val) VALUES ('NO id');

1 row created.

SQL> INSERT INTO test_create_tab2(id, val) VALUES (1, 'id no use');

1 row created.

SQL> SELECT * FROM test_create_tab2;

        ID VAL
---------- --------------------
         1 NO id     
         2 id no use


用于 MySQL 的语法
下列 SQL 语句把 "Persons" 表中的 "P_Id" 列定义为 auto-increment 主键:
CREATE TABLE Persons
(
P_Id int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)
//接在建表语句后面AUTO_INCREMENT = 100;(ID列从100开始自增)
MySQL 使用 AUTO_INCREMENT 关键字来执行 auto-increment 任务。
默认地,AUTO_INCREMENT 的开始值是 1,每条新记录递增 1。
要让 AUTO_INCREMENT 序列以其他的值起始,请使用下列 SQL 语法:
ALTER TABLE Persons AUTO_INCREMENT=100

要在 "Persons" 表中插入新记录,我们不必为 "P_Id" 列规定值(会自动添加一个唯一的值):
INSERT INTO Persons (FirstName,LastName)
VALUES ('Bill','Gates')
上面的 SQL 语句会在 "Persons" 表中插入一条新记录。"P_Id" 会被赋予一个唯一的值。"FirstName" 会被设置为 "Bill","LastName" 列会被设置为 "Gates"。

DB2中是这样写的
Create table FA_EXCEPTION_LOG (
    ID                             INTEGER             NOT NULL   
        generated by default as identity (start with 1, increment by 1, cache 20),
    ORG_ID                         DECIMAL(10,0)                   ,
    USER_ID                        DECIMAL(10,0)                   ,
    REC_DATETIME                   VARCHAR(22)                     ,
    CODE                           VARCHAR(50)                     ,
    CLS                            VARCHAR(20)                     ,
    MODULAR                        VARCHAR(40)                     ,
    DESCN                          VARCHAR(200)                    ,
    JAVA_EXCE                      VARCHAR(256)                    ,
    ERR_MSG                        VARCHAR(1000)                   )
tablespace TSPCAP4J01   ;



  • TA的每日心情
    奋斗
    2018-1-13 01:07
  • 签到天数: 178 天

    连续签到: 1 天

    [LV.7]常住居民III

    查看他的品牌

    发表于 2017-5-22 06:52:23 | 显示全部楼层
    如果是大型项目的开发,一般会把触发器开发放到最低优先级,有其他实现方式绝不使用触发器。出于触发器比较隐蔽,常被忽略,有需求变更后的隐形风险。
    一般情况是封装成procedure。XXX序列.nextval into 一个变量中,insert语句使用用这个变量。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    站长推荐上一条 /1 下一条