插入/新增(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; --提交