操纵数据(DML)
数据操纵语言:当添加、更新或者删除数据库中的数据时需要使用 DML 语句。DML 依据的一个集合构成了一个被称为事务的逻辑单元。
------------------------------------------------------------------
添加一个新行到表中:
insert into+表(列名1,列名2,,列名n) values(值1,值2,,值n);
完全列添加
insert into+表 +values (表对应的列1,表对应的列2,,表对应的列n);列名可以省略不写,需要插入且顺序一致) 。
插入带空值的行
insert into departments (department_id, department_name, manager_id, location_id) values (310,'A',null,null);
隐式方法: 省略字段列表中的列。省略不需要插入值的列和需要插入的值
insert into departments (department_id, department_name) values (310,'A');
插入日期值:插入现在时间 sysdate
比如这个时间2005-5-5--> 05-5月-06 或者 to_date('2005-5-5','yyyy-mm-dd')
从另一个表中复制行用一个查询写 INSERT 语句
不用 VALUES 子句
在查询中列的数目要匹配 INSERT 子句中列的数目
指定列添加: insert into +表名(需插入的列1,列2,,列n) +查询到的别的表中的列
insert into emp (id,name, salary, commission) select employee_id, last_name, salary, commission_pct from employees where job_id like'%REP%';
完全列添加:insert into +表名 +查询到的别的表中的列
insert into emp select employee_id,last_name,salary,commission_pct from employees where job_id like'%REP%';
--------------------------------------------
改变表中的数据
update语句
修改列的值: update +表名+set +列的值1=更改值1,列的值2=更改值2 where +筛选条件
修改emp表中id=170的name和salary的值
update emp e set e.name='KCY',e.salary=19999 where e.id =170;
更新 emp 表中的雇员 156 的薪水,使其和雇员 170 相同。
update emp e set e.salary= (select salary from emp where id=156) where id=170;
从表中删除行---- delete语句
delete from +表 +where+筛选条件
删除 emp 表中 id 为 302 的雇员。
delete from emp where id = 302;
删除emp表中和employees这个表中name为‘IT_PROG’薪水相同的行
delete from emp where salary= (select SALARY from employees e where e.name='IT_PROG');
删除表中的全部数据
delete emp;
--------------------------------------
事务处理语言(TCL)
指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。
事务特性原子性(ATOMICITY):事务中的操作要么都不做,要么就全做。
一致性(CONSISTENCY):一个事务应该保护所有定义在数据上的不变的属性(例如完整性约束)。在完成了一个成功的事务时,数据应处于一致的状态。
隔离性(ISOLATION):一个事务的执行不能被其他事务干扰。
持久性(DURABILITY):一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
1.显式事务:需要我们手动的提交或回滚。
事务提交Commit:
当我们执行了一个 DML 语言后,此时的数据并不会持久化到数据文件中。需要使用commit 来确认提交。
事务回滚:Rollback
当我们执行了一个 DML 语言后,也可以使用 rollback 来撤销当前对表的操作。
DML 语言中的所有操作都是显示事务操作。commit ... 事务提交
rollback... 事务回滚
savepoint... 设置回滚点
savepoint A;... rollback to A; 回滚到点A
设置回滚点:
savepoint... 设置回滚点: savepoint A;---> rollback to A; 回滚到点A
2.隐式事务
数据库自动提交不需要我们做任何处理,同时也不具备回滚性。
DDL、DCL 语言都是隐式事务操作
使用事务commit ... 事务提交
rollback... 事务回滚
savepoint... 设置回滚点: savepoint A;---> rollback to A; 回滚到点A
-----------------------------------------------------------
创建表(CREATE TABLE)
create table +表名(列名1 数据类型,列名2 数据类型);
创建一个表AA,vaechar2类型的name,number类型的age
create table AA(name varchar2(10),eag number(3));
Oracle 数据库中的表查看本用户说拥有的表的名称 select table_name from user_tables;
查看本用户所拥有的不同的对象类型 select distinct object_type from user_objects;
查看本用户所拥有的表,视图,同义词和序列 select * from user_catalog;
用查询创建表
创建一个BB表,以employees表中department_id=80的last_name,employee_id,salary作为列
create table BB as select e.last_name,e.employee_id,e.salary from employees e where e.department_id=80;
----------------------------------
修改表(alter table )
ALTER TABLE 语句可以修改表的信息。
添加一个新列:alter table AA add(salary number(5,2));
修改一个已存在的列:alter table AA modify (列名a 数据类型a);
修改数据类型 alter table AA modify(列名a 数据类型b);
修改默认值 alter table AA modify(列名a 数据类型a default 默认值1);
取消默认值 alter table AA modify(列名a 数据类型a default null);
修改列名 alter tableAArename column 列名ato 列名b
删除一个列 alter tableAAdrop column列名;
删除AA表中salary这个列
alter table AA drop column salary;
截断表(TRUNCATE TABLE)
特点:删除表中的所有的数据,但是保留表结构。在截断表时不能给定条件截断表时隐式事务。
示例:truncate table AA;
truncate table AA;
删除表(DROP TABLE):drop table AA;
--------------------------------------
定义约束
数据库中的约束类型– 非空约束(NOT NULL)
– 唯一性约束(UNIQUE)
– 主键约束(PRIMARY KEY)
– 外键约束(FOREIGN KEY)
– 用户自定义约束(CHECK)
创建表时定义 NOT NULL 约束 (非空)
create table AA(id number,name varchar2(20) not null,salary number constraint AA_id not null);
修改表定义 NOT NULL 约束 (非空)
alter table AA modify AA_id notnull;
定义 UNIQUE 约束 (唯一性约束)
创建表时定义 UNIQUE 约束
create table AA(id number constraint AA_uk unique,name varchar2(20));
修改表定义 UNIQUE 约束 (唯一性约束)
alter table AA modify(id unique);
定义 PRIMARY KEY 约束 (主键约束)
创建表时定义 PRIMARY KEY 约束
create table AA(id number constraint AA_pk primary key);
修改表定义 PRIMARY KEY 约束 (主键约束)
alter table AA modify(id constraint constraint_pk primary key);
创建联合主键 (联合主键)
create table AA(id number,name varchar2(20),constraint AA_pk primary key(id,name));
定义 FOREIGN KEY 约束 (外键约束)不能使用modify,只能用add
创建表时定义 FOREIGN KEY
create table AA(id number,d_idnumber,constraint AA_fk foreign key(d_id)references BB(id));
修改表定义 FOREIGN KEY (外键约束)不能使用modify,只能用add
alter table AA add constraint AA_fk foreign key(d_ id) references BB(id);
定义 CHECK 约束(自定义约束) 不能使用modify,只能用add
创建表时定义 CHECK 约束 (自定义约束)
create table AA(id number,salary number(8,2) constraint AA_ck check(salary > 1000));
修改表定义 CHECK 约束 (自定义约束) 不能使用modify,只能用add
alter table AA add constraint AA_ck check(salary > 1000);