oracle表空间管理、各种约束、表操作、事务、基本查询(模糊查询)、过滤运算及排序

一、表空间管理

 

1、查看用户的表空间

数据字典-----指数据库提供的用于查询信息的表

a、dba_tablespaces //数据库管理员级别表空间信息

b、user_tablespaces //普通用户级别表空间信息

例:

select tablespace_name from dba_tablespaces;

select tablespace_name from user_tablespaces;

注:dba_users 查看所有用户信息

user_users 查看当前连接用户的信息

例:查看system用户的表空间信息

select default_tablespace,temporary_tablespace from dba_users(表) where username='SYSTEM';

2、设置用户默认或临时表空间

alter(更改) user(用户) username(用户名) default|temporary tablespace tablespace_name(表空间名);

例:alter user user01

default tablespace test1_tablespace

temporary tablespace temptest1_tablespace;

3、修改表空间的状态(设置联机或脱机状态)

alter tablespace tablespace_name online|offline;

特别说明:若一个表空间设置成脱机状态,表示该表空间暂时不让访问,设置成脱机状态不是删除,当需要时可改为联机状态,正常使用。

select status from dba_tablespaces where tablespace_name

='TEST1_TABLESPACE';//查询状态

4、设置只读或可读写状态

alter tablespace tablespace_name (read only)|(read write)

//默认是可读写状态

5、增加数据文件

alter tablespace tablespace_name add datafile(数据文件) 'filename.dbf'(指定名称) size(指定大小) xx;

//向创建好的表空间里增加数据文件

6、删除数据文件

alter tablespace tablespace_name drop datafile 'filename.dbf';

说明:不能删除表空间中第一个创建的数据文件,如果需要删除的话,我们需要删除整个表空间。

7、删除表空间

drop tablespace tablespace_name [including contents]

说明:a、若只是删除表空间而不删除数据文件

drop tablespace tablespace_name;

b、删除表空间及数据文件

drop tablespace tablespace_name including contents;

8、sql——结构化查询语言

DDL——数据定义语言:创建、修改、删除数据库对象

DML——数据操作语言:检索或修改数据

DCL——数据控制语言:定义数据库用户权限

TCL——事物控制语言:事物提交

常用DDL语句:

create table:创建数据库表

create index:创建数据库表的索引

drop table:删除数据库表

drop index:删除索引

truncate:删除表中的所有行

alter table:更改表结构,增加,修改,删除列

alter table add constraint:在已有的表上增加约束

二、数据库表的约束

1、创建表

语法:create table table_name(

column_name(列名) datatype(数据类型),...

) ;

创建普通表

数值类型:number(p,s)

p表示精度,s表示小数点的位数。最高精度为38位

日期类型:date

 

例:1、建立一张学生信息表

2、包含(学号、姓名、性别、出生日期、家庭住址)

create table student(

sid number(8,0),

name varchar2(20),

sex char(2),

birthday date,

address varchar2(50)

);

2、主键约束

约束是oracle中提供的自动保持数据库完整性的一种方法。它通过限制字段中的数据,记录中数据和表之间的数据来保证数据的完整性。

语法格式:constraint constraint_name(约束名) <约束类型>

说明:约束不指定名称时,系统会给定一个名称。

主键(primary key)约束用于定义基本表的主键,它是唯一确定表中每一条记录的标识符,其值不能为null,也不能重复。表中主键只能有一个,但可以由多个列构成。如primary key(学号,科目编号)

例:a、创建表时添加主键约束

create table student(

sid number(8,0),

name varchar2(20),

sex char(2),

birthday date,

address varchar2(50),

constraint sid_pk(主键名) primary key(sid)

);

b、修改表时添加主键约束

alter table student add constraint sid_pk primary key(sid[此列加约束]);

3、非空约束(它是列级约束)

非空(NOT NULL)约束用于确保列不能为NULL,如果在列上定义了NOT NULL约束,则插入数据时,必须为该列提供数据。当更新列数据时,不能将其值设为NULL。

列级约束:

column [constraint constraint_name(可省略)] constraint_type,

说明:列级约束必须跟在列的定义后面。

表级约束:

column ,...

[constraint constraint_name(可省略)] constraint_type

(column,...),

说明:表级约束不与列在一起,而是单独定义的

例:创建表时添加非空约束

create table student(

sid number(8,0),

name varchar2(20) not null(未指定约束名),

sex char(2) constraint nn_sex not null,

birthday date,

address varchar2(50),

constraint sid_pk(主键名) primary key(sid)

);

修改表时添加非空约束

修改表添加约束的语法:

alter table table_name add [constraint constraint_name] constraint_type (column)指哪一列;

而添加非空约束要用MODIFY语句

alter table table_name MODIFY (column datatype not null);

删除约束的方式

a、将约束禁用/激活

alter table 表名 disable/enable constraint constraint_name

b、将约束彻底删除

alter table table_name drop constraint constraint_name;

c、删除主键约束的格式

alter table table_name drop primary key;

d、删除非空约束的语法

alter table table_name MODIFY column_name datatype null;

4、唯一约束

唯一(unique)约束用于指定一个或多个列的组合值具有唯一性,以防止在列中输入重复的值。

 

例:创建表时设置唯一性约束

create table student(

sid number(8,0),

name varchar2(20),

sex char(2),

birthday date,

address varchar2(50),

email varchar2(50) unique,(列级约束)

cardid varchar2(18),

constraint UK_cardid unique(cardid) (表级约束)

);

修改表时添加唯一性约束

alter table student add constraint UK_cardid unique(cardid某列);

删除唯一约束

a、禁用

alter table student disable constraint UK_cardid;

b、彻底删除

alter table student drop constraint UK_cardid;

5、检查约束

检查(check)约束对输入列或者整个表中的值设置检查条件,以限制输入值,保证数据库数据的完整性。

例:创建表时设置检查约束

a、列级约束

create table student(

sid number(8,0),

name varchar2(20),

sex char(2) check(sex='男' or sex='女'),

birthday date,

address varchar2(50),

);

b、表级约束(单独定义)

create table student(

sid number(8,0),

name varchar2(20),

sex char(2) ,

birthday date,

address varchar2(50),

constraint ck_sex check(sex='男' or sex='女')

);

c、修改表时添加约束

alter table student add constraint ck_sex check(sex='男' or sex='女');

指定约束类型

d、禁用约束

alter table student disable constraint ck_sex;

e、永久删除

alter table student drop constraint ck_sex;

6、外键约束

外键(foreign key)是用于建立和加强两个表数据之间的链接的一列或多列。外键约束是唯一涉及两个表关系的约束。

主表(院系信息表) 从表(学生信息表)

列级约束

create table 从表

( column_name(外键列名) datatype references

主表(column_name主键列名) [on delete cascade级联删除],...);

表级约束

constraint constraint_name foreign key (column_name)

references 主表 (column_name)

[on delete cascade]

例:创建表时设置外键约束

主表:

create table department(

depid(系号) varchar2(10) primary key,

depname(系名) varchar2(30)

);

从表:

create table student(

sid number(8,0),

name char(10),

sex char(2) ,

birthday date,

address varchar2(20),

depid varchar2(10) references department(depid)

);

注意:

1、设置外键约束时主表的字段必须是主键列

2、主从表中相应字段必须是同一类型

3、从表中外键字段的值必须来自主表中相应字段的值,或为null

例:修改表时添加外键约束

alter table student

add constraint fk_depid foreign key(depid)

references department(depid)

on delete cascade;

禁用约束

alter table student disable constraint fk_depid;

删除约束

alter table student drop constraint fk_depid;

 三、表操作及事务回滚

1、修改表

a、添加列

alter table 表名 add 新增列名 数据类型;

例:alter table student add tel varchar2(11);

b、修改列

alter table 表名 MODIFY 列名 新数据类型;

例:alter table student modify tel number(11,0);

c、删除列

alter table 表名 drop column 列名;

例:alter table student drop column tel;

2、修改列名

alter table 表名 rename column 列名 to 新列名;

例:alter table student rename column sex to gender;

3、修改表名

rename 表名 to 新表名

例:rename student to studentinfo;

4、删除表

a、truncate table 表名

用于删除表中的全部数据,并不是把表删除掉,这种删除方式比delete删除方式删除数据的速度快,也叫截断表。

b、drop table 表名

删除表结构(包括数据)。

5、增删查改(DML操作)

a、添加信息

insert into 表名[(列1,列2,...,列n)] values (值1,值2,...,值n);

例:

insert into student(sid,name,sex) values(20010001,'张三','女');

b、查询信息

select */column(指定列) [,...] from 表名;

例:查询全体学生的学号和姓名

select sid,name from student;

查询全体学生

select * from student;

c、修改信息

update table

set column=value[,column=value,...]

[where condition];

例:

update student set tel='139xxxx8888' where sid=20010001;

update student set address='甘肃省庆阳市';(所有都修改了)

d、删除信息

delete from table [where condition];

例:

delete from student;(删除student表中所有数据)

delete from student where sid=20010001;(删除指定数据)

6、表操作——事务(保证数据的安全有效)

事务可以看做是由数据库的若干操作组成的一个单元,这些操作要么都完成,要么都取消,从而保证数据满足一致性的要求。

DML语句要使用commit提交事务或使用rollback回滚事务

DDL和DCL是自动提交事务的

比如当执行事务操作(DML语句)时,oracle会在被作用表上加表锁,以防止其他用户改变表结构;同时会在被作用行上加行锁,以防止其他事务在相应行上执行DML操作。

事务的控制命令:

a、通过commit语句提交事务,当执行了commit语句后,会确认事务的变化,结束事务,删除保存点,释放锁。

b、当使用commit语句结束事务之后,其他会话将可以查看到事务变化后的新数据。

回滚事务(rollback)

rollback只能对未提交的数据撤销,已经commit的数据是无法撤销的,因为commit之后已经持久化到数据库中。

保存点(savepoint)

是事务中的一点,用于取消部分事务,当结束事务时,会自动删除该事务所定义的所有保存点。当执行rollback时,通过指定保存点可以回退到指定的点。

设置保存点:savepoint a;

回滚部分事务:rollback to a;

回滚全部事务:rollback;

7、oracle的数据字典(了解数据库的内部信息)

数据字典是oracle存放有关数据库信息的地方,是用来描述数据的。数据字典是一组表和视图结构。

数据字典中的表是不能直接被访问的,但是可以访问数据字典中的地图。

以user_*开头:该视图存储了关于当前用户所拥有的对象的信息。(即所有在该用户模式下的对象)

以all_*开头:该视图存储了当前用户能够访问的对象的信息。(与user_*相比,all_*并不需要拥有该对象,只需具有访问该对象的权限即可。)

以dba_*开头:该视图存储了数据库中所有对象的信息。(当前用户必须有管理员权限。)

例:应用数据字典查看相应信息。

select * from user_users; //查看当前用户下的用户信息

select * from all_users; //当前用户有权访问的所有用户信息

select * from dba_users; //数据库所有用户的用户信息

 四、oracle的基本查询

1、oracle的基本查询语句

a、基本查询:

select *|{[distinct] column |expression [alias],...}

from table [where condition];

table 用于指定表名

column 用于指定列名

expression 用于指定表达式

alias 用于指定列的别名

condition 用于指定查询条件

排除重复行(distinct)

默认情况下,当执行查询操作时,会显示所有满足条件的行,包括重复行。

例:select distinct depno,job from emp;

b、查询日期列:

日期列:数据类型为日期类型的列,如date类型。

日期列的默认显示格式为DD-MON-RR

RR:代表年,且只取年份的后两位数字

以简体中文显示日期结果

alter session set nls_language ='simplified chinese';

以特定格式显示日期结果

alter session set nls_date_format='yyyy/mm/dd';

2、算术运算符的使用

a、需求:应用scott.emp表查询雇员编号,雇员名,雇员月工资,雇员年收入

select empno,ename,sal,sal*12 from emp;

b、优先级举例(需求:查看雇员编号,雇员名,年收入(年薪加半月工资))

select empno,ename,sal*12+sal/2 from emp;

在算术运算中的空值null

null表示未知值,它既不是空格,也不是0.

当算术表达式包含null时,其显示结果也为空(null)。

例:查询雇员编号,雇员名,工资,补助,实发工资的信息

select empno,ename,sal,comm,sal+comm from emp;

空值:当插入数据时,如果没有为特定列提供数据,并且该列没有默认值,那么其结果为null。

默认值:在创建表时可以使用default关键字为列设置默认值,在表中插入数据时,如果没有为该列提供数据,那么该列将使用默认值。

默认值的例子:

create table student(

sid number(8,0) primary key,

name varchar2(10),

sex char(2) default '男',

age number(2,0) default 20,

address varchar2(50)

);

insert into student (sid,name) values (20010001,'张三');

insert into student values (20010002,'王五',default,default,'甘肃省庆阳市');

3、查询语句中列的别名,连接符,字符串

a、列的别名用于改变列的显示标题

b、列的别名可以跟在列名的后面,也可在二者间加as关键字

c、若别名中包含空格或特殊字符,或要区分大小写,则要给别名加双引号

列的别名举例:

不使用列的别名

select empno,ename,sal*12 from emp;

使用列的别名

select empno"雇员编号",ename“雇员名”,sal*12"全年工资" from emp;

select empno as "雇员编号",ename as "雇员名",sal*12 as "全年工资" from emp;

连接符||

a、连接字符串可以使用“||”操作符或concat函数

例:select ename ||'的岗位是:'||job as 员工的职位信息 from emp;

字符串可以是select列表中的字符,数字,日期;日期和字符只能在单引号中出现;每当返回一行时,字符串被输出一次。

例:select ename ||'的月薪是'|| sal from emp;

4、过滤数据(比较运算)

a、使用where子句,将不满足条件的行过滤掉

select *|{[distinct] column|expression [alias],...}

from table

[where conditions];

b、where子句中使用数字值

当在where子句中使用数字值时,即可直接引用数字值,也可以用单引号引住数字值。

例:select * from emp where deptno=20;

c、where子句中使用字符值

当where子句使用字符值时,必须给字符值加上单引号

字符值是区分大小写的

例:select * from emp where job='MANAGER';

d、where子句中使用日期值

必须给日期加单引号

日期值必须符合日期语言和显示格式

例:select * from emp where hiredate = '02-4月-81';

e、比较运算符

举例:

select * from emp where sal = 3000;

select * from emp where sal>=3000;

select * from emp where sal<>3000;

select * from emp where sal>1000 and sal<3000;

select * from emp where sal<1000 or sal>3000;

5、过滤数据(范围模糊运算)

a、范围查询 between...and...

用于指定特定条件;两值之间包含边界;between 较小值 and 较大值

例:

select empno,ename,sal from emp where sal between 1500 and 3000;

等价于 select empno,ename,sal from emp where sal>=1500 and sal<=3000;

b、范围查询 in

in执行列表匹配的操作;

列或表达式结果匹配列表中的任意一个值;

in(值1,值2,...值n)

例:select empno,ename,job from emp where job in ('SALESMAN','MANAGER','CLERK');

等价于 select empno,ename,job from emp where job='SALESMAN'

or job='MANAGER' or job='CLERK';

c、模糊查询like

用like执行模糊查询;

当执行模糊查询时,要使用通配符%和_;

%:用于表示0个或多个字符;

_:用于表示单个字符

例:

select * from emp where ename like 'J%';

select * from emp where ename like '_AR%';

d、模糊查询中特殊符号的处理

若字符本身包含_和%字符,并且开发人员想使用这两个字符执行模糊查询,那么escape和转义符实现。

回避特殊符号的方法:使用转义符。例如,将【%】转为【\%】、【_】转为【\_】,然后再加上【escape'\'】即可。

例:select * from emp where ename like 'G\_%' escape'\';

e、判断空值 is null

is null用于检测列或表达式的结果是否为null,若为null,则返回true;否则返回false。

判断列或表达式的值是否为空可用is null或is not null,但不能用=null或<>null来判断。

例:select empno,ename,sal,comm from emp where comm is null;

select empno,ename,sal,comm from emp where comm is not null;

例、一张学生表,name,sex,id 查询男女的人数(一条sql)

 **select sex,count(id) 人数

   from student

   group by sex;

 

6、过滤数据(逻辑运算)

a、当执行sql操作时,如果sql语句结果必须同时满足多个条件,那么要用and

例:select empno,ename,job,deptno

from emp

where job='MANAGER' and deptno=10;

b、or

例:select empno,ename,job,sal

from emp

where job='MANAGER' or sal>2000;

c、not

例:select empno,ename,job

from emp

where job not in('CLERK','SALESMAN','MANAGER');

d、混合使用

优先级从高到低:not,and,or

例: select empno,ename,job,sal

from emp

where (sal>2000 or deptno=30) and job not in ('PRESIDENT','MANAGER');

7、排序数据

a、使用order by子句

select *|column[,column...]

from table

[where condition]

[order by column [ASC|DESC]];

ASC 升序

DESC 降序

注意:当select语句包含多个子句(where,group by,having,order by)时,order by必须是最后一条语句。

b、单列升序或降序排序

升序

说明:如果排序列存在null行,那么null行会显示在最后面。

select ename,sal from emp order by sal ASC;

select ename,sal from emp order by sal;(默认为升序)

降序

说明:如果排序列存在null行,那么null行会显示在最前面。

select ename,sal from emp order by sal desc;

使用列别名排序

select empno,ename,sal*12 年收入

from emp

order by 年收入 desc;

多列排序

以多列进行排序时,首先按第一列进行排序,当第一列存在相同的数据时,以第二列进行排序,以此类推。

例:select empno,ename,deptno,sal

from emp

order by deptno asc,sal desc;

//以部门编号升序排序,当其编号相同时,以薪资降序排序。

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值