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

  • 相关阅读:
    一些框架使用总结
    Python 文件介绍和正则表达式
    图像处理与视觉感知复习--频率域图像增强&图像变换
    计算机毕业设计python基于django的学生考试成绩数据分析与可视化系统
    区块链是如何演化的?
    操作系统(5-7分)
    DjangoRestFramework框架三种分页功能的实现 - 在DjangoStarter项目模板中封装
    美国多ip站群vps的五大优势
    如何ES源码中添加一个自己的API 流程梳理
    药品企业中的计算机系统验证管理规程
  • 原文地址:https://blog.csdn.net/u013796074/article/details/125888102