系统用户:
1.sys system(sys权限最高)
2.sysman(操作企业管理器) 密码是安装的时候输入的密码
3.scott(默认是tiger)
oracle中用户,权限,角色
用户:创建/修改/删除 用户
创建用户: CREATE USER name
IDENTIFIED BY password
[ACCOUNT LOCK|UNLOCK]
[PASSWORD EXPIRE];(口令立刻过期)
修改用户: ALTER USER name
IDENTIFIED BY password
[ACCOUNT LOCK|UNLOCK]
[PASSWORD EXPIRE];(口令立刻过期)
删除用户:DDROP USER name [CASCADE];
具体操作:
CREATE USER test
IDENTIFIED BY test
ACCOUNT LOCK
PASSWORD EXPIRE;
grant create session to test;(用户授权)
ALTER USER test ACCOUNT UNLOCK;(解锁)
登录
1.使用system用户登录
system/password@server
2.使用sys用户登录
connect sys/password as sysdba
查看登录用户
1.show user命令
2.dba_users数据字典(数据字典是数据库提供的表,用于查看数据库的信息)
desc dba_users; (查看数据字典里包含哪些字段)
结果包含如下一些字段:USERNAME NOTNULL VARCHAR2(30)
USER_ID NOTNULL NUMBER
PASSWORD VARCHAR2(30)
...
在数据字典中包含哪些用户?select username from dba_users;
启用scott用户
alter user username account unlock (解锁)
alter user scott ccount unlock;(用户已更改0
使用scott用户登录SQL Plus
conn scott/tiger
修改scott密码
SQL> conn /as sysdba
SQL> alter user scott identified by tiger;
SQL> conn scott/tiger
SQL> select * from tab;
表空间:
理解表空间:数据库与表空间(一个数据库有多个表空间)
表空间与数据文件
表空间的分类:永久表空间(表,视图,存储过程)
临时表空间(数据库操作当中,中间执行的过程,执行结束后会被释放)
undo表空间(保存事务所修改的旧值,可以对数据进行回滚即撤销操作)
查看用户的表空间:
1.dba_tablespaces(系统用户表空间) user_tablespaces(普通用户表空间) 数据字典
步骤:conn system/abc...123
select tablespace_name from dba_tablespaces;
结果为:system (存放sys系统表空间)
sysaux (作为一个example的辅佐表空间)
undotbs1 (存储撤销的表空间)
temp (临时表空间)
users
exmple
步骤:desc user_tablespaces;
select tablespace_name from user_tablespaces;
2.dba_users user_usres数据字典
conn sys/abc...123 as sysdba
desc dba_users;
查看system默认的表空间和临时表空间是什么?
select defult_tablespace,temporary_tablespce from dba_users where username='SYSTEM';
结果是:SYSTEM TEMP(学会如何更改默认表空间和临时表空间,方便数据的备份及恢复)
设置用户默认或临时表空间:
ALTER USER usernme DEFAULT|TEMPORARY TABLESPACE tablespace_name
alter user system default tablespace user;
创建表空间:
create [temporary] tablespace tablespace_name tempfile|datafile 'xx.dbf' size xx
创建永久表空间:
create tablespace test1_tablespace datafile 'textfile.dbf' size 10m;
创建临时表空间:
create temporary tablespace temptest1_tablespace tempfile 'tempfile1.dbf' size 10m;
通过数据字典查看表空间位置:
通过数据字典查看创建的永久表空间:
desc dba_data_files;(返回的字段有file_name tablespace_name...)
查看表空间所在的文件位置:
select file_name from dba_data_files where tablespce_name='TEST1_TABLESPACE';
查看临时表空间:desc dba_temp_files;
查看表空间所在的文件位置:
select file_name from dba_temp_files where tablespce_name='TEMPTEST1_TABLESPACE';
修改表空间:
1.修改表空间的状态
a.设置联机或脱机状态:alter tablespace tablespace_name online|offline;
创建完一个表空间之后,默认状态是联机状态;
具体操作:
alter tablespace test1_tablespace offline;
desc dba_tablespaces;数据字典查看status
select status from dba_tablesaces where tablespace_name='TEST1_TABLESPACE';结果为:status:offline
再设置回联机状态:alter tablespace test1_tablespace online;
select status from dba_tablespaces where tablespace_name='TEST1_TABLESPACE';结果为status:online
b.设置只读或可读写状态:alter tablespace tablespace_name read only|read write;
默认情况下是可读写的,联机状态才可以更改读写性
具体操作:
alter tablespace test1_tablespace read only;
select status from dba_tablespaces where tablespace_name='TEST1_TABLESPACE';结果为:status:online
2.修改数据文件
a.增加数据文件:
alter tablespace tablespace_name add datafile 'xx.dbf' size xx;
具体操作:向表空间test1里添加数据文件
alter tablespace test1_tablespace add datafile 'text2_file.dbf' size 10m;
select file_name from dba_files where tablespace_name='TEST_TABLESPACE';查看新增的文件位置
b.删除数据文件:
alter tablespace tablespace_name drop datafile 'filename.dbf'
不能删除表空间里面的第一个数据文件,如果要删除的话需要把整个表空间删掉。
具体操作:删除上面新增的text2_file.dbf
alter tablespace test1_tblespace drop datafile'text2_file.dbf';
select file_name from dba_files where tablespace_name='TEST_TABLESPACE';查看文件位置发现text2已经删除
删除表空间:
drop tablespace tablespace_name [INCLUEDING CONTENTS]
如若仅删除表空间,不删除数据文件:则不需要加 [INCLUDING CONTENTS]
具体操作:删除表空间test1
drop tablespace test1_tablespace including contents;删除表空间成功
操作表:
1.认识表
a.表都存放在表空间里,是数据库基本存储单位,是一个二维结构,行(记录)和列(域和字段)
b.约定:1.每一列数据必须具有相同的数据类型
2.列名唯一
3.每行数据的唯一性(重复的行会造成表中数据的冗余)
2.数据类型
a.字符型:
char(n),nchar(n)是固定长度的,nchar是按照unique格式存放数据,char的n最大值是2000,而nchar的n最大值是1000;一般用nchar存储汉子。不够会自动补上空格。
varchar2(n),nvarchar2(n),varchar2(n)最大值是4000,nvarchar2(n)最大值是2000.不够不会补上空格,可以节省空间。
b.数值型
number(p,s) p代表有效数字,s代表小数点后的位数;例如:number(5,2) 有效数字5位,保留2位小数,如123.45s
float(n) 主要存储二进制数据(能表示二进制的数据位数是1-126位),二进制数转换成十进制需要乘以0.30103才能得到。所以在oracle中使用number比较多
c.日期型
data date类型表示范围:公元前4712年1月1日到公元9999年12月31日
可以精确到秒。
timestamp时间戳类型,能精确到小数秒
d.其他
blob:能存放4g的数据(二进制)
clob:能存放4g的数据(字符串类型)
3.管理表
创建表:
基本语法:
create table table_name
(
column_name datatype,...
)在同一个用户下,所有的表名要是唯一的
创建用户信息表:
所需字段: 编号 用户名 密码 邮箱 注册时间
字段的类型:number varchar2(n) date
create table userinfo
(id number(6,0),
username varchar2(20),
userpwd varchar2(20),
email varchar2(30),
regdate date);
查看表的结构与查看数据字典的方法一样:desc userinfo
修改表:(修改表的结构,而不是数据)
1.添加字段(列或者域):
如果一个表已经创建好,还想再添加一些字段:
alter table table_name add column_name datatype;凡是对表进行修改都是alter table
具体操作:向useinfo表里添加一个备注字段
alter table usreinfo add remarks varchars(500);
2.更改字段的数据类型:
alter table table_name modify column_name datatype;
操作:修改数据类型的长度,更换数据类型
alter table userinfo modify remarks varchar2(400);注意:如果在一个表当中已经存在了数据,则不能修改,只有在数据为空的情况下才能进行更改)。
alter table userinfo modify userpwd number(6,0);修改密码字段的数据类型
3.删除字段:
alter table table_name drop column column_name;
具体操作:alter table userinfo drop column remarks;
4.修改字段名:
alter table table_name rename column column_name to new_column_name;
具体操作:alter table useinfo rename column email to new_email;
5.修改表名:
rename table_name to new_table_name;
rename userinfo tp new_userinfo;
4.删除表:
truncate table table_name;(删除表当中的全部数据,也叫截断表,比delete速度快)
truncate table new_userinfo;删除表里的数据,表的结构仍然存在。
drop table table_name;删除整张表的结构:
drop table new_userinfo;删除表不存在了。
操作表中的数据:
1.添加数据:
insert语句:
insert into table_name
(column1,column2,...)
values(value1,value2,...)
操作实例:
1.向表中所有字段添加值:
insert into userinfo values(1,'xxx','123','[email protected]',sysdate);向表中插入一条数据,sysdate函数获取当前系统时间。
查看该条数据:select * from userinfo;
2.向表中指定字段添加值:
insert into userinfo(id,username,userpwd) values(2,'yyy','123');
查看数据:select username,userpwd from userinfo;
3.向表中添加默认值:
a.创建表时就设置;create table userinfo1(id number(6,0),regdate date default sysdate);
插入数据时:insert into userinfo1 (id) values(1);则regdate字段会自动补上。
查询:select * from userinfo1;
修改userinfo表email字段
b.已经创建好表,后来再修改成default
更改字段的数据类型:alter table userinfo modify email default '无';
再向表中插入数据:insert into userinfo (id) values(2);
查看:select email from useinfo;
注意:字符型加单引号;如果在创建表市,某些字段不能为空时添加值时需不为空。
2.复制表数据:
1.在建表时复制:
create table table_new as select column1,...|*from table_old;
create table userinfo_new as select * from userinfo;全部复制
create table userinfo_new1 as select id,username from userfino;复制部分
2.在添加时复制:
insert into table_new [(column1,..)] select column1,...| * from table_old;
表已经存在,在添加数据时复制数据:
insert into userinfo_new select * from userinfo;复制userinfo表的全部数据
查看:select if from userinfo_new;
inert into uerinfo_new(id,username) select id,username from userinfo;复制userinfo表的部分数据
3.修改数据:
update语句:
update table_name set column1=value1,...[where cinditions];修改的条件,如果不加where condition则会给所有的行更改
操作实例:
无条件的更新:
update userinfo set userpwd='111111';一个字段的更改
select userpwd from userinfo;
update userinfo set userpwd='111',email='[email protected]';多个字段的更改
select userpwd,email from userinfo;
有条件的更新:
用户名是xxx的密码改为:123456
update userinfo set userpwd='123456' where username='xxx';
select userpwd from userinfo;
4.删除数据:
以行为单位来进行删除。
delete from table_name; truncate table截断表 和delete from table_name效果一样
操作实例:
无条件的删除:
先创建删除表:create table testdel1 as select * from userinfo;
删除表;delete from testdel1;
查看:select * from testdel1;结果:未选定行,删除成功。
有条件的删除:删除用户名是yyy的用户:
先查看yyy用户是否存在:select username from userinfo;
删除用户名yyy:detele from userinfo where username='yyy';
约束:数据类型是控制输入的值的类型,约束是控制你输入的值要满足你设定好的一些要求的。
1.约束的作用:
1.定义规则
2.确保完整性
2.oracle中的5个约束:
1.非空约束
1.在创建表时设置非空约束:
create table table_name (column_name datatype not null,...);
create table userinfo_1(id number(6,0),username varchar2(20) not null, userpwd varchar2(20) not null);
2.在修改表时添加非空约束:
alter table table_name modify column_name dtatype not null;
给userinfo添加非空约束:alter table userinfo modify username varchar2(20) no tnull;报错,因为表内有数据。
此时需要把表内数据删除才能添加约束:delete from userinfo;
再执行: alter table table_name modify column_name dtatype not null;添加约束,就会成功。
3.在修改表时去除非空约束:
alter table table_name modify column_name datatype null;
alter table table_name modify column_name dtatype null;
2.主键约束
作用:确保表当中每一行数据的唯一性(非空,唯一)一张表里只能设置一个主键约束,但是这个主键约束可以由多个字段构成(联合主键或复合主键)
1.在创建表的时候设置主键约束:
列集:
create table table_name ( column_name datatype primary key,...)
create table userinfo_p
(id number(6,0) primary key,
username varchar2(20),
userpwd varchar2(20)
); 主键约束默认是not null;
表集:
联合主键:(在所有的字段写完后,再写此句约束)表集约束
constraint constraint_name primary key(column_name1,...)
create table userinfo_p1
(id number(6,0),
username varchar2(20),
userpwd varchar2(20),
constraint pk_idusername primary key(id,username));
结果表userinfo_p1的id 和username都为not null.
desc user_constraints;通过这个数据字典来查询约束的名字,类型等
例如查约束的名字:
select constraint_name from user_constraints where table_name=' userinfo_p1';
查询到的主键约束名字为:pk_idusername
之前给userinfo_p的id字段设置主键约束但并未设置名字,而是由系统生成的, select constraint_name from user_constraints where table_name=' userinfo_p';结果为:SYS_C0010836
2.在修改表的时候添加主键约束:
ADD CONSTRAINT constraint_name primary key(column_name1,...);
alter table userinfo
add constraint pk_id primary key(id);
如果表当中已经存在值了,值必须得是唯一的,不能为空值;最好的在添加主键时表内没有值。
select constraint_name from user_constraints where table_name=' userinfo';结果:pk_id
3.更改约束的名称:
rename constraint old_name to new_name
alter table userinfo
rename constraint pk_id to new_pk_id;
可以更改主键约束的名字,也可以更改任何一个约束的名字。
4.删除主键约束:
1.禁用|启用:
disable|enable constraint constraint_name
操作:alter table userinfo
disable constriant new_pk_id;
查看禁用的约束:
select constraint_name,status from user_constraints where table_name='USERINFO';
2.drop constraint constraint_name完全删除约束
操作:alter table userinfo
drop constraint new_pk_id;
3.drop primary key[cascade],由于每张表只有一个主键约束,cascade是表存在及联约束时,删除其余表对这表的外键约束
3.外键约束
1.在创建表时设置外键约束:
列集:
create table table1
(column_name datatype references
table2(column_name),...);
table2是主表,table1是从表;设置外键约束时,主表的字段必须是主键,主从表中相应的字段必须是同一个数据类型;从表中外键字段的值必须来自主表中的相应字段的值,或者为null的值
操作:
1.先创建主表:(用户类型表)
create table typeinfo
(typeid varchar2(10) primary key,
typename varchar2(20));
2.创建从表:
create table userinfo_f
(id varchar2(10) primary key,
username varchar2(20),
typeid_new varchar2(10) references typeinfo(typeid));
3.验证向从表当中的typeid的来源要么是主表当中的值要么是空值。
insert into typeinfo values(1,1);
insert into userinfo_f(id,typeid_new) values(1,2)报错
insert into userinfo_f(id,typeid_new) values(1,1); ok了
插入空值insert into userinfo_f(id,typeid_new) values(2,null); ok了
表集:
关键字 外键约束关键字
constraint constraint_name foreign key(column_name) references table_name(column_name) [ON DELETE CASCADE]及联删除:主表当中的数据删除之后,从表当中使用了这条数据的字段也会被删除。确保了主从表数据的完整性。约束的名字是唯一的
create table userinfo_f2
(id varchar2(10) primary key,
username varchar2(20),
typeid_new varchar2(10),
constraint fk_typeid_new foreign key(typeid_new) references typeinfo(typeid));
操作:
create table userinfo_f3
(id varchar2(10) primary key,
username varchar2(20),
typeid_new varchar2(10),
constraint fk_typeid_new1 foreign key(typeid_new) references typeinfo(typeid) on delete cascade);
2.在修改表时添加外键约束:
add constraint constraint_name foreign key(column_name) references table_name(column_name) [on delete cascade]
操作:
1.创建表:create table userinfo_f4
(id varchar2(10) primary key,
username varchar2(20),
typeid_new varchar2(10));
2.更改表:
add constraint fk_typeid_alter foreign key(typeid_new)references typeinfo(typeid);
3.删除外键约束:
1.禁用|启用:
disable|enable constraint constraint_name
因为忘记了外键约束的名字,所以先查找外键约束的名字:
select constraint_name,constraint_type,status from user_constraints where table_name='USERINFO_F4';
结果:一个P,主键约束;一个R,外键约束,名字为:FK_TYPEID_ALTER
操作:alter table userinfo
disable constraint FK_TYPEID_ALTER;
验证是否禁用:
select constraint_name,status from user_constraints where table_name='USERINFO_F4';
2.彻底删除:
drop constraint constraint_name完全删除约束
操作:alter table userinfo
drop constraint FK_TYPEID_ALTER;
4.唯一约束
作用:保证字段值的唯一性
主键约束作用是保证值的唯一性;唯一约束和主键约束的区别:主键字段必须是非空的,而唯一约束则可以为空值;每张表的主键约束只能有一个,而唯一约束却可以有多个。
1.在创建表时设置唯一约束:
列集:
create table table_name
(column_name datatype UNIQUE,...)
操作:create table userinfo_u
(id varchar2(10) primary key,
username varchar2(20) unique,
userpwd varchar2(20));
表集:
constraint constraint_name unique(column_name),这句话放在所有字段定义完成之后。
要将多个字段设置成唯一的约束,需要写多个唯一约束语句。
操作:create table userinfo_u1
(id varchar2(10) primary key,
username varchar2(20),
constraint un_username unique(username));
2.在修改表时添加唯一约束:
add constraint constraint_name unique(column_name);
操作:1.创建表:create table userinfo_u2
(id varchar2(10) primary key,
username varchar2(20));
2.添加唯一约束:
alter table userinfo_u2 add constraint un_username_new unique(username);
3.删除唯一约束:
1.暂时禁用:
disable|enable constraint constraint_name
查看约束的名字,类型,状态:
select constraint_name,constrint_type,status from user_constraints where table_name=' userinfo_ u2';
结果为: 一个u 一个p.
alter table userinfo_u2
disable constraint UN_USENAME_NEW;
2.彻底删除:
drop constraint constraint_name
5.检查约束
作用:让表中的数据更具有实际意义
员工个人信息:年龄,工资,电话号码
50 1000 134XXXXX
1.在创建表时设置检查约束:
在一个表当中也可以有多个。
列集:
create table table_name (column_name datatype check(expressions),...)
操作:create table userinfo_c
(id varchar2(10) primary key,
username varchar2(20),
salary number(5,0) check(salary>0));
这样就不能往里插负数的工资数据了。
表集:
constraint constraint_name check(expressions);通常以ck,chk开头
操作:
create table userinfo_c1
(id varchar2(10) primary key,
username varchar2(20),
salary number(5,0),
constraint ck_salary check(salary>0));
2.在修改表时添加检查约束:
add constraint constraint_name check(expressions);
操作:create table userinfo_c3
(id varchar2(10) primary key,
username varchar2(20),
salary number(5,0));
alter table userinfo_c3
add constraint ck_salary_new check(salary>0);
3.删除检查约束:
1.暂时禁用:
disable|enable constraint constraint_name
2.彻底删除:
drop constrint constraint_name
约束小结:1.只有主键约束在每张表里面只能有一个,可以由多个字段构成。
2.外键约束时唯一一个涉及两张表之间关系的约束
3.在创建表时设置约束:非空约束只能在列级设置,不能在表级设置,并且设置非空约束时,非空约束没有名字。
4.在修改表时添加约束:在修改表的时候添加非空约束实际上用的是:修改字段的语句,为:alter table table_name modify column_name datatype not null;
5.更改约束的名称:非空约束没有名字,不能使用该语句
1.不知道约束名称时,可以更加数据字典来查看:user_constraints
2.rename constraint old_name to new_name 此语句就是更改约束名称的语句
6.删除约束:1.alter table table_name modify column_name datatype null;
2.禁用:disable | enable constraint constraint_name(放在alter table之后出现)
3.彻底删除:drop constraint constraint_name
4.删除主键约束:drop primary key
查询:
1.基本查询语句:
select [distinct] column_name1,...|* from table_name [where conditions]
2.在SQL*PLUS中设置格式:设置查询结果的显示格式
1.更改查询后结果的字段名:column column_name heading new_name; (column可以简写成col)
操作:设置新的字段名:col username heading 用户名;
2.column column_name format dataformat; (注意:字符类型只能设置显示的长度)
操作:把用户名字段的数值长度改为10:
col username format a10;(a代表字符型,10代表10个长度)
把工资字段设置为显示一位小数:
col salary format 9999.9;(9代表一个数值)
把工资格式改为美元符号开头:
col salary format $9999.9;
3.清除设置的格式:col column_name clear;
3.查询表中的所有字段及指定字段:
1.查询所有字段:select * from table_name;
操作:select * from users;
2.查询部分字段:select column1_name,column2_name from table_name;
4.给字段设置别名 :(注意:是针对查询结果进行的,并没有更改字段的名字)
可以一次为多个字段设置别名
select column_name as new_name,... from table_name;(注意:as可以省略,用空格隔开原来的字段名和新名字即可)
操作:select id as 编号,username as 用户名,salary 工资 from users;
通过distinct去除重复的用户名:
select distinct username as 用户名 from users;
5.运算符和表达式:
表达式=操作数+运算符
操作数:变量,常量,字段;
运算符:算术运算符:+ - * /
比较运算符:>, >=, <, <=, =, <>
逻辑运算符:and or not (not是非)
6.在select语句中使用运算符:(只影响查询结果,不影响实际表中的数据,要真的改表中的数据,需要使用update语句)
使用算术运算符:select id,username,salary+200 from users;(给工资加200元)
使用比较运算符:select username from users where salary>800;(查询工资超过800元的人)
使用逻辑运算符:select username from users where salary>800 and salary<>1500;(查询工资高于800,但不等于1500的人);
7.带条件的查询:
1.单一条件查询: select salary from users where username='aaa';
2.多条件的查询: 使用逻辑运算符连接语句 select * from users where username='aaa' or salary>2000;
select * from users where username='aaa' or (salary>800 and salary<=2000);
逻辑运算符的有限性:not > and > or; 比较运算符 >逻辑运算符
select * from users where not (username='aaa');
8.模糊查询:
like
通配符的使用:_ %(一个_只能代表一个字符,%可以代表0到多个任意字符)
操作:查找以a开头的用户:select * from users where username like 'a%';
查找含有a的用户名:select * from users where username like '%a%';
9.范围查询:
between...and(从什么值到什么值)
操作:查询工资从800到2000的用户:select * from users where salary between 800 and 2000;(是闭合区间)
in/not in (后面的值不是范围,而是一个具体的值)查询的值等于什么,不等于什么。
select * from users where username in ('aaa','bbb');
10.对查询结果排序:
select... from...[where...] order by column1 desc/asc,...
操作:select * from users order by username desc,salary asc;(用户名)
11.case...when语句使用:
1. case column_name
when calue1 then result1,...
[else result] end
操作:select username, case username when 'aaa' then '计算机部门'
when 'bbb' then '市场部门' else '其他部门' end as 部门
from users;
2. case
when column_name=value1
then result1,...[else result] end
操作: select username,case when username='aaa' then '计算机部门'
when username='bbb' then '市场部' else '其他部门' end as 部门
from users;
select username,case when salary<800 then '工资低'
when salary>5000 then '工资高' end as 工资水平
from users;
12.decode函数的使用:
decode (column_name,value1,result1,...,defaultvalue)
操作: select username, decode(username,'aaa','计算机部门','bbb','市场部门','其他')as 部门
from users;
总结:
1.用户表空间:
1.如何查看登录用户:show user命令 dba_users数据字典
2.启用scoot用户
3.如何查看某个用户的默认表空间和临时表空间
4.表空间管理:创建,修改,删除表空间
2.表与约束:
1.数据类型:char(n) nchar(n) varchar2(n) nvarchar2(n) ;数值型:number(p,s) float(n) ;日期型:date,timestamp ;其他类型:blob,clob
2.对表的创建,修改,删除
3.对表中数据的操作:添加数据insert 修改数据update 删除数据:delete
4.5个约束:非空约束,主键约束,外键约束,唯一约束,检查约束
5.查询语句:查询所有字段和指定字段;在查询语句中使用运算符和表达式;在查询语句中加入where;范围查询;模糊查询:like关键字,通配符;case...when语句和Decode函数