1 ... sqlplus 操作
1. 查询一个数据库所有表--》 selec * from tab;
2. 设置页数 set pagesize 30;
3. 设置每行显示的数 set linesize 300;
4. 切换用户 conn 用户名[sys]/密码 [as sysdba/sys];
5. 查看一个表的结构-->desc 表名
6. 输入/ 可以重复刚刚执行的语句
2.... cmd下
1. sqlplus 用户名[sys]/密码 [as sysdba or sysoper];
3.....sql语句操作
1. select job 工作 from emp; 查询工作列
2. select distinct job 工作 from emp; 查询工作列消除重复项
3. select job 工作, sal*12 年薪 from emp; 查询工作列消除重复项
4. select * from emp where ename like '_M%'
5. select * from emp where sal like '%5%' 查询工资包含5 的员工所有信息
oradim -NEW -SID myoracle -STARTMODE m -PFILE D:/app/Administrator/oradata/test.ora
startup -pfile = D:/app/Administrator/oradata/test.ora nomount
4....创建表和管理表
1. 常用数据类型
--------------------|-------------------------
数据类型 | 描述
--------------------|--------------------------------------------
number, | number(n) 表示一个整数,number(m,n) 表示一个小数,小数长度为n,整数长度为m
-------------------|----------------------------------
varchar,varchar2 |
---------------------|-----------------------------------------
date , | 表示日期类型
----------------------|------------------------------------------------
blob, | 二进制数据大对象4G
----------------------|-----------------------------------------
clob | 文本数据4G
----------------------|----------------------------------------
直接创建表
create table 表名
{
字段名称 字段类型 [default 默认值],
字段名称 字段类型 [default 默认值],
字段名称 字段类型 [default 默认值],
}
用查询复制表
create table 表名 as (子查询)
如 create table temp as select * from emp where 1=2;可以复制表结构
删除表的数据
delete 表名
删除表结构和数据
drop table 表名
创建一个person表
create table person
(
pid varchar2(20) primary key,
name varchar2(20),
age number(3),
birthday date,
sex varchar2(2) default '男'
);
向表中增加数据
insert into person(pid,name,age,birthday,sex)
values('111111111111','张三',30,to_date('1976-02-03','yyyy-mm-dd'),'男');
5.....表的结构的语法
1.增加
alter table 表名 add(列名 列的类型 [default] 默认值);
alter table person add(address varchar2(100) default '暂无地址');
2.修改
alter table 表名 modify(列名 列的类型 [default] 默认值);
alter table person modify(name varchar(10) default '无名氏');
3.给表重命名
rename 表名1 to 现有表名
6...... 约束
1. 利用笛卡尔集来求对应关系
create table nation(
name varchar2(20)
);
insert into nation values('中国');
insert into nation values('美国');
insert into nation values('英国');
insert into nation values('荷兰');
insert into nation values('巴西');
select t1.name , t2.name
from nation t1 ,nation t2 where t1.name <> t2.name;
2. 约束分类
. 主键约束
表示是一个唯一的标识,本身不能为空
create table person
(
pid varchar2(20) primary key,
name varchar2(20),
age number(3),
birthday date,
sex varchar2(2) default '男'
);
或者
drop table person ;
create table person
(
pid varchar2(20) ,
name varchar2(20),
age number(3),
birthday date,
sex varchar2(2) default '男',
constraint person_pid_pk primary key(pid)
); // person_pid_pk 代表约束名称
. 唯一约束
一个表中只允许一个主键约束,
而其他列如果不希望出现重复值的话可以使用唯一约束。
drop table person ;
create table person
(
pid varchar2(20) primary key,
name varchar2(20) unique,
age number(3),
birthday date,
sex varchar2(2) default '男'
);
或者
drop table person ;
create table person
(
pid varchar2(20) primary key,
name varchar2(20),
age number(3),
birthday date,
sex varchar2(2) default '男',
constraint person_name_uk unique(pid)
); // person_pid_pk 代表约束名称
. 检查约束
检查一个列的内容是否合法
例如:年龄 只能是0--150
drop table person ;
create table person
(
pid varchar2(20),
name varchar2(20) ,
age number(3) check(age between 0 and 150),
birthday date,
sex varchar2(2) default '男',
constraint person_pid_pk primary key(pid),
constraint person_name_uk unique(name)
); // person_pid_pk 代表约束名称
. 非空约束
例如:姓名字段里面不能为空
drop table person ;
create table person
(
pid varchar2(20) primary key,
name varchar2(20) not null,
age number(3),
birthday date,
sex varchar2(2) default '男'
);
. 外键约束
两张表之间进行外键约束
drop table person2 ;
create table person2
(
pid varchar2(20) primary key,
name varchar2(20) not null,
age number(3),
birthday date,
sex varchar2(2) default '男',
foreign key(pid) references person(pid)
);
如果要删除父表,可以采用级联删除。
drop table person cascade constraint;
drop table person ;
create table person
(
pid varchar2(20) ,
name varchar2(20),
age number(3),
birthday date,
sex varchar2(2) default '男'
);
增加约束
alter table add constraint 约束名称 约束类型 (约束字段)
删除约束
alter table drop constraint 约束名称
rownum 是一个伪列 可以通过它来访问一个表的数据
7...视图
1.创建视图
create view 视图名 as (子查询)
create view empv20 as select empno,ename,job,hiredate
from emp where deptno = 20;
创建一个视图
如果提示没有权限 可以conn system/密码 连接登陆
然后 grant create any view to scott;
要撤销 revoke create any view from scott;
create or replace view 视图名 as (子查询)
create view empv20 as select empno,ename,job,hiredate
from emp where deptno = 20;
如果存在视图就删除再创建该视图
****利用视图可以建立复杂的查询
2.更新视图
视图中间没有真实数据,更新视图不能更新创建条件
视图的本质作用是为了查询 所以为了避免更新视图
在创建的时候可以加一条语句
create or replace view empv20 as select empno,ename,job,hiredate
from emp where deptno = 20 with read only;
8......序列
在许多数据库中有自动增长列 ,但是oracle中没有。
所以要手工完成自动增长操作。
create sequence 序列名
(
[increment by n] [start with n],
);
两个操作
nextVal
currVal
create table testseq
(
next number,
curr number
);
将一个序列加入到一个表中
insert into testseq(next ,curr) values(myse.nextVal,myse.currval);
create sequence myse increment by 2 start with 1;
create sequence myse1
maxvalue 10
start with 1
increment by 1
cycle
cache 2;
删除序列
drop sequence 序列名
9....同义词
1.select sysdate from dual;
查询系统时间
dual 是一张续表 在sys下的一个表(sys.dual)
scott可以查看此表是因为同义词的关系
创建一个同义词
create synonym 同义词名 for 用户名.表名 -->> 同义词名=用户名.表名
删除同义词
drop synonym 同义词名
10......用户管理
在oracle中队用户进行建立及其授权的操作
1.创建用户
create user 用户名 identified by 密码;
如 create user test identified by test123;
2. 为用户授权
grant 权限1,权限2 to 用户名
如grant create session to test; 可以让其登陆而已
如果现在加上要想把多个权限一次性赋予一个用户,则可以
将这些权限定义成一个角色
如
grant connect ,resource to 用户名。
connect,resource 都是角色。
3. 删除用户
drop user 用户名
4.修改用户密码
在sys下
alter user 用户名 identified by 新密码。
5. 让密码失效
alter user 用户名 password expire;
为了让其更新密码
6. 锁住用户
alter user 用户名 account lock;
7. 解除锁定用户
alter user 用户名 account unlock;
8. 授权访问某一张表
grant select,delete on scott.emp to 用户名
9. 回收权限
revoke select,delete on scott.emp from 用户名
11 ......数据库的备份与恢复
. 数据库备份 exp
.数据库恢复 imp
在cmd下 直接用exp命令
会提示一些信息
直接回车下去
12......嵌套表
一个部门有多个项目
创建一个项目类别
create type project_ty as object(
proid number(4),
pname varchar(20)
);
/
**注意 / 不可少
// 用一个别名
create type project_nt as table of project_ty;
/
//创建部门表 嵌套项目类别表
create table department
(
deptno number(2) primary key ,
dname varchar(50),
projects project_nt
)nested table projects store as project_nt_tab_temp;
//存入数据
insert into department(deptno,dname,projects)
values(1,'技术部',project_nt(
project_ty('1','论文管理系统'),
project_ty('2','员工管理系统'),
project_ty('3','薪资管理系统')
)
);
12........数据库设计范式
11:39 2011-6-5