zoukankan      html  css  js  c++  java
  • 05-数据处理

    DML 数据操作语言

      向表中插入数据

      修改现存数据

      删除现存数据

    增:

      insert  into  表名 values(......);列顺序要与表一致;

      insert  into 表名 select  * from 表名 where .... ;列也要对应;

    改:

      update  表名  set  ...  where  条件

    删:

      delete  表名 where 条件;

     1 --插入数据
     2 --为每一列添加一个新值。
     3 --按列的默认顺序列出各个列的值。 
     4 --在 INSERT 子句中随意列出列名和他们的值。
     5 --字符和日期型数据应包含在单引号中。
     6 INSERT INTO departments(department_id, department_name, 
     7                         manager_id, location_id)
     8 VALUES      (70, 'Public Relations', 100, 1700);
     9 --
    10 INSERT INTO employees(employee_id,last_name,email,hire_date,job_id)
    11 VALUES  (300,'Tom','tom@126.com',to_date('2012-3-21','yyyy-mm-dd'),'SA_RAP');
    12 
    13 --SYSDATE 记录当前系统的日期和时间
    14 INSERT INTO employees (employee_id, 
    15                  first_name, last_name, 
    16                  email, phone_number,
    17                  hire_date, job_id, salary, 
    18                  commission_pct, manager_id,
    19                  department_id)
    20 VALUES           (113, 
    21                  'Louis', 'Popp', 
    22                  'LPOPP', '515.124.4567', 
    23                  SYSDATE, 'AC_ACCOUNT', 6900, 
    24                  NULL, 205, 100);
    25 
    26 --在SQL 语句中使用 & 变量指定列值。
    27 -- & 变量放在VALUES子句中。       
    28 INSERT INTO departments 
    29             (department_id, department_name, location_id)
    30 VALUES      (&department_id, '&department_name',&location);
    31 
    32 --从其它表中拷贝数据
    33 --不必书写 VALUES 子句。 
    34 --子查询中的值列表应与 INSERT 子句中的列名对应
    35 INSERT INTO emp2 
    36 SELECT * 
    37 FROM employees
    38 WHERE department_id = 90;
    39 
    40 --更新数据
    41 --使用where 子句指定需要更新的数据;如果省略where,则表中所有数据都将被更新;
    42 UPDATE     copy_emp
    43 SET        department_id = 110
    44 where employee_id='113';
    45 
    46 --题目:更新 114号员工的工作和工资使其与205号员工相同。
    47 UPDATE   employees
    48 SET      job_id  = (SELECT  job_id 
    49                     FROM    employees 
    50                     WHERE   employee_id = 205), 
    51          salary  = (SELECT  salary 
    52                     FROM    employees 
    53                     WHERE   employee_id = 205) 
    54 WHERE    employee_id    =  114;
    55 
    56 --题目:调整与employee_id 为200的员工job_id相同的员工的department_id为employee_id为100的员工的department_id。
    57 UPDATE  copy_emp
    58 SET     department_id  =  (SELECT department_id
    59                            FROM employees
    60                            WHERE employee_id = 100)
    61 WHERE   job_id         =  (SELECT job_id
    62                            FROM employees
    63                            WHERE employee_id = 200);
    64 
    65 --删除数据
    66 --使用where 子句指定需要删除的数据;如果省略where,则表中所有数据都将被删除;
    67 DELETE FROM departments
    68 WHERE  department_name = 'Finance';
    69 
    70 --在 DELETE 中使用子查询
    71 --题目:从emp1表中删除dept1部门名称中含Public字符的部门id
    72 DELETE FROM emp1
    73 WHERE  department_id =
    74                        (SELECT department_id
    75                         FROM   dept1
    76                         WHERE  department_name LIKE '%Public%');

    数据库事务

      事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态。

      以第一个 DML 语句的执行作为开始

      以下面的其中之一作为结束:

      COMMIT 或 ROLLBACK 语句

      DDL 语句(自动提交)

      用户会话正常结束

      系统异常终止

    使用COMMIT 和 ROLLBACK语句,我们可以: 

      确保数据完整性。

      数据改变被提交之前预览。

      将逻辑上相关的操作分组。

    回滚到保留点

      使用 SAVEPOINT 语句在当前事务中创建保存点。

      使用 ROLLBACK TO SAVEPOINT 语句回滚到创建的保存点。 

    1 UPDATE...
    2 SAVEPOINT update_done;
    3 --Savepoint created.
    4 INSERT...
    5 ROLLBACK TO update_done;
    6 --Rollback complete.

    事务进程

    自动提交在以下情况中执行:

      DDL 语句。

      DCL 语句。

      不使用 COMMIT 或 ROLLBACK 语句提交或回滚,正常结束会话。

      会话异常结束或系统异常会导致自动回滚。

    提交或回滚前的数据状态:

      改变前的数据状态是可以恢复的

      执行 DML 操作的用户可以通过 SELECT 语句查询之前的修正

      其他用户不能看到当前用户所做的改变,直到当前用户结束事务。

      DML语句所涉及到的行被锁定, 其他用户不能操作。

    提交后的数据状态

      数据的改变已经被保存到数据库中。

      改变前的数据已经丢失。

      所有用户可以看到结果。

      锁被释放,其他用户可以操作涉及到的数据。

      所有保存点被释放。

     1 --改变数据
     2 DELETE FROM employees
     3 WHERE  employee_id = 99999;
     4 --1 row deleted.
     5 
     6 INSERT INTO departments 
     7 VALUES (290, 'Corporate Tax', NULL, 1700);
     8 --1 row inserted.
     9 
    10 --提交改变
    11 COMMIT;
    12 --Commit complete

    数据回滚后的状态

      使用 ROLLBACK 语句可使数据变化失效:

      数据改变被取消。

      修改前的数据状态被恢复。

      锁被释放。

    1 DELETE FROM copy_emp;
    2 --22 rows deleted.
    3 ROLLBACK;
    4 --Rollback complete.

    eg:

     1 --运行以下脚本创建表my_employees
     2 Create table my_employee (
     3                       id         number(3),
     4                       first_name varchar2(10),
     5                       Last_name  varchar2(10),
     6                       User_id    varchar2(10),
     7                       Salary     number(5));
     8 
     9 --显示表my_employees的结构
    10 DESC my_employees;
    11 
    12 --向表中插入下列数据
    13 INSERT INTO my_employee
    14 VALUES(1,’patel’,’Palph’,’Rpatel’895);
    15 
    16 --提交
    17 COMMIT;
    18 
    19 --将3号员工的last_name修改为“drelxer”
    20 UPDATE my_employees
    21 SET last_name = ‘drelxer’
    22 WHERE id = 3;
    23 
    24 --将所有工资少于900的员工的工资修改为1000
    25 UPDATE my_employees
    26 SET salary = 1000
    27 WHERE salary< 900;
    28 
    29 --检查所作的修正
    30 SELECT * FROM my_employees
    31 WHERE salary < 900;
    32 
    33 --提交
    34 COMMIT;
    35 
    36 --删除所有数据
    37 DELETE FROM my_employees;
    38 
    39 --检查所作的修正
    40 SELECT * FROM my_employees;
    41 
    42 --回滚
    43 ROLLBACK;
    44 
    45 --清空表my_employees
    46 TRUNCATE TABLE my_employees;
  • 相关阅读:
    wenbao与LCIS(最长公共上升子序列)
    wenbao与cf上升序列(最多改变一个变为连续严格上升序列)
    wenbao与随机
    wenbao与cf(849D)思维
    wenbao与蓝桥
    wenbao与合肥网络赛
    wenbao与HDU
    wenbao与hiho最短路还原
    wenbao与cf连续子序列最大和问题
    wenbao与cf四个人坐车的故事
  • 原文地址:https://www.cnblogs.com/shici/p/13418844.html
Copyright © 2011-2022 走看看