序列是oracle专有的对象,它用来产生一个自动递增的数列
--在oracle中如果需要完成一个列的自增操作,必须要使用序列
/*
create sequence seq_name
increment by n 每次增长几
start with n 从哪个值开始增长
maxvalue n|nomaxvalue 10^27 or -1 最大值
minvalue n|no minvalue 最小值
cycle|nocycle 是否有循环
cache n|nocache 是否有缓存
*/
create sequence my_sequence
increment by 2
start with 1
--如何使用?
--注意,如果创建好序列之后,没有经过任何的使用,那么不能获取当前的值,必须要先执行nextval之后才能获取当前值
--查看当前序列的值
select my_sequence.currval from dual;
--获取序列的下一个值
select my_sequence.nextval from dual;
insert into emp(empno,ename) values(my_sequence.nextval,'hehe');
--查看序列状态
select seq_empcopy_id.currval from dual
--删除序列
drop sequence seq_empcopy_id;
SQL数据更新
Sql的数据更新包括数据插入、删除和修改3个操作.
▪ 往表中插入数据的语句是insert语句,方式有两种,一种是元组 值的插入,一种是查询结果的插入
1.新增语法
- 元组值的插入语法如下:
INSERT INTO table [(column [, column...])] VALUES (value [, value...]);
INSERT INTO "SCOTT"."EMP" ("EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO") VALUES ('7369', 'SMITH', 'CLERK', '7902', TO_DATE('1980-12-17 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '800', NULL, '20');
- ert语句把一个select语句的查询结果插入到一个基本表中,语法如下
Insert into tablename(column,..) select * from tablename2
--复制表结构和数据,不复制约束
CREATE TABLE TEMP AS SELECT * FROM EMP;
CREATE TABLE EMP4 AS SELECT * FROM EMP WHERE 1=1
--只复制表结构,不复制数据和约束
CREATE TABLE EMP3 AS SELECT * FROM EMP WHERE 1=2
2.删除语法
SQL的删除操作是指从基本表中删除元组,语法如下:
DELETE [FROM] table [WHERE condition];
▪ 其语义是从基本表中删除满足条件表达式的元组
▪ Delete from table 表示从表中删除一切元组
▪ 如果想从表中删除所有的行,不要使用delete,可使用truncate table 语句, 完成相同的工作,但是速度更快(没有事务)。
--DELETE语法
--删除所有表数据
DELETE FROM EMP4;
--删除部分表数据,撒谎才能胡部门编号位10 的所有数据
DELETE EMP1 WHERE DEPTNO =10
--TRUNCATE 这个是永久删除,没有事务,用这个比较危险,需要慎重使用
TRUNCATE TABLE EMP1;
3.更新语法
Update语句用于修改基本表中元组的某些列,其语法如下:
UPDATE
table SET column = value [, column = value] … [WHERE
condition];
▪ 其语义是:修改基本表中满足条件表达式的那些元组的列值,需 修改的列值在set子句中指出。
--UPDATE
--更新单个列的NEIRONG
UPDATE EMP SET ENAME='蓝胖次' WHERE EMPNO=7369;
--更新多字段
UPDATE EMP SET ENAME='蓝胖次',JOB='' WHERE EMPNO=7369;
--DML:数据库操作语言
--增
--删
--改
/*
插入操作:
元组值的插入
查询结果的插入
*/
--最基本的插入方式
--insert into tablename values(val1,val2,....) 如果表名之后没有列,那么只能将所有的列都插入
--insert into tablename(col1,col2,...) values(val1,val2,...) 可以指定向哪些列中插入数据
--但要求省略的列必须满足下面的条件:
--1.该列定义为允许Null值。
--2.在表定义中给出默认值,这表示如果不给出值,将使用默认值。
-- 如果不符合上面两个条件,将会报错。不能成功插入。
insert into emp values(2222,'haha','clerk',7902,to_date('2019-11-2','YYYY-MM-dd'),1000,500,10);
select * from emp;
--向部分列插入数据的时候,不是想向哪个列插入就插入的,要遵循创建表的时候定义的规范
insert into emp(empno,ename) values(3333,'wangwu')
--创建表的其他方式
--复制表同时复制表数据,不会复制约束
create table emp2 as select * from emp;
--复制表结构但是不复制表数据,不会复制约束
create table emp3 as select * from emp where 1=2;
/*
删除操作:
delete from tablename where condition
*/
--删除满足条件的数据
delete from emp2 where deptno = 10;
--把整张表的数据全部清空
delete from emp2;
--truncate ,跟delete有所不同,delete在进行删除的时候经过事务,而truncate不经过事务,一旦删除就是永久删除,不具备回滚的操作
--效率比较高,但是容易发生误操作,所以不建议使用
truncate table emp2
/*
修改操作:
update tablename set col = val1,col2 = val2 where condition;
可以更新或者修改满足条件的一个列或者多个列
*/
--更新单列
update emp set ename = 'heihei' where ename = 'hehe';
--更新多个列的值
update emp set job='teacher',mgr=7902 where empno = 15;
一次插入操作只插入一行