再学·Oracle-数据库-03

 创建表空间:

    语法:

    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调用的次数和影响的行数这两个指标。

索引的底层原理是平衡二叉树,在建立了索引以后,查询速度自然变快,但是,再做插入和删除就会减速了。并且在重新插入了大量的数据以后就涉及到重构平衡树的问题,就是重新建立索引。

猜你喜欢

转载自blog.csdn.net/star1210644725/article/details/83050644