Oracle总结
对前两天的内容的一些补充
--删除
--delete from 表名 where 行过滤条件; 删除表中满足条件的数据
select * from t_user where id in (7499,7654);
delete from t_user where id in (7499,7654);
--delete from 表名; 删除表中所有的数据
delete from t_user;
--主外键关系下两张表中数据的删除:
--删除从表中的数据,可以直接删除
delete from emp where empno = 7369;
--删除主表中的数据,不允许直接删除,前提是被从表中数据引用
delete from dept where deptno = 40;
select * from dept
select * from emp;
--如果要删除被从表引用了的主表数据:
--1)默认-->先删除从表中引用的那些数据,再删除主表数据
--2)删除主表数据的同时删除那些引用了当前主表数据的从表数据 --> on delete cascade
--3)删除主表数据,从表中那些引用了当前主表数据的外键字段设置为null --> on delete set null
-- 班级表 -->主表
--学生表--> 从表(有外键存在的表为从表) 关联了班级表的主键字段
create table yjx_class(
cid number(5) primary key,
cname varchar2(15)
)
create table yjx_student(
sid number(5) primary key,
sname varchar2(15),
--学生所在班级编号
cid number(5) references yjx_class(cid) on delete set null
)
insert into yjx_class values(202,'java49期');
insert into yjx_class values(204,'java48期');
insert into yjx_student values(1001,'zhangsan',202);
insert into yjx_student values(1002,'lisi',202);
select * from yjx_class;
select * from yjx_student;
delete from yjx_class where cid = 202;
delete from yjx_student where cid = 202;
drop table yjx_student;
--truncate 数据截断 与 delete之间的区别
--1)可以实现截断(删除)表中所有的数据 ,delete 可以删除所有|指定的数据
--2)不会开启事务,delete会默认开启事务
--3)truncate截断表中数据时候,如果表只主表,从表结构检查上不允许 delete删除主表中数据的时候三种方案-->三种
truncate table yjx_class;
select * from t_user;
create table haha(
id number(5)
)
总结
--数据库 : database 数据仓库
--oracle mysql sqlserver
--Oracle 大型 付费的数据库
--SQL 语言
设计表
前提: 设计表首先应该按需遵循三范式
1. 确定表名
2. 确定字段名 类型 +约束(主键 外键 非空 默 检查认 唯一)
主键: 唯一标识一条记录(唯一并且非空)
唯一: 唯一
非空:不能为空
默认: 当没给值时使用给定一个默认值
外键:参考其他表(自己)的某个(某些)字段
检查:自定义的规则
--DDL : 数据定义语言 表创建create 表删除drop 表修改alter
表创建create
表名必须唯一,如果存在 ,必须删除
create table 表名(
字段名 类型(长度) 约束,
...其他字段....
..约束........
)
表删除drop
drop table 表名 (cascade constraints)
--删除表
drop table emp_his;
--主从表关系下删除表
--先删除从表 再删除主表 ;同时删除约束
drop table tb_txt cascade constraints;
drop table tb_user cascade constraints;
--删除主表的同时级联删除约束
drop table emp_his cascade constraints
表修改alter
1. 修改表名 :rename to
2. 修改列名: alter table 表名 rename column to
3. 修改类型: alter table 表名 modify(字段 类型)
4. 修改约束: 先删除 后添加
5. 添加列: alter table 表名 add 字段 类型
6. 删除列:alter table 表名 drop column 字段
--DML : 数据管理语言 插入insert 删除delete 修改update
插入insert
INSERT INTO 表名称 VALUES (值1, 值2,....)
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
删除delete
DELETE FROM 表名称 WHERE 列名称 = 值
DELETE * FROM table_name(删除所有行)
修改update
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
UPDATE Person SET 列名称= 某值, 列名称 = 某值 ,列名称 = 某值
--DQL : 查询select
--select 数据 from 数据源,数据源.. where 行过滤条件|表连接条件 group by 分组 having 组过滤信息 order by 排序;
--select 数据 from 数据源 join 数据源 on 连接条件.. where 行过滤条件 group by 分组 having 组过滤信息 order by 排序;
select distinct *|字段|表达式 as 别名 from 表 表别名
SELECT * FROM 表名; ->查询某个表中所有的记录的所有字段信息
SELECT 列名 FROM 表名; ->查询某个表中所有的记录的指定字段信息
SELECT 列名1,列名2 FROM 表名; -> 查询某个表中所有的记录的字段1 字段2
SELECT distinct 列名 FROM 表名; ->去除重复记录
SELECT 表达式 FROM 表名; ->查询表达式
SELECT xxx as 别名 FROM 表名 表别名 ->使用别名
--索引 提高效率
前提 : 设计表首先应该按需遵循三范式
1. 确定表名
2. 确定字段名 类型 +约束(主键 外键 非空 默 检查认 唯一)
主键: 唯一标识一条记录(唯一并且非空)
唯一: 唯一
非空:不能为空
默认: 当没给值时使用给定一个默认值
外键:参考其他表(自己)的某个(某些)字段
检查:自定义的规则
索引: 提高查询速度的一种手段 -->目录
1、唯一性较好字段适合建立索引
2、大数据量才有效果
3、主键|唯一: 唯一索引
create index 索引名 on表名 (字段列表...)
drop index 索引名
create index idx_emp on emp(sal,ename);
drop index idx_emp;
select * from emp order by sal,ename
--视图
视图:建立在表|结果集|视图上的虚拟表,有以下作用
1. 简化:select 查询语句
2. 重用:封装select语句 命名
3. 隐藏:内部细节
4. 区分:相同数据不同查询
不是所有的用户都有创建视图的权限
1. 前提: create view -->组 connect resource dba
2. 授权: -->sqlplus /nolog
a)、sys登录 conn sys/123456@orcl as sysdba
b)、授权: grant dba to scott;
回收: revoke dba from scott;
c)、重新登录
--rowid 行记录地址
ROWID 是 ORACLE 中的一个重要的概念。用于定位数据库中一条记录的一个相对唯一地址值。通常情况下,该值在该