数据库基础(Oracle)

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))