Oracle学习——数据操纵(DML)插入、修改、删除
本章将介绍,SQL中如何修改数据(增,删,改)。
当我们去添加、更新或者删除数据库中的数据时需要使用DML语句。DML依据的一个集合构成了一个被称为事务的逻辑单元。
1、插入(INSERT)
插入新的一行到表中。
语法结构:
INSERT INTO table[(column1,column2,...)]
VALUES (value1,value2,....)
如果tabel后面跟随列名则表示指定列来添加,否则会按列顺序添加。注意一次只能添加一行。如果采用指定列的方式来添加则注意被忽略的列不能有非空约束。
1.1、插入带空值的行
刚才提到,如果我们插入时采用指定列添加,则被省略的字段会被自动插入为空值。第二种方式是在VALUES 子句中直接使用NULL关键字。
1.2、插入日期值
插入的数值,必须要是DATE类型,可以参看这篇文章:SQL学习——单行函数中转换函数中的TO_DATE函数,可以把字符串转化为对应的DATE类型。或者可以使用sysdate保留字获取当前日期。
当然也可以使用默认日期格式:‘01/3月/2019‘进行插入。
1.3、从另一个表中复制行插入
这种方式会一下子插入多条记录
- 用一个查询写INSERT语句
- 不采用VALUES子句
- 在查询中返回的列的数目要匹配INSERT子句中列的数目
示例:将employees表中的job_id中含有REP的工作岗位的员工数据,插入到new_emp中。
INSERT INTO new_emp(id,name,salary)
SELECT id, name, salary
FROM employees
WHERE job_id LIKE '%REP%'
注意查询出来的结果列的顺序应该和待出入表中的列的顺序相同。
1.4、插入语句中使用默认值
在创建列的时候,我们能给定一个默认值,当在插入时可以使用DEFAULT关键字在该位置上插入该默认值。
如果在插入的时候缺省了某一列(指定列插入),如果缺省的那一列是有设定默认值的,那么将会把默认值插入到该列中,如果没有默认值则插入NULL。
2、更新(UPDATE)
对表中某一行或某几行数据进行更新。
语法结构:
UPDATE table [别名]
SET column1=value1[, column2=value2,...]
[WHERE condition]
注意如果没有where子句将会对表的所有行进行更新。
2.1、使用查询来更新列(使用另一个表的值来更新)
在SET中使用子查询语句这样就能实现,使用另一个表的数值来更新了。
示例:更新emp表中雇员165的薪水,使其薪水和雇员156的相同。
UPDATE emp e
SET e.salary=(SELECT em.salary
FROM emp
WHERE id=156)
WHERE e.id=165
3、删除(DELETE)
删除表中的某一行数据。
语法结构:
DELETE [FROM] table
[WHERE condition]
如果不给WHERE语句则会删除整个表的数据(注意不是删除表,而是删除数据)
3.1、删除基于另一个表的行
删除的时候,删除条件可以是基于另一个表的数据。
示例:删除emp表中薪水与IT_PROG岗位(在employees表中的字段)相同的薪水
DELETE emp e
WHERE e.salary IN (SELECT DISTINCT salary
FROM employees
WHERE job_id='IT_PROG')
3.2、完整性约束错误
这是一个删除行的时候常见的错误。如果我删除A表的某一行,但不巧A表的某个字段,刚好是B表的外键约束,此时就会报错:ORA-02292。此时我们应该先删除B表的对应的行,再删除A表的那一行。