现在还差一个索引和开窗SQL基础这个专栏就差不多了,然后后面可能会发pysql,我现在正在恶啃Java在后期都会分享,当时只是做个笔记分享,没想到反响不错,多多少少得到了一些积极的情绪价值学着也更有动力,也是希望真的能帮助一些人。
我做笔记多是用的语雀,笔记就是像这篇一样,格式没办法复制,先凑合看一下,后面我有时间会编辑一下的,内容我也会不断更新。我把练习题大多删掉了,只保留了知识点部分,如果有网友需要的话我也会考虑都整理出来的。加油一起进步!
DML 语句
定义:针对数据的处理经过DML语句可以实现对数据的增删改
1.数据的新增 insert into
---DML语句执行完后,需要手动提交或者回退
1.1 指定列插入
insert into 表名(列名1,列名2,列名3 ...) values (值1,值2,值3...);
1.2全列插入
insert into 表名values(值1,值2...值n); --- n和表中列的个数要保持一致
--注意:值和列在数量,顺序,数据类型(字段属性)要保持一致
2.数据的修改 update
语法:
1. update 表名set 列1=新值1,列2=新值2; ---= 赋值 ---更新表中的数据 --更新整张表中的数据
2. update 表名 set 列=值 where 条件; ---按条件更新数据
值可以放:
1.放具体的值 :10000
2.可以放计算表达式 sal*1.5
3.可以放函数 update emp set sal=length(job)*1000 where deptno=10;
4.可以放子查询 (按条件更新时,给一个字段赋值,只能放单行单列子查询)
3.数据的删除 delete
delete --对表中的数据进行删除
delete from 表名;---删除整张表的数据
delete from 表名where 条件;---按条件删除
4.同时实现增删改 merge into
merge into 表1 ---目标表
using 表2 --数据源表
on( 关联条件 ) ---主键列或者唯一列
when matched then ---匹配成功时要做的事情
update set t1.列=t2.列 where 条件
delete where 条件 ----此时要满足以上所有条件
when not matched then ---匹配不成功时要做的事情
insert (t1.列1,t1.列2) values( t2.列1,t2.列2)
--用表a更新表b:参照表a更新表b的价格,如果表a中的数据在表b中不存在,则将数据插入表b中
select * from t_bb
select * from t_aa
merge into t_bb t1
using t_aa t2
on (t1.ID=t2.ID)
when matched then
update set t1.price=t2.Price --where t2.ID=t1.ID
when not matched then
insert (t1.ID,t1.TYPE,t1.PRICE) values (t2.ID,t2.TYPE,t2.PRICE)
DDL --数据定义语句 对数据库对象的增删改
定义:针对数据库对象的操作
数据库对象:表、用户、角色、视图、序列、约束、索引、存储过程、函数
create --创建一个数据库对象
create table 表名
( 列1(字段名) 字段属性,
列2 字段属性2,
列3 字段属性3,
...
列n 字段属性n
)
表名和列名 命名规范:
1.必须以字母开头 a_1 A
2.长度不能超过30个字符
3.同一个用户下,表名不能重复,用一张表下,列名不能重复
4.不建议使用中文
5.不建议使用下划线以外的其他特殊字符
6.不建议和oracle关键字重复
DDL语句 执行成功即生效,不需要手动提交
--快捷建表---复制一张表
create table 表名as sql查询语句 ---把sql语句的查询结果创建成一张新表
--字段属性: 每一个字段都有自己的属性,该属性决定了该字段中存入的数据类型。
1.字符型字段属性
1.1. char(n):固定长度的字符串,该字段属性下面只能存放字符型数据,n代表字节长度,存入的数据总长度不能超过n
存入的数据长度不足n,则在右侧填充空格使其长度达到n,最终以n个长度存储。 默认最长长度 2000
1.2 varchar2(n):可变长度字符串,该字段属性下面只能存放字符型数据,n代表字节长度,存入的数据总长度不能超过n
存入的数据长度不足n,则以实际长度存储。 默认最长长度 4000
CHAR 与VARCHAR2 的关系:
CHAR 与VARCHAR2 是一对矛盾的统一体,两者是互补的关系.
VARCHAR2 比CHAR 节省空间,在效率上比CHAR会稍微差一些,即要想获得效率,就必须牺牲一定的空间,
DCL--数据控制语句
在sql语言中,是一种可对数据访问权限进行控制的指令
grant to --授权、赋权
revoke from --收回权限
控制特定用户对数据表、查看表、存储过程,函数等数据库对象的控制权
用户
user 用户:用来登录数据库的账号
system --管理员用户
scott --普通用户
新建用户:
create user 用户名 identified by 密码;
注意:
1.用户名不缺分大小写,密码区分大小写
2.用户创建完,仅仅是创建了一个账号,该账号没有任何权限
3.用户和用户之间不能直接访问,只有授权后才可以访问
4.管理员用户可以直接访问其他用户
create user testname2 identified by 123456; --创建一个普通用户
grant 权限 to 用户;---给用户赋权
grant create user to scott;---给scott 一个创建用户的权限
grant create session to testname2; --给 testname2 一个登录数据库的权限
create table test805
(
id number,
name varchar2(20)
);
grant create table to testname2;
角色
role:--带有一系列权限的集合
作用:给用户赋予一个角色,相当于 赋予该角色下的所有权限
分类:
系统角色: DBA 、管理员角色
自定义角色: 自己创建的角色
1.创建角色:
create role 角色名;
create role urole627;
2.给角色赋权:
grant create user to urole627;
grant create session to urole627;
grant create table to urole627;
grant select any table to urole627;
grant create view to urole627; --创建视图的权限
3.将角色赋权给用户:
grant 角色 to 用户;
grant urole627 to 新用户;
grant DBA to scott;
总结:
grant 权限|角色 to 角色|用户;
revoke 权限|角色 from 角色|用户;
修改密码:alter user 用户名 identified by 新密码;
删除 用户:drop user 用户名;
锁定和解锁用户:alter user 用户名 account lock; --加锁 alter user 用户名 account unlock; --解锁
TCL 事务控制语言
事务:为了完成某些业务,由一些看的见的sql 或者看不见的后台程序组成的一系列的逻辑单元。
事务的四个属性(ACID)
1.原子性:事务是一个不可分割的整体
2.一致性:所有的数据保持状态一致
3.隔离性:当前事务在修改数据时,其他事务只能看到修改之前的样子
4.持久性:当事务提交成功后,数据永久保存,直到下一个事务来改变它
commit;---提交
rollback;--回滚
显示提交:由commit 决定当前事务是否提交 针对 DML 语言;
隐式提交:一旦事务执行成功,会自动提交 比如:DDL 语言;