zoukankan      html  css  js  c++  java
  • DML(Date Manipulation Language)-数据的增、删、改


    插入/新增(INSERT)

    INSERT INTO 表名(列1,列2,...) VALUES(值1,值2,...);  --第一种写法
    
    INSERT INTO 表名 VALUES(值1,值2,...);  --第二种写法(注意:此种写法的值必须将该表的所有列的值都写上)
    

    示例

    以下表为例

    INSERT INTO test_user(
           user_id,
           user_name,
           user_pwd,
           user_sex,
           user_age,
           user_idnumber,
           user_email,
           user_phone
    ) VALUES (
           1001,
           '张三',
           'zhangsan',
           '男',
           21,
           '610502202102230000',
           '111111111@163.com',
           '09182853111'
    );
    

    修改/更新(UPDATE)

    UPDATE 表名 SET 列 = 值 WHERE 条件;
    

    示例

    UPDATE test_user SET user_name = '李四' WHERE user_id = 1001;  --更新id为1001的用户姓名为:李四
    

    删除(DELETE)

    DELETE FROM 表名 WHERE 条件;
    

    示例

    DELETE FROM test_user WHERE user_id = 1002;  --删除id为1002的用户数据
    

    三种删除的区别:

    --删除整张表,以及表结构,表中的数据与所有列均被删除。
    DROP TABLE 表名;
    
    --清空整张表数据,但表结构仍存在。
    --(注意:TRUNCATE的操作机制是先删除整张表,随后再创建一张原表结构的表)
    --在数据量特别大的情况下,尤其是表中带有索引的情况下,该方法相比较于DELETE效率较高。
    TRUNCATE TABLE 表名;
    
    ----清空整张表数据,但表结构仍存在。
    --(DELETE则是直接删除整个表中的数据,保存表结构)
    DELETE FROM 表名;
    

    合并(MERGE)

        当需要对一个表根据不同条件分别进行INSERT、UPDATE以及DELETE操作时,可以使用MERGE语句。MERGE语句可以根据不同条件获取要插入、更新或删除到表中的数据行,然后从1个或多个数据源头对表进行更新或者向表中插入行。

    MERGE INTO 表名
    USING 表名/视图/子查询 ON 连接条件
    -- 当匹配得上连接条件时
    WHEN MATCHED THEN 
    更新、删除操作
    -- 当匹配不上连接条件时
    WHEN NOT MATCHED THEN 
    更新、删除、插入操作
    

    示例

    MERGE INTO dept60_bonuses b
    USING (
               SELECT employee_id, salary, department_id
               FROM hr.employees
               WHERE department_id = 60
          ) e
    ON (b.employee_id = e.employee_id)
    -- 当符合关联条件时
    WHEN MATCHED THEN
         -- 将奖金为0的员工的奖金调整为其工资的20%
         UPDATE 
         SET b.bonus_amt = e.salary * 0.2
         WHERE b.bonus_amt = 0
         -- 删除工资大于7500的员工奖金记录
         DELETE 
         WHERE (e.salary > 7500)
    -- 当不符合连接条件时
    WHEN NOT MATCHED THEN
         -- 将不在部门为60号的,且不在dept60_bonuses表的用工信息插入,并将其奖金设置为其工资的10%
         INSERT 
         (b.employee_id, b.bonus_amt)
         VALUES 
         (e.employee_id, e.salary * 0.1)
         WHERE (e.salary < 7500)
    

    序列(SEQUENCE)

        一般MySQL、SQLServer中的都可以使用工具创建表的时候很容易实现列的值自增。但是Oracle中没有设置自增的方法,一般情况下我们使用序列和触发器来实现主键自增的功能。

    序列的定义

        SEQUENCE是Oracle提供的用于产生一系列唯一数字的数据库对象。由于Oracle中没有设置自增列的方法,所以我们在Oracle数据库中主要用序列来实现主键自增的功能。
        序列不属于任何一张表,但是可以和表做逻辑绑定。

    序列的创建

    --序列默认从1开始,依次递增,每次增加1个单位,主要用来给主键赋值使用
    CREATE SEQUENCE seq_序列名  --创建序列名称
    
    --注意:完整的创建序列的语法是需要以下设置的,但是一般不常用。
    [INCREMENT BY n]  --递增的序列值是 n 如果 n 是正数就递增,如果是负数就递减 默认是 1
    [START WITH n]  --开始的值,递增默认是 minvalue 递减是 maxvalue
    [{MAXVALUE n | NOMAXVALUE}]  --最大值  
    [{MINVALUE n | NOMINVALUE}]  --最小值
    [{CYCLE | NOCYCLE}]  --循环/不循环
    [{CACHE n | NOCACHE}];  --分配并存入到内存中
    

    序列的 使用

    --创建一个序列叫seq_test_user
    CREATE SEQUENCE seq_test_user;
    
    --序列调用 产生一个新的序列(获取下一个值)
    SELECT seq_test_user.nextval FROM dual
    
    --dual:虚表,只是为了补全语法,没有实际意义(一般使用虚表来显示计算出的数据或者条件删选出来的数据)。
    
    --查看当前序列的值(获取当前值)
    SELECT seq_test_user.currval FROM dual
    

    使用序列添加一条记录

    INSERT INTO test_user(user_id,user_name) VALUES(seq_test_user.nextval,'张大山');
    COMMIT;  --提交
    

    叶子的飘落,是风的追求,还是树的不挽留.
  • 相关阅读:
    js 刷新页面
    移动端web资源
    [LeetCode][JavaScript]Serialize and Deserialize Binary Tree
    [LeetCode][JavaScript]Bulls and Cows
    [LeetCode][JavaScript]Remove Duplicates from Sorted List II
    [LeetCode][JavaScript]Remove Duplicates from Sorted List
    [LeetCode][JavaScript]Remove Duplicates from Sorted Array
    [LeetCode][JavaScript]Remove Duplicates from Sorted Array II
    [LeetCode][JavaScript]Nim Game
    [LeetCode][JavaScript]Path Sum II
  • 原文地址:https://www.cnblogs.com/joyfulcode/p/14436816.html
Copyright © 2011-2022 走看看