Oracle基础
用户登录
1
2
3
4--使用用户名/密码登陆
SQL>connect username/password;
--使用sys登陆,权限最高
SQL>connect sys/password as sysdba;查看登陆用户
1
2
3SQL>show user;
--dba_users用户信息的数据字典
SQL>select username from dba_users;启用scott用户
1
2SQL>alter user scott account unlook;
SQL>connect scott/password;
一、表空间
表空间是数据库的逻辑存储空间,在数据库中开辟的空间用来存储数据对象。表空间由数据文件构成,数据库可以由多个表空间来构成
永久表空间
表、视图、存储过程
临时表空间
中间过程、临时表
UNDO表空间(安度)
保存事物所修改的旧值,可以执行撤销操作
设置默认表空间
1
2--设置user为默认表空间
SQL>alter user system DEFAULT TABLESPACE system;创建表空间
1
2
3SQL>create tablespace TEST_TABLESPACE datafile 'testfile.dbf' size 10m;
--创建临时表空间
SQL>create temporary tablespace TEMP tempfile 'tempfile.dbf' size 10m;查看表空间
1
2
3SQL>desc dba_tablespaces;--user_tablespace
SQL>select tablespace_name from dba_tablespace;
SQL>select file_name from dba_data_files where tablespace_name = 'TEST_TABLESPACE';修改表空间
1
2
3
4
5
6--设置联机或脱机状态
SQL>alter tablespace TEST_TABLESPACE online;--offline
--查看表空间状态
SQL>select status from dba_tablespace where tablespace_name = 'TEST_TABLESPACE';
--设置只读或可读可写状态(联机状态下)
SQL>alter tablespace TEST_TABLESPACE read only;--read write修改数据文件
1
2
3
4
5
6
7--增加数据文件
SQL>alter tablespace TEST_TABLESPACE add datafile 'testfile2.dbf' size 10m;
--查看数据文件
SQL>select file_name from dba_data_files where tablespace_name = 'TEST_TABLESPACE';
--删除数据文件
SQL>alter tablespace TEST_TABLESPACE drop datafile 'testfile2.dbf';
--注:不能删除创建表空间时创建的数据文件,否则需要删除该表空间删除表空间
1
2
3
4--只删除表空间
SQL>drop tablespace TEST_TABLESPACE;
--删除表空间及数据
SQL>drop tablespace TEST_TABLESPACE including contients;
二、管理表
1. 认识表
表是基本存储单位,位于表空间
二维结构:行—-记录;列—域或字段
约定:
- 每一列数据必须具有相同数据类型
- 列名唯一
- 每一行数据的唯一性
2. 数据类型(oracle 11g)
字符型
固定长度
1
2
3--按照unicode编码,存汉字情况多
CHAR(n);--max:2000
NCHAR(n);--max:1000可变长度
1
2VARCHAR2(n);--max:4000
NVARCHAR2(n);--max:2000
数值型
1
2
3
4NUMBER(p,s);--p表示有效数字,s表示小数点后的位数。例:NUMBER(5,2) ---123.45
FLOAT(n);--主要存储二进制类型,能存储二进制位数1-126位
--二进制转十进制:给这个数乘以0.30103日期型
1
2
3DATE--表示范围:公元前4712年1月1日到公元9999年12月31日
TIMESTAMP--时间戳,可精确到小数秒其他类型(存放大数据)
1
2BLOB--可存放4GB数据,以二进制形式存
CLOB--可存放4GB数据,以字符串形式存
3. 管理表
创建表
1
2
3
4create table table_name
(
column_name datatype, ...
)添加字段
1
alter table table_name add column_name datatype;
更改字段数据类型
1
alter table table_name modify column_name datatype;
删除字段
1
alter table table_name drop column column_name;
修改字段名
1
alter table table_name rename column column_name to new_column_name;
修改表名
1
rename table_name to new_table_name;
删除表
1
2
3delete from table_name where column_name = column_value;--删除表中数据
truncate table table_name;--删除表中数据,效果比delete快很多,也称为截断
drop table table_name;--删除表结构
三、操作表中数据
1. 添加
1 | insert into table_name (column1,column1,...) values (value1,value2,...) |
2. 复制表数据
1 | --创建表时复制 |
3. 修改数据
1 | update table_name set column1 = value1,... |
4. 删除数据
1 | delete from table_name |
四、约束
约束作用:定义规则,确保数据完整性
1. 非空约束
创建表时设置非空约束
1
2
3
4
5create table table_name
(
column_name datatype not null,
...
)修改表时设置非空约束
1
2
3--前提时修改的表无数据。可先delete再修改
alter table table_name
modify column_name datatype not null
2. 主键约束
确保表当中每一行数据的唯一性,非空。一张表只能设计一个主键约束。主键约束可以由多个字段构成(联合主键/复合主键)
创建表时创建
1
2
3
4
5create table table_name
(
column_name datatype primary key,
...
)联合主键举例
1
2
3
4
5
6
7create table userinfo
( id number(6,0),
username varchar2(20),
userpass varchar2(20),
constraint pk_id_username primary key(id,username)
--pk_id_username是主键约束名
)查主键
1
2--user_constraints用户数据字典
select constraint_name from user_constraints where table_name = 'userinfo';修改表时添加主键约束
1
2
3alter table table_name
add constraint constraint_name --主键名
primary key(column_name1,...);更改约束名
1
2alter table userinfo
rename constraint pk_id to new_pk_id;删除主键约束
禁用
1
2
3alter table userinfo disable|enable constraint constraint_name;--禁用/启用
--查看禁用启用
select constraint_name,status from user_constraints where table_name = 'userinfo';删除
1
alter table userinfo drop constraint constraint_name;
涉及外键
1
2--涉及外键时,将引用该主键的也删掉
alter table table_name drop primary key [cascade]
3. 外键约束
注:
- 设置外键约束时,主表的字段必须是主键
- 主从表中相应的字段必须是同一个数据类型
- 从表中外键字段的值必须来自主表中相应字段的值或者为null值
创表时—列及
1
2
3
4
5
6create table table1 --从表
(
column_name datatype references
table2(column_name) --主表
...
)创表时—表及
1
2constraint constraint_name foreign key (column_name)
references table_name (column_name)[on delete cascade] --及联删除所在行例:
1
2
3
4
5
6
7
8
9create table userinfo_f2
( id varchar2(10) primary key,
username varchar2(20),
typeid_new varchar2(10) references typeinfo(typeid) --列及
...
typeid_new_t2 varchar2(10),
constraint fk_typeid_new foreign key (typeid_new_t2)
references typeinfo (typeid) --表及
)修改表时设置外键约束
1
2
3alter table table_name
add constraint constraint_name foreign key (column_name)
references table_name (column_name)[on delete cascade]删除外键约束
禁用
1
2alter table table_name
disable|enable constraint constraint_name删除
1
2alter table table_name
drop constraint constraint_name
4. 唯一约束
保证字段值的唯一性
唯一约束与主键约束的区别
| | 主键约束 | 唯一约束 |
| —- | —- | ———— |
| 是否可空 | 非空 | 可空 |
| 值个数 | 一个 | 可多个,但空值只能有一个 |创建表设置唯一约束
列及
1
2
3
4
5create table table_name
(
column_name datatype unique,
...
)表及
1
2
3
4
5create table table_name
(
column_name datatype,
constraint constraint_name unique (column_name)
)
修改表时添加唯一约束
1
2alter table table_name
add constraint constraint_name unique (column_name)删除唯一约束
禁用
1
2alter table table_name
disable|enable constraint constraint_name删除
1
2alter table table_name
drop constraint constraint_name
5. 检查约束
使数据有意义
创表时设置检查约束
列及
1
2
3
4
5
6
7
8
9
10create table table_name
(
column_name datatype check (expressions),
...
)
--例:
create table userinfo_f3
(
salary number(5,0) check (salary > 0)
)表及
1
2
3
4
5create table table_name
(
column_name datatype,
constraint constraint_name check (expressions)
)
修改表时添加检查约束
1
2alter table table_name
add constraint constraint_name check (expressions)查看约束名
1
select constraint_name,constraint_type,status from user_constraints where table_name = 'userinfo_f3';
删除检查约束
禁用
1
2alter table table_name
disable|enable constraint constraint_name删除
1
2alter table table_name
drop constraint constraint_name
五、查询
1. 基本查询语句
1 | select [distinct] column_name1, ... | * |
2. 在sql*plus中设置格式
1 | --设置结果的字段名 |
3. 给字段设置别名
针对查询结果,不改变表的列名
1 | select column_name as new_name, ... from table_name; |
4. 运算符和表达式
算术运算符 | +、-、*、/ |
---|---|
比较运算符 | >、>=、<、<=、=、<> |
逻辑运算符 | and、or、not |
优先级 | not>and>or;比>算 |
例:
1 | select salary+200 from salarys; |
5. 模糊查询
使用通配符_或%,一个_只能代表一个字符,%可以代表0到多个任意字符。例:
1 | select * from users where username like 'a%';--以a开头 |
6. 范围查询
范围查询使用in/not in或between and。例:
1 | select * from users where salary between 800 and 2000;--[800,2000] |
7. 查询结果排序
1 | select column_name from table_name where [coditions] |
8. case…when语句
1 | --用法1 |
9. decode函数的使用
1 | decode (column_name,value1,result1,...,defaultvalue) |