美文网首页
数据库基础(Oracle)

数据库基础(Oracle)

作者: 404er | 来源:发表于2017-09-25 21:04 被阅读0次

    1.ACID特性(事务是恢复和并发的控制的基本单位)

    • Atomic(原子性):一个事务中的所有操作,要么全部完成,要么全部不完成
    • Consistency(一致性):事务执行前后数据库都必须处于一致性状态
    • Isolation(隔离性):数据所处的状态要么是修改前的状态,要么是修改以后的状态
    • Durability(持久性):事务一旦成功结束,更新就必须永久保存下来

    2.SQL语句基础

    1. SQL语句的关键字不区分大小写
    2. 标识符必须以字母开头
    3. 标识符包括字母、数字和三个特殊字符(#_$)

    3.常用数据类型

    1. 字符类型

    • CHAR:一个定长字符串,当位数不足自动用空格填充来达到其最大长度。
    • VARCHAR2:目前这也是VARCHAR 的同义词。这是一个变长字符串,与CHAR 类型不同,它不会用空格填充至最大长度。

    2.数字类型

    • NUMBER:该数据类型能存储精度最多达38位的数字。每个数存储在一个变长字段中,其长度在0~22字节之间。
    • NUMBER( p,s ) p表示精度(总长度),s表示小数位置且四舍五入

    3.日期类型

    • DATE:一个7字节的定宽日期/时间数据类型。其中总包含7个属性,包括:世纪、世纪中哪一年、月份、月中的哪一天、小时、分钟和秒。

    • TIMESTAMP:一个7 字节或12.字节的定宽日期/时间数据类型。它与DATE 数据类型不同,因为TIMESTAMP 可以包含小数秒(fractional second);带小数秒的TIMESTAMP 在小数点右边最多可以保留9位。

    4.二进制及大文本数据

    • BLOB:BLOB包含不需要进行字符集转换的“二进制“数据,如果要存储电子表格、字处理文档、图像文件等就很适合采用

    • CLOB:CLOB包含要进行字符集转换的信息。这种数据类型很适合存储纯文本信息。

    4.SQL(Structured Query Language) 结构化查询语言

    • DQL:数据查询语言 SELECT
    • DML:数据操作语言 INSERT,UPDATE,DELETE
    • TPL:事务处理语言 BEGIN TRANSACTION,COMMIT,ROLLBACK
    • DCL:数据控制语言 GRANT,REVOKE
    • DDL:数据定义语言 CREATE,ALTER,DROP
    • CCL:指针控制语言 DECLARE CURSOR

    1.用户管理

    1. create user 用户名 identified by 密码;

      (oracle 有个毛病,密码必须以字母开头,如果不以字母开头,它不会创建用户)

    2. alter user 用户名 identified by 新密码;

    3. drop user 用户名;

    4. grant connect to 用户名;

    5. grant all on emp to 用户名;

    6. revoke select on emp from 用户名;

    7. 三种标准性角色

      • connect:最终用户
      • resource:开发人员
      • DBA:系统管理员
      • with admin option 权限转授

    2.表

    1. oracle 支持的数据类型
    2. 建表:create table 表名();
    3. 查看表结构:DESC student;
    4. 修改表:
    • 添加一个字段

      ALTER TABLE student add (classId NUMBER(2));

    • 修改一个字段的长度

      ALTER TABLE student modify (sname VARCHAR2(30));

    • 修改字段的类型/或是名字(不能有数据),不建议做

      ALTER TABLE student modify (sname CHAR(30));
      ALTER TABLE student rename column name to sname;

    • 删除一个字段不建议做(删了之后,顺序就变了。加就没问题,因为是加在后面)

      ALTER TABLE student DROP COLUMN sal;

    • 修改表的名字(很少有这种需求)

      RENAME student to stu;

    1. 删除表:DROP TABLE student;
    1. 插入数据:INSERT INTO student VALUES();
    1. 修改数据:UPDATE student SET sex = '女' WHERE xh= 'A001';
    1. 删除数据
      • 表结构还在,数据可以恢复:DELETE FROM student;
      • 表结构还在,数据不可恢复:truncate TABLE student;
      • 删除结构和记录:DROP TABLE student;
      • 删除一条记录:delete from student WHERE xh= 'A001';

    3.函数

    ​ length()、substr(char,m,n) 取字符串的子串,从m位置取n个、concat()、

    ​ nvl()、upper()、lower()、

    ​ trunc() 截取数字、round() 四舍五入、mod(m,n) 取余、

    ​ floor()、ceil()、replace(ename,'A','B')、

    ​ sysdate、add_months(d,n)、last_day(d) 该日期当月的最后一天、

    ​ to_char(date,format)

    4.约束

    • 最好把每个约束都定义名字方便查错
    1. 非空约束和唯一约束

      a、非空约束 NOT NULL:使表的列不能为空
      
        CREATE TABLE temp(tem int not null);
        
      b、唯一约束UNIQUE:约束列值不能重复,但可以为null,系统会自动建立索引。
      
        CREATE TABLE temp(tem int UNIQUE);
      
        ALTER TABLE temp ADD CONSTRAINT con_name UNIQUE(colname);
        
      
    2. 主键

      
      a、建表时定义
      
         CREATE TABLE temp (tem int  
            [CONSTRAINT t_pk] PRIMARY KEY);
      
      b、建表时定义
      
         CREATE TABLE temp (tem int,
              CONSTRAINT con_tem_pk PRIMARY KEY(tem);
      
      c、建表后定义
      
         CREATE TABLE temp(tem int);
         ALTER TABLE temp  ADD CONSTRAINT con_tem_pk PRIMARY KEY(tem);
         
      
    3. 外键

      a、建立表时定义:
      
         CREATE TABLE subTemp(t int [CONSTRAINT s_fk_t] REFERENCES temp(t));
       
      b、建立表时定义:
       
         CREATE TABLE empcon(deptno Number,
               CONSTRAINT empcon_deptno_fk FOREIGN KEY(deptno) REFERENCE deptcon(deptno));
       
      c、定义表后定义
      
         ALTER TABLE empcon 
           ADD CONSTRAINT empcon_deptno_fk FOREIGN KEY(deptno) REFERENCES deptcon(deptno);
           
      
    4. 检查约束

      a、建立表时定义:
      
         CREATE TABLE temp(t int CHECK(t in (1,2,3)));
         
      b、建立表时定义:
      
         CREATE TABLE temp(t int,
           CONSTRAINT t_Ck CHECK(t>10));
         
      c、定义表后定义
      
         ALTER TABLE empcon ADD CONSTRAINT empcon_deptno_ck check t>20;
         
      
    5. 维护约束

      1、a、如果增加not null约束使用:
       
            ALTER TABLE tab MODIFY col [CONSTRAINT c_name] NOT NULL;
           
         b、如果是增加UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK约束:
       
            ALTER TABLE tab ADD [CONSTRAINT c_name] CON_TYPE (column);
       
      2、修改约束名:
         
         -- 约束是ORACLE中的对象,在同一个用户中是不允许相同的。
         修改:ALTER TABLE tab RENAME CONSTRAINT old_cK TO new_ck;
           
      3、删除约束:
           ALTER TABLE tab DROP CONSTRAINT c_name|PRIMARY KEY[CASCADE];
           
      4、禁止约束
      
           ALTER TABLE tab DISABLE CONSTRAINT c_name [CASCADE];
           
      5、激活约束
      
           ALTER TABLE tab ENABLE CONSTRAINT c_name;   
           
      

    5.索引

    1.索引用于加快数据定位的。通过索引,可以大大降低IO次数,提高效率。

    2.索引的自动建立:
    当我们建立主键约束和唯一性约束时,系统会给我们自动建立唯一索引。

    3.索引的分类:

    • 单列索引和复合索引:单列索引就是索引列为一列,复合索引就是索引列为多列。
    • 唯一索引和非唯一索引:唯一索引是指索引列的值不重复。非唯一索引则相反
    a、建立索引:
    
         CREATE INDEX ind_name ON tab(col,col2…);
         
    b、删除索引:
    
         DROP INDEX ind_name;
         
    c、显示索引信息:
    
         select index_name,uniqueness,status
         from user_indexes where table_name=‘EMP’;
         
    

    6.序列

    是用来生成唯一数字的数据库对象。也成为序列生成器。

    a、建立序列:
    
        CREATE SEQUENCE no_id 
            START WITH 100 --开始标号
            INCREMENT BY 1 --增量
            MAXVALUE 999    --最大值
          
    b、使用序列:
    
            insert into tab(tid) values(no_id.nextval);
                -- nextval的值是每调用一次就增加一次
                -- currval的值调用时,还是和自身会话的当前值一样
            
    c、修改序列:
    
            ALTER SEQUENCE s_name [INCREMENT BY n][MAXVLUE n];
            -- 初始化值不能修改
            
    d、删除序列:
    
            DROP SEQUENCE s_name;
            
    

    7.视图

    a、 创建视图
    
         create view 视图名 as select 语句[with read only];
    
    b、创建或修改视图
    
         create or replace view 视图名 as select 语句 [with read only];
    
    c、删除视图
    
         drop view 视图名;
    
    d、查看视图信息
    
         select text from user_views where view_name=‘v_name’;
        
    

    8.同义词:synonym

    create synonym e for emp;

    9.事务

    • 设置保存点:savepoint a;
    • 取消部分事务:rollback to a;
    • 取消全部事务:rollback;
    • 提交事务:commit;
    • 设置只读事务:set transaction read only;

    10.备份还原

    1. 导出表

      exp userid=scott/tiger@myoral tables=(emp,dept) file=d:\e1.dmp

    2. 导入表

      imp userid=scott/tiger@myorcl tables=(emp) file=d:\xx.dmp;

    4.查询

    1.普通查询

    • case when ... then ... end
    • decode
    select decode('苹果','苹果',1,'梨子',2,0) from dual;
    结果为:1
    select decode('梨子','苹果',1,'梨子',2,0) from dual;
    结果为:2
    select decode('橘子','苹果',1,'梨子',2,0) from dual;
    结果为:0
    第一个参数是需要比较的值,第二个,第四个,是匹配值,匹配成功第二个则输出1,匹配成功第四个输出2,都没匹配输出0
    

    2.分组查询

    • group by 用于对查询的结果分组统计;having 子句用于限制分组显示结果
    • select 列表项中不存在的列可以出现在 group by 的列表项中
    • select 列表项中出现的列必须全部出现在 group by 后面。(聚合函数除外)

    3.自连接

    • 自连接是指在同一张表的连接查询

    4.子查询

    • 子查询是指嵌入在其他 sql 语句中的 select 语句,也叫嵌套查询。

    5.分页查询

    • 根据 rowid(不变的) 来分

    • 按分析函数来分

    • 按 rownum (改变的)来分

      startnum=6;

      Endnum=10;

    6.合并查询

    • union 操作符用于取得两个结果集的并集,会自动去掉结果集中重复行
    • union all 操作符与 union 相似,但是它不会取消重复行,而且不会排序
    • intersect 使用该操作符用于取得两个结果集的交集
    • minus 使用改操作符用于取得两个结果集的差集,他只会显示存在第一个集合中,而不存在第二个集合中的数据。

    相关文章

      网友评论

          本文标题:数据库基础(Oracle)

          本文链接:https://www.haomeiwen.com/subject/swadextx.html