Oracle 学习笔记(二)

时间:2022-10-15 08:16:17

​ 

使用 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; 

 

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

Oracle 学习笔记(二)Oracle 学习笔记(二)