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表的那一行。

 

posted @ 2022-08-24 10:09  Circle_Wang  阅读(383)  评论(0编辑  收藏  举报