欢迎大家来到IT世界,在知识的湖畔探索吧!
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 ;

欢迎大家来到IT世界,在知识的湖畔探索吧!
–我们发现删除再插入其序列还是一直增加的,这个是因为我们设置的序列只有自增功能,我们删除了数据并不影响序列的自增
/*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也没有这个功能,我们也可以通过触发器去实现,这个下次再聊
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/110445.html