1.什么是DML?
其实这个是相对于SQL而言的,数据库里面只要是用来非查询操作数据的都是DML,包括数据的添加、更新、或者删除。DML依据一个集合构成了一个被称为事务的逻辑单元。对于这个事务的概念,可能你听说过比较经典的转钱问题就明白,但是在Oracle中普通数据的增加等都需要使用事务,也就是说不像MySQL那么直接,举个例子:在employees表中插入一条数据:
接着查询一下:
接着进数据表查看,发现没有数据(原因是Oracle重点额事务机制还需要提交数据):
在Oracle数据库中,需要手动提交事务的操作结果,否则现在处理的数据实际是开辟了临时表空间,如果不提交那么关闭数据库之后这些更改会消失。接下来利用commit;
提交数据,返回employees数据表并刷新数据表,得到结果如下(插入成功):
如果没有手动提交,那么Oracle会给出提示:
2.数据插入注意点
(1)字段和需要插入的数据需要对应,如果是对表中的字段全部插入,那么可以省略插入时候对数据表和列的指定;
(2)对于可以为空的字段,可以使用default
的关键字启用默认值或者null显式指定,还可以直接插入的时候使用,
隔开。
(3)对于字符串的插入,如果全为数字,需要使用''
,否则会产生ORA-00984
报错;
(4)对于日期的插入,可以使用:sytemdate
、'25-3月 -22'
、'25/3月/2022'
、to_date('2022-03-12','yyyy-mm-dd')
但是使用to_date()
形式转化,最终还是会被数据表内部的约束限制而还原。
3.数据表的创建
(1)直接创建数据表,给出创建实例:
(2)基于查询的创建数据表(有点类似于数据表的拷贝),给出创建实例:
4.数据更新
比较简单,需要注意同样需要commit提交(不同的SQL中的提交不是同步的,提交以SQL操作框为单位),注意条件,否则将会更改大量数据。
5.数据删除
补充:TRUNCATE TABLE 命令用于删除现有数据表中的所有数据。
6.什么是事务?
事务是指为单个逻辑单元执行一些列DML操作,要么这些操作都执行,要么都不执行。事务具有一下几个特性:
(1)原子性,不可再分,和概念说的中一样;
(2)一致性,一个事务应该保护所有定义在数据上的不变的属性(例如完整性等),在完成事务的时候数据应该保持一致性,典型的转钱;
(3)隔离性,一个事务的执行不会影响其他事务的执行;
(4)持久性,事务一旦提交,对于数据库数据的更改是永久性的。
(5)事务包含显示事务和隐式事务,隐式事务(如DDL、DCL等)无法操作,由数据库自己完成。
事务操作有三大核心函数:
(1)commit,提交事务;
(2)rollback,事务回滚,撤销对数据的操作;
(3)savepoint,设置事务点;
7.表操作(DDL)
数据表操作需谨慎,在Oracle中需要注意一下几种方式:
(1)获取数据库中的所有数据表,user_tables是一个系统数据表(数据字典),用来记录数据库中的数据表的各种信息:
select table_name from user_tables;
(2)获取本用户所具有的不同的对象类型:
select distinct object_type from user_objects;
(3)查看用户所具有的表、视图、同义词和序列:
select * from user_catalog;
(4)给表添加指定列:
alter table employees add username varchar2(30) default 'flying_dark_feather';
说明:默认新插入的列项会出现在最后。
(5)修改表指定列:
alter table employees modify username varchar2(30) default 'flying_dark_feather';
(6)修改表指定列:
alter table employees drop COLUMN username ;
(7)修改表指定列:
alter table employees rename COLUMN username to name;
(8)truncate截断数据表:
truncate table employees;
注意:直接保留结构删除数据,不能给where条件,隐式事务,不支持回滚,
相比于delete 删除所有性能更好。
(9)drop删除数据表:
drop table employees;
注意:支持回滚。
(10)flashback
回闪技术,用于被删除的数据表的恢复,首先 ,可以利用user_recyclebin
查看被删除的数据表信息:
select object_name,original_name,droptime from user_recyclebin;
恢复数据表指令:
FLASHBACK table "temp_table" to before drop;
最后补充说明与一个概念,DCL数据控制语言 (Data Control Language) 在SQL语言中,是一种可对数据访问权进行控制的指令,它可以控制特定用户账户对数据表、查看表、存储程序、用户自定义函数等数据库对象的控制权。由 GRANT
和 REVOKE
两个指令组成,视图模块再细讲。