语法:
create tablespace 表空间的名称
datafile '文件的路径'
size 大小
autoextends on 自动扩展
next 每次扩展的大小
例子: create tablespace crm
datafile 'c:\crm.dbf'
size 100m
autoextends on
next 10m;
删除命名空间:drop tablespace crm; 注意这里的删除只是逻辑上的删除,并不会把服务器上的文件删除掉。
创建用户:create user 用户名
identified by 密码
default tablespace 表空间的名称
例子
create user zhaohong identified by zhaohong default tablespace crm;
授权:
grant dba to 某个用户; dba 是权限最大的
列的类型:varchar:在Oracle中目前还是支持的,但是不保证以后还支持。最好使用varchar2(长度)可变长度字符
char(长度):固定长度字符 。比方说 char(10) 存入一个hello,仍然占十个字符,因为剩下的用空格站位。
number(总长度):数字类型
date:日期类型,年月日时分秒
timestamp: 时间戳,比date束更加精确
LONG :可以用来存一本书
CLOB:可以用来存一部电影
创建表:create table 表名(
列名 列的类型 {列的约束});
使用子查询的方式创建表:create table 表名 as 查询语句;这种方式相当于是克隆表,但是这种复制表的方式,只能复制表结构,表数据,但是不会复制表约束。如果查询语句有结果,就将结果一起复制过来,如果查询没有结果,就只复制表结构过来。
修改表:添加列 ,添加列,我么你应该清楚地知道这是要修改表结构的,所以用的是alter
添加一列:alter table stu add phone varcher2(11);
添加多列:alter table stu add (mobile varchar2(11),sex varchar2(2) );
修改列:
alter table stu modify sex varchar(4);
删除列:
delete table stu drop column gender;
修改列名:
alter table stu rename column sex to gender;
重命名表:
rename 表名1 to 表名2;
删除表:
drop table 表名;
回顾一下sql分类:DDL数据定义语言,修改的是结构alter,create,drop,
DML:数据操作语言,操作表中数据。insert,update,delete
DCL:数据控制语言,
DQL:查询语言,select
列的约束:主键约束:primary key 不能为空,必须为一
非空约束:not null
唯一约束:unique
检查约束:check (gender in ('男','女','双性'))gender是属性字段,这个字段所填的数据必须在in后边括号里边有。
create table student (
stuid number primary key,
sname varchar2(20)unique,
age varchar2(20)not null,
gender varchar(4)check (gender in ('男','女','双性'))
);
外键约束:在a表中插入的某个字段的数据,必须在另外一张表b中存在,这就是外键约束。
alter table 表1 add foreign key(表1的一个属性字段) references 表2(表2中的属性字段);
我们通常将表1称作是从表,表2称作是主表。想要删除表2,是不行的,因为表2中的数据有被关联成外键,所以无法删除。
我们可以强制删除表2,drop table 表2 cascate constraint; 这样就强行删除了,这是先删除关联表的外键,再将自己的表删除。
级联删除:
添加外键约束,使用级联删除,alter table 表1 add foreign key (表1的属性字段) references 表2(表2中的字段) on delete cascade; 级联删除,在删除主表的时候,会想将从表中的和主表有关联的数据全删掉。然后再删除主表。
插入数据:insert into 表名 values(所有列的值都要对对应写上);
insert into 表名 (列1,列2) values (值1,值2);
使用子查询插入数据: insert into 表1 查询语句; 将查询到的结果插入到表1中。
更新表数据:update 表名 set 列名 =列的值 [ where 条件];
删除数据:delete from 表名 [where 条件];
要注意一下delete和truncate的区别:delete 是逐条删除数据,支持事务操作;truncate是先删除表,再重新创建表,不支持事务操作,通常情况下,效率比较高一点。
事务:事务就是一系列的操作,要么都成功,要么都失败。事务四大特性:原子性,隔离性,持久性,一致性。如果不考虑隔离级别,会产生脏读,虚读,不可重复读的问题。
mysql的隔离级别:READ UNCOMMITTED,可以解决的是脏读的问题。还有 READ COMMITTED ,REPEATABLE READ,SERIALIAZABLE
Oracle里边的隔离级别:READ COMMITTED ,SERIALIAZABLE,READ ONLY , 默认的隔离级别是READ COMMITTED
事务提交:commit
事务的保存点/回滚点:savepoint +保存点的名称 ,在执行过程中发生错误时回到的点。
事务回滚:rollback
最后得到的结果是向表中插入五条数据。
视图的概念(面试):视图是对查询结果的一个封装,视图中的所有数据都是来源于原表的。 能够封装复杂的查询结果,能够屏蔽掉表中的细节。
注意:视图可以修改数据,但是通常不要通过视图去修改数据。我们通常常创建视图的时候加上 with read only
语法: create {or replace} view 视图的名称 as 查询语句 { with read only } 中括号里边的代表是可选的参数。
只读视图:
视图的作用就是将复杂的查询语句给封装起来,结果f封装成一个视图。再去查询的时候就不再用复杂的语句了,直接查看视图就可以。视图就是将一些列的数据给藏起来。
我们还可以为视图起个别的名字。
create synonym dept for view_test2;
序列:
序列通常的用法都是 create sequence seq_test2; 其他属一般都是默认的。即默认从1开始增长,每次增长一1,默认不循环 ,默认没有最大最小值。
索引:索引相当于是一本书的目录,能够提高查询速度。但是并不是所有的都需要索引,如果某一列经常用来做查询条件,那就有必要用来创建索引,并且是在该列数据量比较大的时候才去创建索引。
语法: create index 索引的名字 on 表名(列)
注意: 主键约束自带主键索引,唯一约束自带唯一索引,
在做sql优化的时候,我们就可以考虑去建立索引,并且综合索引的优化程度大于单行索引的程度。在做sql优化的时候统称考虑的是cup调用的次数和影响的行数这两个指标。
索引的底层原理是平衡二叉树,在建立了索引以后,查询速度自然变快,但是,再做插入和删除就会减速了。并且在重新插入了大量的数据以后就涉及到重构平衡树的问题,就是重新建立索引。