• 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也没有这个功能,我们也可以通过触发器去实现,这个下次再聊

  • 相关阅读:
    探秘高逼格艺术二维码的制作过程-AI绘画文生图
    『忘了再学』Shell基础 — 21、变量的测试与内容置换
    Intel汇编-在字符串中搜索一个字符
    快速排序及优化
    【SA8295P 源码分析】129 - GMSL2 协议分析 之 Video Frame 帧数据结构分析 & PCLK 计算公式
    CRUD-SQL
    可以为一个servlet定义多个servlet-mapping、或url-pattern
    CSR格式如何更新? GES图计算引擎HyG揭秘之数据更新
    Phar反序列化学习
    ES查询时,通过response.getHits().getTotalHits()获取总条目结果始终为0
  • 原文地址:https://blog.csdn.net/u013796074/article/details/125888102