• Oracle 学习笔记(二)


    ​ 

    使用 profile 管理用户口令

    概述:profile 是口令限制,资源限制的命令集合,当建立数据库的,oracle会自动建立名称为 default 的 profile 。当建立用户没有指定 profile 选项,那么 oracle 就会将 default 分配给用户。

    1.账户锁定 

    概述:指定该用户登陆时最多可以输入密码的次数,也可以指定用户锁定的时间,一般用 dba 的身份去执行该命令。

    例子:指定 scott 这个用户最多只能尝试 3 次登陆,锁定时间为 1 天,看下是怎么实现的。

    创建 profile 文件 

    SQL> create profile lock_account limit failed_login_attempts 3 password_lock_time 1; 

    SQL> alter user scott profile lock_account; 

    2.给用户解锁 

    SQL> alter user tea account unlock; 

    3.终止口令 

    为了让用户定期修改密码,可以使用终止口令的指令来完成,这个命令也需要 dba 的身份来操作。

    例子:给前面创建的用户 bobi 创建一个 profile 文件,要求该用户每隔 15 天要修改自己的登陆密码,宽限期为 3 天。看下怎么实现。

    SQL> create profile myprofile limit password_life_time 15 password_grace_time 3; 

    SQL> alter user bobi profile myprofile; 

    口令历史 

    概述:如果希望用户在修改密码时,不能使用以前使用过的密码,可使用口令历史,这样 oracle 就会将口令修改的信息存放到数据字典中,这样当用户修改密码时,oracle 就会对新旧密码进行比较,当发现新旧密码一样时,就提示用户重新输入密码。

    例子:

    1)建立profile 

    SQL>create profile password_history limit password_life_time 10 password_grace_time 2 password_reuse_time 10; 

    password_reuse_time //指定口令可重用时间,即10天后可以重用了。

    2)分配给某个用户 

    SQL> alter user bobi profile password_history ; 

    删除 profile 

    概述:当不需要某个profile文件时,可以删除该文件。

    SQL> drop profile password_history 【casade】 

    注意:文件删除后,用这个文件约束的所有用户都被释放了。

    加了casade,会把级联的相关东西也都给删除掉。

    Oracle 表的管理

    表名和列的命名规则 

    • 必须以字母开头 

    • 长度不能超过 30 个字符 

    • 不能使用 oracle 的保留字 

    • 只能使用字符:A-Z,a-z,0-9,$ , # 等。

    oracle 支持的数据类型

    char   定长 最大2000个字符。

    例子:char(10)  ‘Stephen’前面 7 个字符放‘Stephen’,后面补 3 个空格,’Stephen   ‘。

    varchar2(20)  变长  最大4000个字符。

    例子:varchar2(10) ‘Stephen’ oracle 分配 7 个字符,节省空间。

    clob(character large object) 字符型大对象 最大4G 

    char 查询的速度极快但浪费空间,查询比较多的数据时用;

    varchar 节省空间 。

    数字型

    number 范围 -10 的 38 次方 到 10 的 38 次方 。

    可以表示整数,也可以表示小数 

    number(5,2)  表示一位小数有 5位有效数,2 位小数 范围:-999.99 到 999.99

    number(5) 表示一个 5 位整数 范围 99999 到 -99999 

    日期类型 

    date 包含年月日和时分秒   oracle 默认格式  1-1月-1999 

    timestamp 这是 oracle9i 对 date 数据类型的扩展。可以精确到毫秒。

    图片

    blob 二进制数据 可以存放图片、声音,  4G,   一般在真实项目中是不会把图片和声音真的往数据库里存放,一般存放图片、视频的路径,如果安全需要比较高则存入数据库。

    创建表 

    -- 学生表 

    CREATE TABLE student (    ---表名 

              xh       number(4),   --学号 

              xm    varchar2(20),   --姓名 

              sex      char(2),     --性别 

              birthday date,         --出生日期 

              sal      number(7,2)   --奖学金 

    );

    --班级表 

    CREATE TABLE class( 

        classId NUMBER(2), 

        cName VARCHAR2(40) 

    ); 

    修改表 

    添加一个字段

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

    修改一个字段的长度 

    SQL>ALTER TABLE student MODIFY (xm VARCHAR2(30)); 

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

    SQL>ALTER TABLE student MODIFY (xm CHAR(30)); 

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

    SQL>ALTER TABLE student DROP COLUMN sal; 

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

    SQL>RENAME student TO stu; 

    删除表

    SQL>DROP TABLE student; 

    添加数据 

    所有字段都插入数据

    INSERT INTO student VALUES ('A001', 'Stephen', '男', '19-5月-88', 5000); 

    oracle 中默认的日期格式‘dd-mon-yy’ 

    dd 日(天) 

    mon 月  

    yy  2位的年  

    '18-4月-19' 2019年4月18日 

    修改日期的默认格式(临时修改,数据库重启后仍为默认;如要修改需要修改注册表)

    ALTER SESSION SET NLS_DATE_FORMAT ='yyyy-mm-dd'; 

    修改后,可以用我们熟悉的格式添加日期类型:

    INSERT INTO student VALUES ('A002', 'Bobi', '男', '1985-05-06', 8000); 

    插入部分字段

    INSERT INTO student(xh, xm, sex) VALUES ('A003', 'Lucy, '女'); 

    插入空值

    INSERT INTO student(xh, xm, sex, birthday) VALUES ('A004', 'Lily', '女', null); 

    问题:如果要查询 student 表里 birthday 为 null 的记录怎么写 sql ?

    错误写法:select * from student where birthday = null;

    正确写法:select * from student where birthday is null;

    如果要查询 birthday 不为 null ,则应该这样写:

    select * from student where birthday is not null; 

    修改数据 

    修改一个字段

    UPDATE student SET sex = '女' WHERE xh = 'A001'; 

    修改多个字段

    UPDATE student SET sex = '男', birthday = '1991-01-01' WHERE xh = 'A001'; 

    查询含有 null 值的数据 

    不用 = null 而用 is null;

    SELECT * FROM student WHERE birthday IS null; 

    删除数据

    DELETE FROM student; 

    删除所有记录,表结构还在,写日志,可以恢复的,速度慢。

    Delete 的数据可以恢复。

    savepoint a; --创建保存点 

    DELETE FROM student; 

    rollback to a;  --恢复到保存点 

    一个有经验的DBA,在确保完成无误的情况下要定期创建还原点。

    删除表的结构和数据

    DROP TABLE student; 

    删除一条记录

    delete from student WHERE xh = 'A001'; 

    删除表中的所有记录,表结构还在,不写日志,无法找回删除的记录,速度快:

    truncate TABLE student; 

    今天笔记做到这,后续有空继续。

    【微信公众号:Stephen】一个毕业三年后自学 Java 入行的程序员。
  • 相关阅读:
    [WCF安全系列]从两种安全模式谈起
    为自定义配置的编辑提供”智能感知”的支持
    在Entity Framework中使用存储过程(二):具有继承关系实体的存储过程如何定义?
    [WCF安全系列]实例演示:TLS/SSL在WCF中的应用[HTTPS]
    [WCF安全系列]谈谈WCF的客户端认证[Windows认证]
    在Entity Framework中使用存储过程(三):逻辑删除的实现与自增长列值返回
    [转] Leaving patterns & practices
    两个简单的扩展方法:TrimPrefix和TrimSuffix
    Oracle 系统表
    让IoC动态解析自定义配置(提供基于Unity的实现)
  • 原文地址:https://www.cnblogs.com/stephen-java/p/10732891.html
Copyright © 2020-2023  润新知