Oracle

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

你可能感兴趣的:(Oracle)