您的位置:首页 > 数据库 > Oracle

DDL、DML、视图、序列、索引、导入导出、pl/sql简述(Oracle之一)

2017-05-05 13:54 633 查看

--DDl(管理表:创建、修改、删除    约束)

--新建项目:新建用户,在新建用户之前,先建一个表空间

 

--创建表空间

create tablespace 名称

datafile '数据文件路径/test.dbf'  --如果不存在,就新建一个

size 100M     --指定初始数据文件的大小

autoextend on --开启自动增长

next 10M      --每次增长大小

 

create tablespace test01

datafile 'c:\test01.dbf'

size 100M

autoextend on

next 10M

 

--删除表空间

drop tablespace test01; --只删除表空间,不删除数据文件

drop tablespace test01 including contents and datafiles; --删除表空间并删除数据文件

 

--新建用户

create user 用户名

identified by 密码

default tablespace 表空间

 

create user testuser

identified by testuser

default tablespace test01

 

--授权

grant dba to testuser --给用户授DBA权限

 

--======字段类型

--字符类型

      char()     --固定长度字符类型,以空格补齐 name char(10)

      varchar2() --不固定长度字符类型           name varchar2(10)

      long       --大容量字符类型               2G

--数字类型

      number 数字

      整数:number(3)   --最大值999

      小数:number(3,2) --最大值9.99

--日期类型

      date:精确到秒

 

--============创建表

create table 表名(

       字段名 字段类型(长度) 约束

       ...

)

 

create table person(

       id number(10) primary key,

       name varchar2(20),

       sex number(1)  --标识位  1:男  0:女

)

 

--修改表

--添加字段address

alter table person add (address varchar2(10));

--修改字段类型

alter table person modify address varchar2(100);

--删除字段

alter table person drop column address;

 

--删除表

drop table person;

 

--约束

--主键、唯一、非空

create table person(

       id number(10) primary key,

       name varchar2(20) unique, --唯一约束

       sex number(1) not null --标识位 1:男  0:女

)

--自定义约束名

create table person(

       id number(10),

       name varchar2(20),

       sex number(1) not null, --标识位 1:男  0:女

       constraint pk_person primary key (id),

       constraint uq_person_name unique (name)

)

 

--检查

create table person(

       id number(10),

       name varchar2(20),

       sex number(1) check (sex in (1,0)),--检查约束 1:男  0:女

       constraint pk_person primary key (id),

       constraint uq_person_name unique (name)

)

 

--外键约束 防止脏数据产生

create table classes(

       id number(10) primary key,

       name varchar2(20)

)

create table students(

       id number(10) primary key,

       name varchar2(20),

       class_id number(10), --外键

       constraint fk_students_class foreign key (class_id) references classes(id)

)

 

--在有外键的情况下,强制删除表

drop table classes cascade constraint

--创建可级联删除的外键

create table students(

       id number(10) primary key,

       name varchar2(20),

       class_id number(10), --外键

       constraint fk_students_class foreign key (class_id) references classes(id) on delete cascade

)

 

--============DML(管理数据:insert update delete 事务)

--insert

--update

--delete

 

--删除表数据

delete from person    --一条一条删除

truncate table person --摧毁整个表结构,再新建表  效率高

 

--事务

未提交的数据,可以回滚

已提交的数据,不能回滚

commit   --提交

rollback --回滚

 

--事务的保存点 savepoint

insert into person (id,name,sex) values(1,'张三',1);

savepoint a;

insert into person (id,name,sex) values(2,'李四',1);

rollback to a;

 

--事务的隔离级别

oracle支持:read commit(默认),serializable,read only

 

--视图、序列、索引、同义词

--视图 特性:视图的数据来源于原始数据

1、封装复杂的sql

2、屏蔽敏感数据,某些不想直接被看到的列

3、只读视图 不能修改源数据

 

--创建语法:create [or replace] view 视图名称 as 查询语句;

create or replace view view_test as select * from person;

--使用视图

select * from view_test;

--创建只读视图

create or replace view view_test as select name from person with read only;

 

--序列实现自增列

简短语法:

create sequence 序列名称;

create sequence seq_test;

seq_test.currval:取当前值

seq_test.nextval:取出下一个值,并作为当前值

--实现自增列

select seq_test.nextval from dual;

select seq_test.currval from dual;

insert into person(id,name,sex) values(seq_test.nextval,'赵六',1);

 

--删除序列

drop sequence seq_test;

 

--创建序列完整语法

create sequence seq_test --创建序列

increment by 2 --每次增加量(默认1)

start with 3 --从几开始(默认1)

maxvalue 10 --最大

minvalue 2 --最小

cycle --循环 cycle/nocycle

cache 2 --缓存 每次增加出几个数字 nocache/cache N

select seq_test.nextval from dual;

 

--索引

1、经常使用的列中

2、这个列重复的数据不能多

3、索引是占资源的

4、创建索引的咧,该是不经常修改的列

语法:create index 索引名称 on 表名(列名1,列名2)

create index index_test on person(name)

 

--同义词

语法:create synonym 同义词名称 for 表名;

create synonym sn_test for person;

select * from sn_test;

 

--数据的导入导出(都是运行在服务器的sql)

--整库

  --导出

  exp 用户名/密码 file=输出路径\文件名.dmp full=y

  exp testuser/testuser file=c:\test01.dmp full=y

  --导入

  imp 用户名/密码 file=输出路径\文件名.dmp full=y

  

--按用户/项目

 --导出

  exp 用户名/密码 owner=用户名 file= 输出路径\文件名.dmp

  exp testuser/testuser owner=testuser file=c:\test01.dmp

  --导入

  imp 用户名/密码 file= 输出路径\文件名.dmp fromuser= 用户名

  imp testuser/testuser file=c:\test01.dmp fromuser=testuser

  

--按表导出或导入

--导出

  exp 用户名/密码 file= 输出路径\文件名.dmp tables=表名1,表名2...

  --导入

  imp 用户名/密码 file= 输出路径\文件名.dmp tables= 表名1,表名2...

 

 

--pl/sql编程

语法:

declare

  声明部分

begin

  程序体

[exception]

  处理异常的代码

end;

 

--HelloWorld

declare

 i varchar2(20);

begin

  i:='HelloWorld';

  dbms_output.put_line(i);

end;

 

--打印员工7369的姓名

declare

  pname varchar2(20); --普通变量,指定类型

  pnam scott.emp.ename%type; --引用型变量,不知道变量类型时使用

  pemp scott.emp%rowtype; --记录型变量

begin

  select ename into pname from scott.emp where empno=7369;

  select ename into pnam from scott.emp where empno=7369;

  select * into pemp from scott.emp where empno=7369;

  dbms_output.put_line(pname||'-'||pnam||'-'||pemp.job);

end;

 

--if 分支结构

1、

if 条件 then 处理

end if;

2、

if 条件 then 处理

else 处理

end if;

3、

if 条件1 then 处理1

elsif 条件2 then 处理2

else 处理3

end if;

--判断人的不同年龄段18岁以下是未成年人,18岁以上60以下是成年人,60以上是老年人

declare

    pnum number:=# --控制台输入,固定写法

begin

  if pnum<0 then

    dbms_output.put_line('未出生!');

  elsif pnum>=0 and pnum<18 then

    dbms_output.put_line('我是未成年人!');

  elsif pnum>=18 and pnum<60 then

    dbms_output.put_line('我是成年人!');

  else

    dbms_output.put_line('我是老年人!');

  end if;

end;

 

--循环

语法:

1、

while 条件

loop

  语句

end loop;

2、

loop

  语句

exit[when 条件];

end loop;

3、

for i in 1..10 --i默认是声明的变量

loop

  语句

end loop;

 

--用while循环输出1~10

declare

    i number;

begin

  i:=1;

  while i<=10

  loop

    dbms_output.put_line(i);

    i:=i+1;

  end loop;

end;

 

--用loop循环输出1~10

declare

  i number;

begin

  i:=1;

  loop

    dbms_output.put_line(i);

    i:=i+1;

  exit when i>10;

  end loop;

end;

 

--用for循环输出1~10

begin

  for i in 1..20

  loop

    dbms_output.put_line(i);

  end loop;

end;

 

 

 

 

 

 

待续……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐