mysql主键 oracle_MySQL 和 Oracle 主键自增长

1、MySQL

1)建表

auto_increment:每插入一条数据,客户表(customers)的主键id就自动增1,如下所示

1 create table customers -- 创建客户表

2 (

3 id int auto_increment primary key not null, -- auto_increment:自增长

4 name varchar(15)

5 );

6

2)测试(实例)

1 insert into customers(name) values("张三"),("李四");-- 向客户表中插入数据

2

3 select * from customers; -- 查询客户表

6a374e4d2624de2ee8bd083c543f19f7.png

2、Oracle

1)建表

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 create table student

2 (

3 id   number not null, -- 主键

4 name   varchar2(20),

5 birthday  date,

6 age     number(20),

7 phone varchar2(60),

8 email varchar2(10)

9 )

10 alter table student add constraint student_pk primary key (id); -- 主键

48304ba5e6f9fe08f3fa1abda7d326ab.png

2)创建序列

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 /*

2 --创建序列Sequence

3 create sequence student_id

4 minvalue 1 --最小值

5 nomaxvalue --不设置最大值(由机器决定),或 根据表字段的值范围设置 maxvalue

6 maxvalue 99999999 -- 最大值

7 start with 1 --从1开始计数,数值可变

8 increment by 1 --每次加1,数值可变

9 nocycle --一直累加,不循环

10 nocache; --不建缓冲区。 如果建立cache那么系统将自动读取cache值个seq,这样会加快运行速度;如果在单机中使用cache,或者oracle死了,那么下次读取的seq值将不连贯,所以不建议使用cache。

11 */

12

13

14 -- 创建序列

15 create sequence student_id

16 minvalue 1

17 nomaxvalue

18 increment by 1

19 start with 1

20 nocache;

48304ba5e6f9fe08f3fa1abda7d326ab.png

3)创建触发器 (以下三种方式都行)

格式:

create or replace trigger 触发器名

before insert on 表名 for each row when (new.表的自增长字段 is null)

begin

select 序列名.Nextval into:new.表的自增长字段 from dual;

end;

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 -- 方式一

2 create or replace trigger tg_insertId

3 before insert on student for each row when (new.id is null) -- 当id为NULL时触发

4 begin

5 select student_id.Nextval into:new.id from dual;

6 end;

7

8

9 -- 方式二

10 create or replace trigger tg_insertId

11 before insert on student for each row

12 begin

13 select student_id.Nextval into:new.id from dual;

14 end;

15

16

17 -- 方式三

18 create or replace trigger tg_insertId

19  before insert on student for each row

20 declare -- 声明

21  -- 局部变量(student表里的字段)

22 begin

23  if updating then

24       insert into student

25       values(student_id.nextval,

26              :old.name,

27          :old.sal, -- 假如student表 有该字段(举例、模板、样式)

28          :old.sex -- 假如student表 有该字段

29              );

30  end if;

31 end;

48304ba5e6f9fe08f3fa1abda7d326ab.png

4)测试(实例)

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 INSERT INTO student(name,birthday,age,phone,email)

2 VALUES('zhangsan',to_date('2018-01-10 19:55:45','yyyy-MM-dd hh24:mi:ss'),18,'13510086110','123456789@qq.com'); -- 插入数据

3

4 INSERT INTO student(name,birthday,age,phone,email)

5 VALUES('zhangsan',to_date('2018-01-11 19:55:45','yyyy-MM-dd hh24:mi:ss'),20,'13510086110','123456789@qq.com');

6

7

8 select * from student; -- 查询学生表

48304ba5e6f9fe08f3fa1abda7d326ab.png

或者

1 insert into student(seq,name,birthday,age,phone,email) -- 这是带上“自增长主键(seq)”的写法

2    values(student_id.Nextval,'zhangsan',to_date('2018-01-10 19:55:45','yyyy-MM-dd hh24:mi:ss'),18,'13510086110','123456789@qq.com');

99e89dc23b342b316fba2f6fc4a24ece.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值