--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;
待续……