1、docker 安装oracle11g步骤:
1:引入oracle源
docker pull oracleinanutshell/oracle-xe-11g
2:开始创建容器
docker run -h "oraclehost" --name "oracle" -d -p 9090:8080 -p 1521:1521 oracleinanutshell/oracle-xe-11g
3: docker ps
4:在终端中进入此容器
docker exec -it 94910105eb6f /bin/bash
5:使用普通身份登入
sqlplus system/oracle
6:创建用户并分配权限
6.1 查看用户
select username,password from dba_users;
6.2 创建用户:用户名为 oracle;密码为:oracle
create user oracle identified by oracle;
6.3 查看是否有此用户 oracle
select * from all_users;
6.4 给用户赋予connect 和 resource 角色(connect: 保证数据库可以链接;resource:该用户可以使用数据库的资源;create session:会话的权利)
grant connect,resource,create session to oracle;
6.5 创建表格添加,更改用户表空间配额
grant unlimited tablespace to oracle;
6.6 删除用户
drop user oracle;
7:开启docker oracle服务
docker start oracle
2、oracle学习笔记01
192.168.52.135
三大部分
1.用户与表空间
2.表与约束
3.查询语句
全局数据库名:orcl
密码:root
图形化管理工具 sql-plus
两个用户都可以使用:sys/system
sys as sysdba 使用管理员的身份登录数据库
sql-plus
写sql语句必须要分号结尾 但是命令不需要加;方便的话,统一使用分号。
清屏:
若在dos的窗口下sql/plus就要用:host cls 或是clear screen
show linesize : 查看当前设置的sqlplus输出的最大行宽
set linesize : 设置sqlplus输出的最大行宽
用户与表空间
用户
登录 sql-plus
系统用户:
四个系统用户:
sys,system
权限 sys > system
sys登录必须使用 管理员 或者 系统操作人员权限 登录
sysman
操作系统管理器的人员,也是管理员级别的用户
scott password: tiger (default)
oracle 创始人的一员
使用系统用户登录:
使用system用户登录
[username/password][@server][as sysdba][sysoper]
--- system/root @orcl as sysdba
--- system/root #本地直接
--- connect/conn sys/root #error ORA-28009: connection as SYS should be as SYSDBA or SYSOPER
--- connect/conn sys/root as sysdba
orcl就是自己设置的服务名
查看登录用户
--- show user; 查看当前用户
dba_users 数据字典 和普通的表类似
--- desc dba_users; #查看数据字典属性信息
启用scott用户
默认被锁定了
需要解锁 使用该用户
alter user username account unlock;
修改登录后 需更新密码: root
表空间
表空间概述
理解表空间
数据库与表空间
表空间实际上是数据库的逻辑存储空间,表空间可以理解为在数据库当中开辟一个空间用来存放数据库对象。
一个数据库可以有多个表空间构成。
oracle很多优化都是与表空间实现的。
表空间与数据文件
表空间有一个或多个数据文件构成,大小可以由用户自己定义。
我们建的表,数据库当中对象都是存储在表空间的数据文件当中。
表空间的分类
永久表空间
数据库当中永久存储的数据,例如:数据库表,视图,存储过程等
临时表空间
存储数据库操作过程当中中间执行的过程,执行完毕自动会被释放掉
UNDO表空间
保存事务所修改的旧值,被修改之前的数据,实现回滚操作
查看用户的表空间
利用4个数据字典
dba_tablespaces 系统管理员查看的
user_tablespaces 普通用户查看的
dba_users 系统管理员查看的 查看用户默认和临时表空间
user_users 普通用户查看的 查看用户默认和临时表空间
--- desc dba_tablespaces
--- select TABLESPACE_NAME from dba_tablespaces; #6个系统默认的
SYSTEM 存放sys用户的表,视图,存储过程等数据库对象,系统表空间
SYSAUX 作为Example表空间的辅助表空间
UNDOTBS1 存储一些撤销信息的表空间 belong to UNDO表空间
TEMP 存储sql语句处理的表和索引信息的临时表空间
USERS 存储用户创建的数据库对象的永久表空间,和SYSTEM类似
EXAMPLE 用于安装oracle11g事例的表空间
--- select TABLESPACE_NAME from user_tablespaces; #6个系统默认的
SYSTEM 存放sys用户的表,视图,存储过程等数据库对象,系统表空间
SYSAUX 作为Example表空间的辅助表空间
UNDOTBS1 存储一些撤销信息的表空间 belong to UNDO表空间
TEMP 存储sql语句处理的表和索引信息的临时表空间
USERS 存储用户创建的数据库对象的永久表空间,和SYSTEM类似
EXAMPLE 用于安装oracle11g事例的表空间
--- select DEFAULT_TABLESPACE from dba_users;
--- select TEMPORARY_TABLESPACE from dba_users;
#查询system用户的默认表空间
#查询system用户的临时表空间 临时表空间(默认是TEMP,可以自己创建)
--- select default_tablespace,temporary_tablespace from dba_users where username = 'SYSTEM'; (SYSTEM,TEMP)
--- select default_tablespace,temporary_tablespace from dba_users where username = 'SCOTT'; (USERS,TEMP)
设置用户的默认或临时表空间
alter user username
default|temporary TABLESPACE tablespace_name;
--- alter user system default tablespace users; #将用户system的默认表空间修改为users
创建,修改,删除表空间
创建
create [temporary] tablespace tablespace_name
tempfile|datafile 'xx.dbf' size xx # datafile 就是表空间数据文件的名字 [tablespace,tempfile]匹配
--- create tablespace test1_ts datafile 'test1file.dbf' size 10m;
--- create temporary tablespace temptest1_ts tempfile 'tempfile.dbf' size 10m;
--- desc dba_data_files 查看永久表空间的文件信息
--- select file_name from dba_data_files where tablespace_name='TEST1_TS';
C:\APP\ZHENGSHENG.CHEN\PRODUCT\11.2.0\DBHOME_1\DATABASE\TEST1FILE.DBF
--- desc dba_temp_files 查看临时表空间的文件信息
--- select file_name from dba_temp_files where tablespace_name='TEMPTEST1_TS';
C:\APP\ZHENGSHENG.CHEN\PRODUCT\11.2.0\DBHOME_1\DATABASE\TEMPFILE.DBF
修改(永久的)
修改表空间的状态
设置联机或脱机的状态
alter tablespace tablespace_name online|offline;
创建完表空间默认是联机状态
--- alter tablespace test1_ts offline
--- select status from dba_tablespaces where tablespace_name = 'TEST1_TS';
--- alter tablespace test1_ts online
设置只读或可读写状态(必须是联机状态)
alter tablespace tablespace_name read only|read write
默认表空间是 read write状态
--- alter tablespace test1_ts read only;
--- select status from dba_tablespaces where tablespace_name = 'TEST1_TS'; #read only
--- alter tablespace test1_ts read write;
--- select status from dba_tablespaces where tablespace_name = 'TEST1_TS'; #online
修改数据文件
增加数据文件
alter tablespace tablespace_name
add datafile 'xx.dbf' size xx;
--- alter tablespace test1_ts add datafile 'test2_file.dbf' size 10m;
--- select file_name from dba_data_files where tablespace_name='TEST1_TS';
C:\APP\ZHENGSHENG.CHEN\PRODUCT\11.2.0\DBHOME_1\DATABASE\TEST1FILE.DBF
C:\APP\ZHENGSHENG.CHEN\PRODUCT\11.2.0\DBHOME_1\DATABASE\TEST2_FILE.DBF
删除数据文件
alter tablespace tablespace_name
drop datafile 'filename.dbf';
不能删除表空间中第一个数据文件,如果要删除的话,我们需要把整个表空间删掉
--- alter tablespace test1_ts drop datafile 'test2_file.dbf';
删除表空间
drop tablespace tablespace_name [including contents](括号加上同时删除数据文件)
--- drop tablespace test1_ts including contents;
表与约束
表存储在表空间当中
存储数据的基本存储单位
二维结构
行和列
数据类型
日期型
DATE(经常使用)
范围:公元前4712/1/1--公元9999/12/31
可以精确到秒
TIMESTAMP
字符型
固定长度
char(n) max(n) = 2000
nchar(n) 按照unicode max(n) == 1000 存储汉字比较多
可变长度
varchar2(n) max(n) = 4000
nvarchar2(n) 按照unicode max(n) == 2000 存储汉字比较多
数值型
number(p,s) p:有效数字 s:小数点后的位数 经常使用
number(5,2) 有效数字五位,小数两位
float(n) 存储二进制数,二进制数的位数[1,126],转换为十进制数需要乘以0.30103才可以得到
其他类型(大对象)
blob 最大存储4G的数据 二进制形式存放
clob 最大存储4G的数据 字符串形式存放
管理表
创建表
同一个用户下表名唯一
create table table_name(
column_name datatype,
...
)
demo:
创建用户信息表(所需字段 字段的类型)
编号 用户名 密码 邮箱 注册时间
create table userinfo(
id number(6,0),
username varchar2(20),
userpwd varchar2(20),
email varchar2(30),
regdate date
)
--- desc userinfo;
修改表(结构)
添加字段
alter table table_name
add column_name datatype;
--- alter table userinfo add remarks varchar2(500);
更改字段数据类型
alter table table_name
modify column_name datatype;
--- alter table userinfo modify remarks varchar2(400); #更改字段长度
--- alter table userinfo modify userpwd number(6,0); #更改数据类型
删除字段
alter table table_name
drop column column_name;
--- alter table userinfo drop column remarks;
修改字段名
alter table table_name
rename column old_column to new_column
--- alter table userinfo rename column email to new_email;
修改表名
rename table_name to new_table_name
--- rename userinfo to user_info
删除表
truncate table table_name #截断表,删除表中所有数据,速度比delete快
drop table table_name 删除表结构
操作表的数据
添加数据
insert 语句
insert into table_name(column1,column2,...)
values (value1,value2,...)
操作实例
向表中所有字段添加值
--- insert into userinfo values(1,'初中生','123','[email protected]',sysdate);
向表中指定字段添加值
--- insert into userinfo(id,username,userpwd) values(2,'yyy','123');
向表中添加默认值
create table user_info(
id number(6,0),
regdate date default sysdate
);
--- insert into user_info(id) values(1)
--- alter table userinfo modify email default '无';
--- insert into userinfo(id) values(3);
--- insert into userinfo(id,email) values(4,'aaa')
复制表数据
在建表的时候复制
create table table_new
as
select column1,...|* from table_old;
--- create table usercopy as select id,username,userpwd from userinfo;
在添加时复制
insert into table_new
[(column1,...)]
select column1,...|* from table_old;
--- insert into usercopy select id,username,userpwd from userinfo;
--- insert into usercopy(id,username) select id,username from userinfo;
修改数据
update 语句
update table_name set column1=value1,... [where conditions]
删除数据
delete * from table_name [where conditions]
约束
约束作用
定义规则
确保完整性
非空约束
创建表时设置非空约束
create table table_name(
column_name datatype not null,
...
)
修改表时添加非空约束 (必须保证表属性中无空数据)
alter table table_name
modify column_name datatype not null;
修改表时去除非空约束
alter table table_name
modify column_name datatype null;
主键约束
非空 唯一
一张表只能设计一个主键约束
主键约束可以由多个字段构成(联合主键或复合主键)
1.在创建表时设置主键约束
单一主键
create table table_name(
column_name datatype primary key,
...
);
联合主键
create table userforce_pk(
id number(6,0),
username varchar2(20),
userpwd varchar2(20),
constraint pk_id_username primary key(id,username)
);
查找约束 字典:desc user_constraints
---
2.在修改表时添加主键约束
alter table table_name
add constraint constraint_name
primary key(column_name1,..);
--- alter table userinfo add constraint pk_id primary key(id);
3.更改约束的名称
alter table table_name
rename constraint old_name to new_name
--- alter table userinfo rename constraint pk_id to id_pk;
4.删除主键约束
alter table table_name
disable|enable|drop constraint constraint_name;
drop primary key[CASCADE] #针对外键约束
--- alter table userinfo disable constraint id_pk;
--- 查看约束状态
--- select constraint_name,status from user_constraints where table_name = 'USERINFO';
外键约束
在创建表时设置外键约束
create table table1
(
column_name datatype REFERENCES table2(column_name),
...
);
# table1:从表 table2:主表
# 设置外键约束时,主表的字段必须是主键
# 主从表中相应的字段必须是同一个数据类型
# 从表中外键字段的值必须来自主表中的相应字段的值,或者为null值
--- create table C(id number(2,0) references A(id));
constraint constraint_name FOREIGN KEY(column_name) references table_name(column_name)[on delete cascade]
[on delete cascade] 级联删除 主表当中一条数据被删除之后,从表当中使用了这条数据的字段所在的行也会被删除
--- create table C(
id number(2,0),
constraint fk_id foreign key(id) references A(id)
);
在修改表时添加外键约束
add constraint constraint_name FOREIGN KEY(column_name) references table_name(column_name)[on delete cascade]
--- alter table E add constraint fk_id_e foreign key(id) references A(id);
删除外键约束
alter table table_name
disable|enable|drop constraint constraint_name;
--- alter table E disable constraint fk_id_e;
--- alter table E drop constraint fk_id_e;
唯一约束
保证字段值的唯一性
唯一约束 vs 主键约束
1.主键字段值必须是非空的
2.唯一约束允许有一个空值
3.主键在每张表只有一个,唯一约束可以有多个
在创建表时设置唯一约束
列级 vs 表级
create table table_name (
column_name datatype unique,
...
)
create table userinfo_A(
id varchar2(10) primary key,
username varchar2(20) unique,
userpwd varchar2(20)
);
表级:
constraint constraint_name unique(column_name)
在修改表时添加唯一约束
add constraint constraint_name unique(column_name)
删除唯一约束
alter table table_name
disable|enable|drop constraint constraint_name;
检查约束
create table table_name
(
column_name datatype CHECK(expressions),
...
)
--- create table T_A (id number(2,0) check(id>10));
创建表时设置检查约束
constraint constraint_name check(expressions)
在修改表的时候添加检查约束
alter table table_name
add constraint constraint_name check(expressions);
删除检查约束
alter table table_name
disable|enable|drop constraint constraint_name;