zoukankan      html  css  js  c++  java
  • Oracle | DDL&约束&DCL&TCL

    • DDL(Data Definition Language,数据定义语言),用于创建/修改/删除数据库的各种对象,如表、视图、索引、同义词、序列等。DDL语句主要包括 CREATE 创建、ALTER 修改、TRUNCATE 截断 、DROP 删除。
    • 约束CONSTRAINT,用于限制表的数据的类型,主要包括非空约束 NOT NULL、唯一约束 UNIQUE、主键约束 PRIMARY KEY、检查约束 CHECK、外键约束 FOREIGN KEY
    • DCL(Data Control Language,数据控制语言),用于授予/回收访问数据库的权限。DCL 语句即GRANT 授予、REVOKE 回收。
    • TCL(Transaction Control Language,事务控制语言),用于事务的提交/回滚。TCL语句包括 COMMIT 提交、ROLLBACK 回滚,SAVEPOINT 保存点。

    Oracle数据库

    解锁账户

    alter user <账户名> account unlock;
    

    Oracle 数据类型

    • NUMBER:整数
    • DATE:日期
    • CLOB:大文本数据,可存4G文本数据
    • BLOB:二进制数据,可存图片、音频、视频、文字,最大4G。
    • VARCHAR:固定长度字符串,标准sql数据类型
    • VARCHAR2:可变长度字符串,oracle特有。
      • 字符串:'abc'
      • 字符串连接符:||

    数据伪列

    • ROWID:数据库中每一行都有一个行地址,rowid伪列返回该行地址。rowId值可以唯一标识数据库中的一行。
    • ROWNUM:返回一个数值代表行的次序。通过使用rownum,用户可以限制查询返回的行数。

    DDL

    数据定义语言DDL,主要用于创建/修改/删除数据库的各种对象,如表、视图、索引、同义词、序列等。DDL语句主要包括 CREATE 创建、ALTER 修改、DROP 删除。

    表:TABLE

    创建表

    CREATE TABLE <表名>(
        <列名> <数据类型> [<DEFAULT 默认值>] [<约束>],
        <列名> <数据类型> [<DEFAULT 默认值>] [<约束>],
        ...
        [CONSTRAINT <约束名> <约束类型>(约束列)]
    )
    

    修改表

    修改表中列

    1.增加列:

    ALTER TABLE <表名> ADD (
        <列名> <数据类型> [<DEFAULT 默认值>] [<列级约束>],
        <列名> <数据类型> [<DEFAULT 默认值>] [<列级约束>],
        ...
    )
    

    2.修改列:

    ALTER TABLE <表名> MODIFY (
        <列名> <数据类型> [<DEFAULT 默认值>] [<列级约束>],
        <列名> <数据类型> [<DEFAULT 默认值>] [<列级约束>],
        ...
    )
    

    3.删除列:

    ALTER TABLE <表名> DROP COLUMN <列名>
    

    4.重命名列:

    ALTER TABLE <表名> RENAME <旧名> TO <新名>
    

    修改表中属性:

    1.添加约束:

    ALTER TABLE <表名> ADD CONSTRAINT <约束名> <约束类型>(约束列);
    

    2.删除约束:

    ALTER TABLE <表名> DROP CONSTRAINT <约束名>;
    

    截断表

    TRUNCATE TABLE <表名>
    

    删除表

    1.删除表:

    DROP TABLE <表名>
    

    2.截断表:

    复制表

    1.复制表的结构与数据:

    CREATE TABLE <表名> AS 
    	SELECT <目标列表达式>
    	FROM <表>
    	WHERE <查询条件>
    

    2.仅复制表的结构:WHERE 1 = 2

    CREATE TABLE <表名> AS 
    	SELECT <目标列表达式>
    	FROM <表>
    	WHERE 1 = 2;
    

    重命名

    RENAME <旧名称> TO <新名称>
    

    视图:VIEW

    视图 (VIEW):虚拟表,不占物理空间。

    创建视图

    CREATE [OR REPLACE] [FORCE] VIEW <视图名>
    [(列名1, 列2,...)]
    AS 
    SELECT...
    [WITH CHECK OPTION]
    [WITH READ ONLY];
    

    FORCE:强制创建视图
    WITH CHECK OPTION:检查约束视图
    WITH READ ONLY:只读视图

    删除视图

    DROP VIEW <视图名>
    

    索引:INDEX

    索引:加快查询速度

    创建索引

    CREATE [UNIQUE] INDEX <索引名>
    ON <表名> (<列名> [ASC | DESC], ... )
    [INITRANS n]
    [MAXTRANS n]
    [PCTFREE n]
    [TABLESPACE <表空间名>]
    [STORAGE storage]
    [NOSORT]
    

    UNIQUE:唯一索引
    INITRANS:初始事务入口数
    MAXTRANS:最大事务入口数
    PCTFREE:索引数据块空闲空间的百分比
    NOSORT:不排序

    修改索引

    重建索引

    ALTER INDEX <索引名> REBUILD;
    

    合并索引

    ALTER INDEX <索引名> COALESCE;
    

    删除索引

    DROP INDEX <索引名>
    

    同义词:SYNONYM

    同义词:数据库对象的一个别名,操作权限不变,简化对象访问。

    创建同义词

    CREATE [PUBLIC] SYNONYM <表名同义词>
    FOR <用户>.<表名>
    

    删除同义词

    DROP [PUBLIC] SYNONYM <同义词>
    

    序列:SEQUENCE

    序列 (SEQUENCE): 序列号生成器,为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。不占用磁盘空间,占用内存。

    其主要用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值。

    创建序列

    CREATE SEQUENCE <序列名>
    [INCREMENT BY n]
    [START WITH n]
    [MAXVALUE n | NOMAXVALUE]
    [MINVALUE n | NOMINVALUE]
    [CYCLE | NOCYCLE]
    [CACHE n | NOCACHE];
    

    INCREMENT BY:定义步长
    START WITH:定义序列初始值
    MAXVALUE / MINVALUE:定义序列最大值/最小值
    NOMAXVALUE:默认最值
    CYCLE / NOCYCLE:表示序列达到限定值后是否循环
    CACHE n:对序列进行内存缓冲,提前生成n个序号存入缓存,默认n=20
    NOCACHE:不对序列进行内存缓冲

    序列的两个伪列

    • NEXTVAL:序列中的下一个有效值
    • CURRVAL:序列当前值

    修改序列

    ALTER SEQUENCE [<用户>.]<序列名>
    [INCREMENT BY n]
    [START WITH n]
    [MAXVALUE n | NOMAXVALUE]
    [MINVALUE n | NOMINVALUE]
    [CYCLE | NOCYCLE]
    [CACHE n | NOCACHE];
    

    删除序列

    DROP SEQUENCE <序列名>
    

    约束-CONSTRAINT

    约束CONSTRAINT,用于限制表的数据的类型。

    CONSTRAINT <约束名> <约束类型>(约束列)
    

    非空约束:NOT NULL

    非空约束:NOT NULL

    <列名> <数据类型> NOT NULL
    

    唯一约束:UNIQUE

    唯一约束:UNIQUE

    <列名> <数据类型> UNIQUE
    
    CONSTRAINT uk_cloumn UNIQUE(<列名>);
    

    主键约束:PRIMARY KEY

    主键约束:PRIMARY KEY,非空+唯一

    CONSTRAINT pk_cloumn PRIMARY KEY(<列名>);
    

    联合主键:

    CONSTRAINT pk_cloumn PRIMARY KEY(<列名1>,<列名2>,...);
    

    检查约束:CHECK

    CONSTRAINT ck_cloumn CHECK(<列名> IN (值1,值2...))
    
    CONSTRAINT ck_cloumn CHECK(<列名> BETWEEN 值1 AND 值2)
    

    外键约束:FOREIGN KEY

    CONSTRAINT fk_cloumn FOREIGN KEY (<列名1>,<列名2>...) REFERENCES <表名>(<列名1>,<列名2>...) ON DELETE <CASCADE|SET NULL> 
    

    数据库安全-DCL

    数据控制语言DCL,用于授予/回收用户/角色访问数据库的权限,DCL语句即 GRANT 授予、REVOKE 回收。

    授予权限:GRANT

    GRANT <权限>
    ON <对象类型> <对象名>
    TO <用户>
    [WITH GRANT OPTION]
    

    WITH GRANT OPTION:可传播权限,即将该权限再授予其他用户。

    收回权限:REVOKE

    REVOKE <权限>
    ON <对象类型> <对象名>
    FROM <用户> [CASCADE|RESTRICT]
    

    CASCADE:级联
    RESTRICT:限定

    角色:ROLE

    角色(ROLE):一组数据库操作权限的集合。

    1.创建角色

    CREATE ROLE <角色名>
    

    2.为角色授权

    GRANT <权限>
    ON <对象类型> <对象名>
    TO <角色>
    

    3.将角色授权给其他角色或用户

    GRANT <角色1>
    ON <对象类型> <对象名>
    TO <角色2>,<用户>
    

    事务-TCL

    事务:用于保证数据完整性。由一组DML语句组成,这组DML语句要么全部成功,要么全部失败。

    事务特性:ACID

    • 原子性(atomicity):一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
    • 一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
    • 隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
    • 持久性(durability):指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

    事务锁

    事务并发不一致性导致的问题:

    • 幻读:事务T1读取一条指定where条件的语句,返回结果集。此时事务T2插入一行新记录并commit,恰好满足T1的where条件。然后T1使用相同的条件再次查询,结果集中可以看到T2插入的记录,这条新纪录就是幻想。
    • 不可重复读取:事务T1读取一行记录,紧接着事务T2修改了T1刚刚读取的记录并commit,然后T1再次查询,发现与第一次读取的记录不同,这称为不可重复读。
    • 脏读:事务T1更新了一行记录,还未提交所做的修改,这个T2读取了更新后的数据,然后T1执行回滚操作,取消刚才的修改,所以T2所读取的行就无效,也就是脏数据。

    --于是引入事务锁,以保证数据的完整性。

    四种隔离级别

    • 串行化
    • 可重复读
    • 读已提交
    • 读未提交

    事务处理-TCL

    事务控制语言TCL,用于事务的提交/回滚。TCL语句即 COMMIT 提交、ROLLBACK 回滚,SAVEPOINT 保存点。

    提交:COMMIT

    事务提交 COMMIT:将事务中对数据库的修改进行永久保存。

    • 显式提交:需要主动提交SQL语句对于数据库的修改,未提交之前可以rollback。如DML操作。
    • 隐式提交:SQL语句执行结束自动提交,无法rollback。如DDL,DCL。

    回滚:ROLLBACK

    回滚 ROLLBACK:取消事务中对数据库进行的修改。

    保存点:SAVEPOINT

    savepoint <savepoint_name> 
    

    回滚至保存点

    rollback to savepoint <savepoint_name>
    

    数据库设计范式

    实际设计原则:根据业务尽可能的减少多表查询,不必完全遵循设计范式。

    第一范式:确保表中每个字段都不可拆分。

    第二范式:消除了部分函数依赖;确保表中每列都与主键相关(主要针对联合主键)。

    第三范式:消除了传递函数依赖;确保每列与主键直接相关,而不是间接相关。

  • 相关阅读:
    AmazonS3 替换HDFS 方案
    SQL Server 内存管理
    SQL Server I/O 问题的诊断分析
    共享内存 设计原理-shm
    机器学习经典算法笔记-Support Vector Machine SVM
    ACGAN 论文笔记
    CGAN 论文笔记
    《Image Generation with PixelCNN Decoders》论文笔记
    《Iterative-GAN》的算法伪代码整理
    《Deep Learning Face Attributes in the Wild》论文笔记
  • 原文地址:https://www.cnblogs.com/liziczh/p/9353049.html
Copyright © 2011-2022 走看看