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