• Mysql和Oracle实现序列自增


    /*ORACLE设置自增序列

    oracle本身不支持如mysql的AUTO_INCREMENT自增方式,我们可以用序列加触发器的形式实现,

    假如有一个表 T_WORKMATES,我们需要让学号PNO自增*/

    --创建序列 SEQ_PNO

    CREATE SEQUENCE SEQ_PNO

    minvalue 1 --最小值为1

    nomaxvalue --不设置最大值

    START WITH 1 --从1开始计数

    INCREMENT BY 1 --每次加1个

    nocycle --一直累加,不循环

    nocache;--不建缓冲区

    --创建触发器TRI_PNO

    CREATE

    OR REPLACE TRIGGER TRI_PNO

      BEFORE INSERT ON T_WORKMATES REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW

    BEGIN

    SELECT

    SEQ_PNO.NEXTVAL INTO : NEW.PNO

    FROM

    DUAL;

    END TRI_PNO;

    ---创建表

    CREATE TABLE T_WORKMATES (

       PNO INT ,

       PNAME VARCHAR(100) NOT NULL,

       PSEX VARCHAR(40)

    ) ;

    --插入数据

    INSERT INTO T_WORKMATES (PNO,PNAME,PSEX) VALUES ('','王盼东','男' ) ;

    INSERT INTO T_WORKMATES (PNO,PNAME,PSEX) VALUES ('','刘德华','男' ) ;

    INSERT INTO T_WORKMATES (PNO,PNAME,PSEX) VALUES ('','巩 俐','女' ) ;

    --检查数据

    SELECT * FROM T_WORKMATES  ;

    --删除一条数据并插入再重新检查

    DELETE FROM T_WORKMATES T WHERE T.PNAME = '王盼东' ;

    INSERT INTO T_WORKMATES (PNO,PNAME,PSEX) VALUES ('','王盼东','男' ) ;

    SELECT * FROM T_WORKMATES  ;

     

    --我们发现删除再插入其序列还是一直增加的,这个是因为我们设置的序列只有自增功能,我们删除了数据并不影响序列的自增

     /*mysql可以直接用AUTO_INCREMENT实现自增,方法如下*/

     --创建数据表,对PNO序列进行自增

    CREATE TABLE IF NOT EXISTS T_WORKMATES (

       `PNO` INT UNSIGNED AUTO_INCREMENT,

       `PNAME` VARCHAR(100) NOT NULL,

       `PSEX` VARCHAR(40) NOT NULL,

       PRIMARY KEY ( `PNO` )

    ) ENGINE=INNODB DEFAULT CHARSET=UTF8 ;

    -- 插入数据

    INSERT INTO T_WORKMATES ( PNAME , PSEX) VALUES ('王盼东','男');

    INSERT INTO T_WORKMATES ( PNAME , PSEX) VALUES ('刘德华','男');

    INSERT INTO T_WORKMATES ( PNAME , PSEX) VALUES ('巩  俐','女');

    --查询插入数据

    SELECT * FROM t_workmates ;

    --删除一条数据并插入再次查询

    DELETE FROM  T_WORKMATES  WHERE PNAME = '刘德华' ;

    INSERT INTO T_WORKMATES ( PNAME , PSEX) VALUES ('刘德华','男');

    SELECT * FROM T_WORKMATES ;

     

    --我们发现删除再插入其序列还是一直增加的,这个是因为我们设置的序列只有自增功能,我们删除了数据并不影响序列的自增

    Mysql 创建表的时候可以用IF NOT EXISTS 去查询是否有这个数据表,oracle也没有这个功能,我们也可以通过触发器去实现,这个下次再聊

  • 相关阅读:
    Windows系统上运行appium连接iOS真机自动化测试
    Java并发编程—java异步Future的迭代过程
    【无标题】
    如何找到新媒体矩阵中存在的问题?
    Keithley2420吉时利2420数字源表
    鸿蒙应用开发之HTTP数据请求
    JAVA经典百题之判断质数
    “判断性别”Demo需求分析和初步设计(中)
    如何使用Vue CLI进行预渲染
    maven仓库的地址
  • 原文地址:https://blog.csdn.net/u013796074/article/details/125888102