一、关于Oracle
Oracle 安装
1 安装目标位置不能有空格 汉字
2 window7及以上版本一定要调整兼容性
3 双显卡尤其是N卡用户,一定要使用集成显卡安装
A卡 AMD 图片 UI
N卡 昂达 游戏性
4 口令: 不要使用数字开头
数据库 DataBase
DBMS(DATABASE MANAGEMENT SYSTEM) 数据库管理信息系统
RDBMS (Relation DBMS) 关系型数据库管理信息系统
关系型:
基于关系模型发展起来
表格 依据一定的逻辑方式来存储数据的
行和列
Oracle 10g
8i 9i 10g 11g 12g/12c
2 连接Oracle
sqlplus 进入Oracle的命令
Oracle的服务 (运行中使用 services.msc 命令)
OracleOraDb10g_home1TNSListener
* 允许外部应用程序访问Oracle
OracleServiceORCL
* Oracle中某个数据库的服务实例
oracle实例 = 数据库进程 + SGA(系统共享区内存)
3 Oracle中的用户
用户: 存储数据的集合
schema 模式
角色: 多个权限的集合
SYSTEM DBA角色
SYS SYSDBA 权限 (最广的系统权限)
SCOTT 普通用户
4 Oracle中的常用命令
show user 显示当前连接的用户
host cls 清理屏幕
clear screen 清理屏幕
connect 或者 conn 连接其他用户
change *用来修改上一个出错的SQL语句
change /出错的内容/修改后的内容
比如:
SQL> select table_names from user_tables;
select table_names from user_tables
*
第 1 行出现错误:
ORA-00904: "TABLE_NAMES": 标识符无效
SQL> change /_names/_name
1* select table_name from user_tables
SQL> /
* edit 或者 ed 命令 * 用来修改上一个出错的SQL
* start 或者@
用来执行一个SQL文件脚本
* spool "文件路径"
spool off;
* spool表示将接下来在CMD中显示的内容,
原封不动写入到文件中,一直到 spool off结束
二、表结构与字段介绍
表: 有行和列组成的一个概念
按照一定的数据来存储数据,是一个存储数据的集合
记录: 把表中的每一行数据称作字段
字段(属性): 表的每一个列可以看作是记录的一个属性
存储数据:
最小单位: 数据块 2KB大小的内存空间
||
盘区 (若干个数据块组成一个盘区)
||
段 (若干个盘区,组成一个段)
||
数据文件 (通常是 .dbf 文件)
创建表:
create table 表名(
列名1 数据类型,
列名2 数据类型,
...
列名x 数据类型
);
* 第一范式: 同一张表中不能出现重复的列名
* 列与列之间需要用逗号隔开
最后一个列不需要写逗号
Exec:
创建学生表Student:
学号sno number
姓名sname varchar2(20)
性别gender
手机号phone
----------------------------------------------------
数据类型:
字符类型:
char 固定长度类型 最长2000B ANSI 一个汉字两个字节
nchar 固定长度类型 2000B 本地国家字符集 一个汉字一个字节
* 带n的类型是本地国际字符集的编码 一个汉字一个字节
* 固定长度:如果数据不超出最大长度,则开辟固定的内存大小
varchar 可变长度类型 标准SQL中的类型
varchar2 可变长度类型 Oracle支持
nvarchar 可变长度类型 Oracle不支持
nvarchar2 可变长度类型 Oracle支持
* 可变长度是根据数据所占有的内存空间的实际消耗来开辟
** 固定长度与可变长度的比较:
可变长度更节省资源
固定长度效率更高
"小明你好"
JAVA实际需要 数据库中开辟
char(20) : 8B 20B (12B大小的空格)
nchar(3) : 8B ×
varchar(20): 8B 8B
nvarchar2(4): 8B 4B
数值类型:
number
number(p) :p指定的位数都是整数
number(p,n)
p: 1~38
n: -84~127
p :第一个参数指定总长度
当n>0时 :允许出现的小数位数
整数位= p-n
当n<0时 :小数点向左数n的绝对值位做四舍五入精确
number(7,-2) number(7,-8)
1234567 → 1234600 0
12345.6000343
number(5,1) × 9999.949999
number(7,2) 12345.6
日期类型:
date : 年月日 小时 分钟 秒 (不带有毫秒数)
当前系统时间: sysdate
timestamp : 带有毫秒数的日期类型
当前系统时间: systimestamp
dual : 测试用表 伪表 万能表
select sysdate from dual; -- 查看当前的系统时间
select systimestamp from dual; -- 带有毫秒数
long : 长文本 2GB 过时
带有long的表不允许导入导出
不允许给long类型的类添加索引
lob :类型来替代long 4GB
clob
blob
nclob
性别用那种类型来存储?
number 0 1
char
varchar2
-------------------------------------------------
长文本如何存储?
比如一张报纸内容
写成HTML文件
.avi
三、Oracle中的用户权限
1 Oracle中的SCOTT用户:
* 此用户默认上锁
2 解锁用户:
1 首先要连接到一个有权限的用户
conn system/etoak
2 在具有一定的权限用户下, 才能去修改其他用户的属性
alter user 用户名 account unlock;
3 创建用户:
1 首先要连接到一个有权限的用户
conn system/etoak
2 使用创建用户的命令
create user 用户名 identified by 口令;
4 修改用户密码:
1 首先要连接到一个有权限的用户
conn system/etoak
2 修改用户的密码
alter user 用户名 identified by 口令;
-----------------------------------------------------
权限:
系统权限: 能够操作用户对象自身的权限
授权: grant 权限 to 用户;
1 连接一个有权限授权的用户
conn system/etoak
2 授权操作
grant create session to et1505;
都有哪些系统权限?
create session :允许访问用户
connect :允许连接用户
create table :创建表
create view :创建视图
resource :占用资源
......
允许用户能够创建表:
grant create session,create table,resource to 用户;
授权某个用户时,可以允许用户将权限再次授权给别人:
with admin option
比如:
首先将create session 权限授权给et1505,
并且允许他给et1504
conn system/etoak
grant create session to et1505 with admin option;
conn et1505/etoak
grant create session to et1504;
撤销: revoke 权限 from 用户;
如果允许et1505将权限给et1504,并且授权成功,
此时将et1505的create session权限撤掉,
那么et1504是否依然能够访问到?
conn system/etoak
grant create session to et1505 with admin option;
conn et1505/etoak
grant create session to et1504;
conn system/etoak
revoke create session from et1505;
conn et1504/et1504 √
用户权限: 能够操作用户中资源的权限
* 用户权限一定会出现on关键字
授权:
grant 权限 on 资源 to 用户;
资源: 表(table) 视图(view)
序列(sequence) 过程(procedure)
权限: insert 新增
update 更新
delete 删除
select 查询
execute 执行
将scott用户中的emp表的查询权限授权给et1505;
第一种方式: 将et1505提升成DBA
第二种方式:
* 连接上有权限的用户 conn system/etoak
* 给et1505用户scott下的emp表的查询权限
* 也可以直接透过拥有资源的对象来授权
conn scott/tiger
grant select on emp to et1505;
用户权限允许将权限授权其他用户: with grant option
conn scott/tiger
grant select on emp to et1505 with grant option;
conn et105/etoak
grant select on scott.emp to et1504;
revoke select on scott.emp from et1505;
问 et1504是否能够查询到scott的emp表中数据?
撤销: revoke 权限 on 资源 from 用户;
系统权限和用户权限的区别:
1 用户权限一定带有on,系统权限不带有on
2 系统权限通过with admin option 再次授权,
用户权限通过with grant option 再次授权给其他用户
四、复制表的语句
****跨用户的复制表必须保重能够访问其他用户资源
1 跨用户复制表,并且复制表中的数据
create table emp as select * from scott.emp;
2 本用户内复制表结构 不复制数据
create table emp2 as select * from emp where 1=3;
3 复制指定的某几个列
create table emp3 as select empno,ename from emp;
4 复制表,并且更改列名称
create table emp4(eno,name) as select empno,ename from emp;
5 如果表已存在比如:
create table empX(
eid number,
ename varchar2(20)
);
问题:
将查询到的工资大于3000的所有员工的
编号姓名插入到empx表中:
insert into empx(eid,ename)
select empno,ename from emp
where sal>3000;