复杂一点的SQL语句:Oracle DDL和DML
DDL:对表或者表的属性进行了改变
create:创建表创建用户创建视图
创建表
create table student(id int,score int) ;
student后面与括号之间可以有空格可以没有
创建用户
create user liuyifei identified by 4852396;
drop:删除整个表、删除指定的用户、删除指定的存储空间
drop table table_name;
drop user user_name;
--删除空的表空间,但是不包含物理文件
drop tablespace tablespace_name;
--删除非空表空间,但是不包含物理文件
drop tablespace tablespace_name including contents;
--删除空表空间,包含物理文件
drop tablespace tablespace_name including datafiles;
--删除非空表空间,包含物理文件
drop tablespace tablespace_name including contents and datafiles;
--如果其他表空间中的表有外键等约束关联到了本表空间中的表的字段,就要加上CASCADE CONSTRAINTS
drop tablespace tablespace_name including contents and datafiles CASCADE CONSTRAINTS;
truncate
删除表中的所有数据,但是表还是存在的。和drop的先后参见如下:
SQL> create table st1(id int);
表已创建。
SQL> truncate table st1;
表被截断。
SQL> drop table st1;
表已删除。
SQL> create table st1(id int);
表已创建。
SQL> drop table st1;
表已删除。
SQL> truncate table st1;
truncate table st1
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
alter:增加删除修改字段
SQL> create table s1(id int,a int,score int);
表已创建。
SQL> alter table s1 add name varchar2(10);
表已更改。
SQL>
SQL> desc s1;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
ID NUMBER(38)
A NUMBER(38)
SCORE NUMBER(38)
NAME VARCHAR2(10)
SQL> alter table s1 drop a;
alter table s1 drop a
*
第 1 行出现错误:
ORA-00905: 缺失关键字
SQL> alter table s1 drop column a;
表已更改。
SQL> alter table s1 rename to s2;
表已更改。
SQL> desc s2;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
ID NUMBER(38)
SCORE NUMBER(38)
NAME VARCHAR2(10)
SQL> desc s1;
ERROR:
ORA-04043: 对象 s1 不存在
SQL> alter table s2 rename column name to sname;
表已更改。
SQL> desc s2;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
ID NUMBER(38)
SCORE NUMBER(38)
SNAME VARCHAR2(10)
DML:只对表的数据改变,没有改变表的属性
DML操作之后要进行commit操作才会更改数据库。
select:查询
SQL> select score,sname from s2 where id='2';
SCORE SNAME
---------- ----------
99 ayun
insert:插入记录
SQL> insert into s2 values(1,100,'aming');
已创建 1 行。
SQL> insert into s2 values(2,99,'ayun');
已创建 1 行。
SQL> insert into s2 values(3,79,'ahe');
已创建 1 行。
delete:删除记录,不改变表的属性。
SQL> delete from s2 where score='100';
已删除 1 行。
SQL> select * from s2;
ID SCORE SNAME
---------- ---------- ----------
2 99 ayun
3 79 ahe
SQL> delete from s2;
已删除2行。
SQL> select * from s2;
未选定行
SQL> desc s2;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
ID NUMBER(38)
SCORE NUMBER(38)
SNAME VARCHAR2(10)
update:更新记录
SQL> update s2 set score=100 where sname='ahe';
已更新 1 行。
SQL> select * from s2;
ID SCORE SNAME
---------- ---------- ----------
1 100 aming
2 99 ayun
3 100 ahe
DCL:只改变属性
grant:授权
revoke:收回权限
grant语法:GRANT privilege[, ...] ON object[, ...] TO { PUBLIC | GROUP group| username}
权限privilege:
select:查询
insert:插入
update:更新
delete:删除
rule:
all:所有
grant select,insert,update on tablename to public;
给所有用户授予查询、插入、更新tablename表的权限
revoke select,insert,update on tablename from public;//收回所有用户查询、插入、更新tablename表的权限
object:
table:表
view:视图
sequence:序列
index:索引
grant select,insert,update on tablename,viewname,sequencename,indexname to public;
public:对所有用户开放权限
GROUP groupname:对该组所有用户开放权限
username:对指定用户开放权限
给用户授权,connect权限和resource权限。
不给新建用户授予connect权限,新建用户无法通过SID或SERVICE_NAME连接数据库实例。
不给新建用户授予resource权限,新建用户无法创建表。
SQL>
SQL> create user liuyifei identified by a4852396;
用户已创建。
SQL> conn liuyifei/a4852396;
ERROR:
ORA-01045: user LIUYIFEI lacks CREATE SESSION privilege; logon denied
警告: 您不再连接到 ORACLE。
SQL> show user;
USER 为 ""
SQL> conn / as sysdba;
已连接。
SQL> show user;
USER 为 "SYS"
SQL> grant connect to liuyifei;
授权成功。
SQL> conn liuyifei/a4852396;
已连接。
SQL> show user;
USER 为 "LIUYIFEI"
SQL> create table stu(id int);
create table stu(id int)
*
第 1 行出现错误:
ORA-01031: 权限不足
SQL> conn / as sysdba;
已连接。
SQL> show user;
USER 为 "SYS"
SQL> grant resource to liuyifei;
授权成功。
SQL> conn liuyifei/a4852396;
已连接。
SQL> create table stu(id int);
表已创建。
查看指定用户有哪些系统权限
这项操作只可以是dba查看,普通用户是不能查看的,即使是查看自己的。下面的代码已经验证了这个问题。
SQL> select * from dba_tab_privs where grantee=uper('liuyifei');
select * from dba_tab_privs where grantee=uper('liuyifei')
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL> select * from dba_roles_privs where grantee=uper('liuyifei');
select * from dba_roles_privs where grantee=uper('liuyifei')
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL> show user;
USER 为 "LIUYIFEI"
SQL> conn / as sysdba;
已连接。
SQL> select * from dba_tab_privs where grantee=upper('liuyifei');
未选定行
SQL> select * from dba_role_privs where grantee=upper('liuyifei');
GRANTEE GRANTED_ROLE ADM DEF
------------------------------ ------------------------------ --- ---
LIUYIFEI CONNECT NO YES
LIUYIFEI RESOURCE NO YES
附录1:
truncate和delete的区别
truncate会收回表空间,delete不会收回表空间
附录2:
sys用户和system用户的区别:
SYS用户,缺省始终创建,且未被锁定,拥有数据字典及其关联的所有对象
SYSTEM用户,缺省始终创建,且未被锁定,可以访问数据库内的所有对象
记得帮我点赞哦!
精心整理了计算机各个方向的从入门、进阶、实战的视频课程和电子书,按照目录合理分类,总能找到你需要的学习资料,还在等什么?快去关注下载吧!!!

念念不忘,必有回响,小伙伴们帮我点个赞吧,非常感谢。
我是职场亮哥,YY高级软件工程师、四年工作经验,拒绝咸鱼争当龙头的斜杠程序员。
听我说,进步多,程序人生一把梭
如果有幸能帮到你,请帮我点个【赞】,给个关注,如果能顺带评论给个鼓励,将不胜感激。
职场亮哥文章列表:更多文章

本人所有文章、回答都与版权保护平台有合作,著作权归职场亮哥所有,未经授权,转载必究!
复杂一点的SQL语句:Oracle DDL和DML的更多相关文章
- SQL语法之DDL和DML
SQL语法之DDL和DML DDL数据库定义语言 create 创建 alter 修改 drop 删除 drop和delete的区别 truncate DML 数据操作语言 insert ...
- 用Hibernate框架把hql生成可执行的sql语句-Oracle方言
引言:为什么这样的需求,源自公司项目需要,公司的项目使用java的struts2+spring2.5+oracle中间件tuxedo,数据库用的是Oracle,但由于不直接连接数据库,用中间件处理的方 ...
- SQL语言分类DDL、DML、DQL、TCL、DCL
关系型数据库的SQL语句都可以分为4大类: 1. DDL(数据定义语言) DDL 主要是指如下的四种SQL 语句,以 CREATE.DROP.ALRET开头和 TRUNCATE TABLE 语 ...
- SQL中的DDL、DML、DCL、TCL
1.DDL(Data Definition Language)数据库定义语言statements are used to define the database structure or schema ...
- SQL语句常见DDL/DML/DCL操作部分试题(一)
创建三个空表emp1,emp2,emp3,结构参考emp表 CREATE TABLE EMP1 AS SELECT * FROM EMP WHERE 1=2; CREATE TABLE EMP2 AS ...
- 关于group by的一段SQl语句——Oracle
select cc.fformulacode, cc.rangedate, dd.fpervalue from (select n1.fformulacode, max(n1.frangedate) ...
- oracle ddl 与 dml
DDL create table 创建表 alter table 修改表 drop table 删除表 truncate table 删除表中所有行 create index 创建索引 drop in ...
- Oracle ddl 和 dml 操作
ddl 操作 窗口设置用户权限的方法 Oracle的数据类型 按住Ctrl点击表名 ,可以鼠标操作 插入的数据需要满足创建表的检查 主表clazz删除数据从表设置级联也会一同删除 有约束也 ...
- jdbc java数据库连接 3)Statement接口之执行DDL、DML、DQL
|- Statement接口: 用于执行静态的sql语句 |- int executeUpdate(String sql) : 执行静态的更新sql语句(DDL,DML) |- ResultSet ...
随机推荐
- lamp分离部署
目录 lamp分离部署 1. 安装httpd 2. 安装mysql 3. 安装php 4. 配置apache并部署项目 4.1 启用代理模块 4.2 配置虚拟主机 4.3 部署PbootCMSPHP企 ...
- 40行Python制作超炫酷动态排序图,有了它高逼格PPT再也不愁!
本文首发于量化投资与机器学习 转载于 https://mp.weixin.qq.com/s/KaB_7oXZf0_IV97y0pRPmQ 前言 最近,这种动态排序条形图视频超级火,如下图: ...
- this.getClass().getResource(String) 路径问题
this.getClass().getResource(String) 路径问题 这里的默认当前路径是该类所在目录: this.getClass() 说明了一切!! 找到类,就找文件:很显然和类 ...
- three.js 着色器材质之变量(三)
这篇郭先生在练习一下着色器变量,在度娘上面或者官网上经常看到类似水波一样的效果,这篇就试着做一个这样的效果,顺便巩固一下顶点着色器和片元着色器,毕竟多多练习才能更好地掌握.效果如下图,在线案例请点击博 ...
- 《SOD框架企业级应用数据架构实战》新书简介和预定
SOD框架“企业级”应用数据架构实战 ----致敬平凡的程序员! 历时两年写成, 两大MVP: 张善友. 刘冰(宇内流云) JAVA技术专家 申毅 联合推荐! 10年磨一剑:汇聚作者超过10年的架构工 ...
- 我搭的神经网络不work该怎么办!看看这11条新手最容易犯的错误
1. 忘了数据规范化 2. 没有检查结果 3. 忘了数据预处理 4. 忘了正则化 5. 设置了过大的批次大小 6. 使用了不适当的学习率 7. 在最后一层使用了错误的激活函数 8. 网络含有不良梯度 ...
- Qt之先用了再说系列-多线程方式2
继Qt之先用了再说系列-多线程方式2 本次说说在Qt里多线程使用第2种方式,也是qt官方比较推荐用的方式,相对与直接继承QThread 重写run方法中灵活了一些,如果第一次使用可能会转不湾来,没有直 ...
- 2020-07-22:你觉得使用redis的主从复制的时候有什么点需要注意的吗?
福哥答案2020-07-22: 1.主从同步缓冲区设定大小,如果进行全量复制耗时太长,进行部分复制时发现数据已经存在丢失的情况,必须进行第二次全量复制,致使slave陷入死循环状态.在全量复制的时候, ...
- L1-006 连续因子 天梯
思路: 素数只有1和本身 合数 暴力枚举 把连续因子最大的记录下来 注意: AC代码 //思路: //素数只有1和本身 //合数 暴力枚举 把连续因子最大的记录下来 #include<iostr ...
- Java引用类型之最终引用
FinalReference类只有一个子类Finalizer,并且Finalizer由关键字final修饰,所以无法继承扩展.类的定义如下: class FinalReference<T> ...