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;  --提交

叶子的飘落,是风的追求,还是树的不挽留.
原文地址:https://www.cnblogs.com/joyfulcode/p/14436816.html