Oracle学习:
基本用途
数据库管理系统(DBMS)组成部分:存储和检索数据,识别用户,创建应用。
启动数据库:
连接数据库工具:sqlplus-----基于命令的sqlplus
Sqlplus 用户名/密码 @host_string
举例:管理员用户:Cmd---services.msc----sqlplus sys/ as sysdba
密码:xxx
注意:
凡是sys 用户,必须指定身份 身份是 as sysdba sysoper---不然会报错
如果指定了sys的身份 可以不输入密码,系统也会正常登陆,(但是Windows必须管理员身份进入)
输入sys 用户身份 没有输入米么 可以正常登陆的先决条件 必须是从操作系统的管理员
普通用户:sqlplus scott/tiger ---sqlplus 用户名/密码
退出:exit
查询所有用户:
select * from all_users;
创建用户的基本命令
必须是管理员权限才能创建用户
创建用户的命令是:create user 用户名 identified by 密码;
示例:create user lisi identified by lisi;
切换用户:connect 用户名/密码
示例: connect lisi/lisi -----
注意:
刚创建用户不具备任何权限,既:不能连接数据库,必须授予权限。
点击切换用户,会报错,此时执行3条语句:
connect sys/moon as sysdba;----
grant connect,resource to lisi;----grant保证能连上数据库, resource保证能获取资源 这2个是角色。
connect lisi/lisi
sql*plus
sql全称是结构化查询语言
优势:语言结构简单,功能强大,简单易学
sql能够执行以下几种操作:
查询数据
插入数据
删除数据
创建和操作数据库对象
控制对数据库的访问
sql语句报错排查网站:http://ora-code.com
sql分类:
数据定义语言(DDL),如create,drop,rename---无法回滚
数据操作语言(DML),如insert,update,delete---可以回滚
数据控制语言(DCL),如grant,revoke
查询语言,如select
事务控制语言(Transaction Control,TC ),如:commit,rollback,savepoint
sql*plus:是一个客户端的应用工具。
查看缓存中的数据: l 或者 list
运行缓存中的sql语句:/ 或者 r
n命令使用:如果sql语句出错了,可以使用n,这个n 的意思是设置sql*plus中当前行,n就是一个具体值
语法格式:n
删除命令:
如果要删除缓存中的某行,可以使用del命令
语法格式:del n
添加命令:如果想在某一行后面添加一些sql语句,可以使用a(append),中文意思附加命令,
语法格式:a -----a空格空格
示例:如果有多行数据,想在地二行添加:
2
a where sno like "%s"
修改命令
如果要修改sql缓存中的语句,可以使用c(change)命令。
语法格式:c /被修改内容/新内容
创建表与维护表
常用数据类型
char(length)
varchar2(length)
date
语法 insert into emp (name,birth)
2 values ("zhang",to_date("1999-09-09","yyyy-mm-dd"))
或者insert into emp (name,birth) values ("lili","09-9月-99")
select sysdate from dual;
integer
存储整数 不能是浮点数
number(m,n)
存储浮点数和整数,m代表存储的最大位数,n 代表小数点右边最大位数,如果没有指定,m和n,那么默认存储38位精度的数字。
binary_float
binary_double
创建表的语法结构:
create table [用户名.]表名 (列名 数据类型 [default 默认值]
[,。。。。])
示例:create table A (id varchar2(20) defalult "成都")-----给个默认值成都
创建表和列名的命名规范
必须以英文字母开头,之后跟大写或小写英文字母,或者数字,或者#或者$ 或者_。注意不能与关键字相同。
通过子查询创建表
create table B as select * from salary;----salary 是存在的表
修改表结构
1,在一个表中加入一个新的列
alter table 表名 add
(列名 数据类型) [default 默认值]
[,列名。。。。]
示例:alter table A add age number(2) default 23
2,修改在表中已存在的列,
alter table 表名 modify
(列名 数据类型) [default 默认值]
[,列名。。。]
示例:alter table A modify age varchar2(2)
注意:修改表的列的注意事项
可以增加字符类型的列的宽度
只有当所有列的值都为空或者表中没有数据时,才可以减少列的宽度
只有当所有列的值都为空时,才可以改变某一列的数据类型
如果 变
某一列的默认值,该默认值只能影响以后的操作
只有当某一列没有改变该列的大小的情况下,才可以把char类型的列改变成varchar2类型的列,或者把varchar2类型的列改变成char类型的列
3,从一个表中删除一列,
alter table 表名 drop column 列名
alter table A drop column age
删除表
1,删除表的数据和删除表结构,
drop table 表名
特征:删除表中所有的数据行和表结构,删除表的所有索引,如果没有备份的话,所删除的表无法恢复,它提交所有的挂起的事务,所有基于该表的视图和别名依然保留但已无效。
注意:通过drop删除表时,从oracle 10g 开始,被删除的表放入回收站,这称为闪回删除(flashback drop),这样可以恢复被删除的表,如果你不想将表放入回收站,可以增加一个"purge",
格式:drop table 表名 [cascade constraints]
[purge]
另外:如果两个表有外键(约束)关系,那么删除表的时候,oracle要求删除所有具有cascade constraints
练习:
如何从回收站中恢复删除表
flashback table A to before drop;
查询数据库中所有表
select * form cat;
存在回收站的表信息语句:show recyclebin
恢复被删除的表
只要在drop table 命令中不包含purge,就可以恢复被删除的表,首先介绍一下数据字典视图user_recyclebin
select original_name,object_name from user_recyclebin;
清空回收站:purge recyclebin
截断表
当一个表中数据已经不再需要时,可以使用truncate table 语句将他们全部删除掉(截断),其语法格式如下:
truncate table 表名
truncate table 语句有如下特性:
它删除表中所有的数据,但保留表结构;如果没有备份的话,删除的数据行无法恢复;该语句释放表所占用的磁盘空间。
插入数据操作
当往表中添加一行新的数据时,需要使用DML语言中的insert 语句,其语法格式如下:
insert into 表名 [(列名,列名,,,)] values (数值,数值,,,)
示例:insert into A (id ,name) values (1002,"waqing")
利用子查询向表中插入数据,其格式如下:
create table 表名[(列名,列名,,,)] as 子查询
示例:create table B (id ,name) as select id,name from A
更新数据操作
如果要对数据库中某一行或多行更新数据,可以使用update语句。
update 表名 set 列名=数值[,列名=数值]
[where 条件]
示例:update A set name ="张三",age="23"
删除数据操作
delete from 表名 [where 条件]
示例:delete from 表名 where id=1;
oracle 约束
非空(not null):不为空
唯一(unique):在表中每一行所定义的列,其列值不能相同
主键(primary key):唯一标识表的一行
外键(foreign key):用来维护子表(Child Table)和父表(Parent Table)之间的引用完整性。
条件(check):表中每行都要满足该约束条件
添加主键:
1,create table A (id int,name varchar2(10),constraint pk_a_id primary key(id));
2,create table A (id int primary key,name varchar2(10);
3,为已创建的表添加:alter table A add constraint PK_A_ID primary key(id)
外键约束:
子父关系,外键可以很好的保护两表之间的关系
constraint 外键名 foreign key (列名) references 父表 (列名)
插入有数据的值,外键中的值必须能够在父表中找到
引用完整性约束(外键约束),实现其该约束如下例子:
有如下两张表他们之间的引用完整性
create table student (id number(5) primary key,name varchar2(10)
constraint fk_stu for)eign key(t_id) references team(T-id))
create table team (td varchar2(20) primary key,tname varchar2(20) )
删除外键:
1,drop table A cacasde constraint purge----删除无法恢复
2,alter table A drop constraint fk_id;
rollback---回滚
3,alter table A add constraint fk_player foreign key(game_id) references game_id
非空约束
create table student (id number(5) primary key,name varchar2(20) not null)
另一种方式非空约束实现方式
alter table student modify name not null
check约束
示例:
创建一张文秘表,要求如下:要求女性,年龄在18-35岁之间
create table person(id varchar2(5) primary key ,
name varchar2(20),age number,sex varchar2(2),constarint person_age_ck check (age between 18 and 35),constarint person_sex_ck check (sex ="女"))
如何查看约束
1,利用数据字典user_constraints 可以查询用户模式下的约束信息
查询:desc user_constraints
col owner for a10
2,利用数据字典user_cons_columns可以查看每张表定义的约束是在哪一列上的
col column_name from a10;
col owner for a10;
select owner,constraint_name,table_name,column_name from user_cons_columns;
select 语句
使用算数表达式
+-*/ ---
示例:select sno,sage+20 from student;
select a.sno,sname,score from student a,sc b hwere a.sno ="s001" and a,sno=b.sno
连接运算符
在sql查询语句中可以将两列查询的结果连接在一起,通过"||"实现。
select empno || ename from emp;
where 子句使用
< > = <= >= <> != between...and in like
like:% 代表0个或者多个字符;_代表一个且只能是一个字符
示例:
select * from student where sname like "陈%"
转义(escape)操作符
如果要查询的字符串含有_或%,又该怎么处理,
解决:可以使用转义关键字来完成,
create table dept_temp as seect * from dept.
insert into dept_temp values(88,"IT_REsearch","beijing")
select * from dept_temp where dname like "IT_%" escape "\"
解释:定义"\"为转义符,既在"\"之后的”_“字符已经不是通配符,而是它本来的含义,既下划线。
and or not
order by asc desc