ORACLE数据库数据操作语言DML

时间:2022-09-30 18:44:03

-------------------数据操作语言---------------------------------

SQL 数据操作语言(data manipulation language,DML)
包括:(INSERT) (DELETE) (UPDATE)
ORACLE11g中还包括:(TRUNCATE) (CALL) (EXPLAIN PLAN) (LOCK TABLE) (MERGE)

-------------------INSERT 语句

INSERT语句用于完成各种向数据表中插入数据的功能。

1.一般的INSERT语句

语法结构:
--INSERT INTO [user.]table [@db_link] [(column1[,column2]...)]
--VALUES(express1[,express2]...)

其中,table是要插入的表名;db_link表示数据库链接名;column1,column2表示表的列名;
VALUES表示要插入的值。
INSERT INTO EMP(EMPNO,ENAME) VALUES(9999,'MIQIYA');
SELECT * FROM EMP;--查询到EMP 中多了9999 这一行记录,且其余字段处以空格补充。
也可以省略INSERT INTO后的列表清单,但必须根据表中定义的列的顺序,为所有的列提供数据。
可以使用DESC在命令窗口处查看表中定义列的顺序,(DESC 表名)。
这种方法如果VALUES子句少指定了一个列的值,则执行时会出错;
INSERT INTO EMP VALUES(9999,'','','','','','','');
INSERT INTO EMP VALUES(9999,'','','','','','');--ORA-00947: 没有足够的值
注意:如果没有按照正确的顺序提供各列的插入值,那么插入操作可能会失败,但也可能会成功,
即使插入成功也会是一条错误的数据。
插入数据时也还要注意表中的相关约束,违反约束也会插入不成功。

2.批量INSERT

--INSERT INTO [user.]table [@db_link] [(column1[,column2]...)] subquery;
subquery是子查询语句,可以是任何合理的SELECT语句,其所选列的个数和类型应该与前面的column相对应。
CREATE TABLE EMP_DEPARTMENT(
DEPTNO NUMBER(2),
DNAME VARCHAR2(14),
LOC VARCHAR2(13)
);
INSERT INTO EMP_DEPARTMENT SELECT DEPTNO,DNAME,LOC FROM DEPT WHERE DEPTNO=30;
SELECT * FROM EMP_DEPARTMENT;--这就给表添加了一行数据;
注意:使用INSERT和SELECT的组合语句成批量添加数据时,INSERT INTO 指定的列名可以与SELECT指定的列名不同,但其数据类型必须相匹配,
即SELECT返回的数据必须满足表中列的约束。

--------------UPDATE 语句 -----

语法格式:
--UPDATE table_name
--SET {column1=express1[,column2=express2]
--(column1[,column2])=(select query)}
--[WHERE condition]

UPDATE后面指定要修改的表名称,需要跟一个或多个要修改的表名称。
SET后用于设置更新的列以及各列的新值。
WHERE后跟更新限定条件,可以没有。
UPDATE EMP SET SAL=SAL*1.5 WHERE SAL<2000;
UPDATE EMP SET SAL=8000,ENAME='MIKIYA' WHERE ENAME='SCOTT';
UPDATE EMP SET (SAL,ENAME)=(SELECT SAL,ENAME FROM EMP WHERE ENAME='BLAKE') WHERE ENAME='SCOTT';--这个必须跟SQL子查询语句;
SELECT * FROM EMP;
注意:如果更新表的数据时,没有使用WHERE子句限定修改的行,则会更新整个表。
UPDATE 也可以使用SELECT语句的查询来更新数据;
UPDATE EMP SET SAL=(SELECT AVG(SAL) FROM EMP) WHERE EMPNO=7902;
注意:在使用SELECT语句进行更新时,必须保证SELECT语句返回单一的值,否则会出现错误。

------------------DELETE 语句-------

语法结构:
--DELETE FROM table_name
--[WHERE condition]

其中,关键字DELETE FROM后必须要跟需要删除的表名。
下面的集中写法都是可以的。
DELETE DEMO ;
DELETE FROM DEMO ;
DELETE DEMO WHERE N=2;
注意:使用DELETE语句一定要带上WHERE子句,否则会把表中所有的数据全部删除。

---------------TRUNCATE 语句 ----------

如果一定要删除表中所有的记录,建议使用TRUNCATE语句。
因为TRUNCATE删除语句时,比DELETE效率要高要快的多。这是因为
使用TRUNCATE删除数据时,它不会产生回滚信息,因此执行TRUNCATE操作也不能被撤销。
TRUNCATE TABLE DEMO;
在TRUNCATE语句中使用关键字 REUSE STORAGE,表示删除记录后仍然保存记录占用的空间;
与此相反也可以使用 DROP STORAGE 关键字,表示删除记录后立即收回记录占用的空间。
TRUNCATE 语句默认使用 DROP STORAGE 关键字。
TRUNCATE TABLE EMP2COPY REUSE STORAGE;


--UPDATE ,INSERT ,DELETE 都需要提交之后才能完全的修改掉表里的数据信息,在提交之前可以通过回滚来恢复数据。
--提交COMMIT,回滚ROLLBACK 
--TRUNCATE 语句执行后不用提交,也不可以回滚。