Oracle DML语句(insert、update、delete)详解 【序列起始不为 “ 1 ”】

DML语句

数据操纵语言用于插入 修改 删除 数据

数据操纵语言是最常用的SQL命令

1.insert 插入

往数据库中,插入一条记录

insert into 表名(字段1,字段2) values(字段1,字段2);
	--创建t_table
	create t_table(
		id number(4),
		name varchar2(20),
		age number(2)
	);
	
	--插入数据
	insert into t_table (id,name,age) values (1,'Tom',18);
	--省略字段		(如果插入时,字段省略,默认插入所有字段数据)
	insert into t_table values (2,'John',19);
	--插入部分字段   (插入的时候,字段和字段值一致)
	insert into t_table (id,name) values (3,'Amy'); 

1.1注意事项

  1. 插入执行后,数据并没有提交到数据库,需要**点击commit**把数据提交到数据库
  2. 字符串需要用‘’包裹
  3. 插入的时候,字段和字段值一致
  4. 如果插入时,字段省略默认插入所有字段数据
  5. 指定字段则只插入相应字段数据

1.2插入多条数据记录

-- select 字段1,字段2… 数据出处表名;  把数据出处表名中的数据查出来 
-- 把查出来的数据插入到数据接收表名
insert into 【数据接收表名】(字段1,字段2) select 字段1,字段2from 【数据出处表名】
--创建表t_table_copy
create table t_copy_table(
	id number(4),
    name varchar(20),
    age number(2)
);

--复制命令
insert into t_table_copy(id,name) select id,name from t_table;

1.3复制表结构和数据

  • 复制结构和数据
--select * from t_table	查询表中的数据
--crate table t_table_copy	创建表
crate table t_table_copy as select * from t_table;
  • 复制表结构
create table t_table_copy as select * from t_table where 1 != 1;

1.4序列

是oracle 独有,通过插入实现主键自动增长的操作

1.4.1创建序列
  1. 右侧对象栏 --> Squence --> 右键 --> 新建

在这里插入图片描述

  1. 填入数据 --> 应用
    在这里插入图片描述
  • seq_stu.nextval 下一个序列的值 (重点)
  • seq_stu.currval 当前会话的序列值
1.4.2dual伪表
-- 查看下一个序列是多少? 
-- dual  伪表 (专门用来 测试 我们的sql 一些数据或者函数 )
-- 可以通过 下一个序列的值 实现自增 
select seq_stu.nextval  from dual; 
1.4.3序列起始不为 “ 1 ”

Oracle11.2.0.1版本开始,提供了一个“延迟段创建”特性:即
当我们创建了新的表(table)和序列(sequence),
在插入(insert)语句时,序列会跳过第一个值(1)。
所以结果是插入的序列值从 2(序列的第二个值) 开始, 而不是 1开始。

  • 解决方法
    • 创建表时让seqment立即执行,
      SEGMENT CREATION IMMEDIATE;
		 create table t_user(
             id number(3)  primary key,
             name varchar2(20)
         )--这里没有“;”	
         SEGMENT CREATION IMMEDIATE;
1.4.4注意事项
  1. 每次执行序列 会自动增长

  2. 序列本身是一个变化的数据 可以独立使用

  3. nextval 获取下一序列 currval 获取当前的序列 从新开始了一个会话 不能获取 当前会话序列currval 需要先获取下一个序列 才可以 currval

  4. 创建序列时候 默认从2开始 解决(创建表的时候 添加 SEGMENT CREATION IMMEDIATE

2.update 修改

update 表名 set 字段1 = 字段值1,字段2 = 字段值2 where 判断条件;

--修改单个字段
update t_table set age = 19 where id = 1;
--修改多个字段
update t_table set age = 18, name = ‘Tom’ where id = 4;

2.1注意事项

  1. 1.更新数据后 数据修改 一定要点击 commit 按钮 (事务按钮)
  2. 修改的时候 一定给添加 where 判断条件;(如果多个条件满足 把满足的数据 都进行修改 如果没有写where 把表中的所有的数据都修改了
  3. 一般修改都是以 主键为条件

3.delete 删除

delete from 表名 where 判断条件

delete from t_table where id = 4;

3.1注意事项

  1. 删除数据后,点击提交按钮 (事务按钮)
  2. 没有where条件时,删除所有数据

3.2delete & truncate 的区别

  • delete删除:先将删除的数据放在内存中,执行commit删除数据库
  • truncate:直接删除数据,不经过内存环节
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值