数据库oracle和mysql插入数据的区别?
mysql数据库主键字段是increament,则插入数据不需要插入主键字段。数据库会自动生成主键
oracle数据库主键字段必须创建序列,则插入数据必须插入主键字段。数据库根据序列自动生成主键
那么如何让oracle数据库插入数据像mysql一样实现主键自增呢?解决方法是:序列+触发器
1、创建表
CREATE TABLE Student
(S# varchar2(8) PRIMARY key,
Sname varchar2(10),
Ssex CHAR(3) CONSTRAINT ctssex CHECK(Ssex='男' OR Ssex='女'),
Sage number(2) CHECK(Sage>=1 AND Sage<150)
D# CHAR(3) REFERENCES Dept(D#) ON DELETE cascade,
Sclass varchar2(16));
CREATE TABLE Dept
(D# VARCHAR2(9) PRIMARY key,
Dname varchar2(30),
Dean varchar2(30));
CREATE TABLE Course
(C# varchar2(3) PRIMARY key,
Cname varchar2(12),
Chours numbers(2),
Credit number(3,1) CONSTRAINT ctscredit CHECK(Credit >=0.0 AND Credit <=5.0),
T# varchar2(3) REFERENCES Teacher(T#) ON DELETE cascade);
CREATE TABLE Teacher
(T# varchar2(9) PRIMARY key,
Tname varchar2(10),
D# varchar2(9),
Salary number(6,2)
FOREIGN KEY(D#) REFERENCES Dept(D#) ON DELETE cascade)
CREATE TABLE SC
(S# varchar2(8) PRIMARY key,
C# VARCHAR2(3),
Score number(4,1) CONSTRAINT ctsscore CHECK(Score <=0.0 AND Score <=100.0),
FOREIGN KEY(S#) REFERENCES Student(S#) ON DELETE cascade,
FOREIGN KEY(C#) REFERENCES Course(C#) ON DELETE cascade)
2.创建序列
create sequence dept_seq
start with 1
increment by 1
nocache
nocycle
order
备注:
minvalue 1 -----最小值
maxvalue 9999999999999999999999999999 ------最大值
increment by 1 -----每次加几个
start with 1 -----从几开始
cache 20 -----缓存值多少
noorder -----一直累加,不排序
nocycle ; --一直累加不循环
3.创建触发器
create or replace trigger i_dept_tg
before insert on tuster.dept
for each row
begin
select to_char(dept_seq.nextval,'fm99') into :new.D# from dual;
end;