第二天

使用profile管理用户口令

profile是口令限制资源限制的命令集合当建立数据库的oracle

会自动建立名称为default的profile。当建立用户没有指定profile选项那

么oracle就会将default分配给用户。 


1.账户锁定

指定该账户(用户)登陆时最多可以输入密码的次数也可以指定用户锁定的时间(天)一般用dba的身份去执行该命令。 

例子指定scott这个用户最多只能尝试3次登陆锁定时间为2天 

创建profile文件 

SQL> create profile lock_account limit failed_login_attempts 3

password_lock_time 2; 

SQL> alter user scott profile lock_account;  2.

 

2.给账户(用户)解锁

SQL> alter user tea account unlock;  3.

 

3.终止口令

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

例子给前面创建的用户tea创建一个profile文件要求该用户每隔14天要

修改自己的登陆密码宽限期为4天。看看怎么做。 

SQL> create profile myprofile limit password_life_time 14

password_grace_time 4; 

SQL> alter user tea profile myprofile; 

 

口令历史 

如果希望用户在修改密码时不能使用以前使用过的密码可使用口令历史这样oracle就会将口令修改的信息存放到数据字典中这样当用户修改密

码时oracle就会对新旧密码进行比较当发现新旧密码一样时就提示用户重新输入密码。 

例子 

1建立profile 

SQL>create profile password_history limit password_life_time 14

password_grace_time 4 password_reuse_time 10 

password_reuse_time //指定口令可重用时间即14天后就可以重用 

 

删除profile 

当不需要某个profile文件时可以删除该文件。 

SQL> drop profile password_history 【casade】 

注意文件删除后用这个文件去约束的那些用户通通也都被释放了。。 

加了casade就会把级联的相关东西也给删除掉 

4.oracle表的管理(数据类型表创建删除数据CRUD操作) 

内容介绍 
1.回顾 
2.oracle的表的管理  
 3.基本查询
4.复杂查询
5.oracle数据库的创建

 

目标
1.掌握oracle表的管理创建/维护  
2.掌握对oracle表的各种查询技巧 
3.学会创建新的oracle数据库 

 

 

oracle的表的管理 

表名和列的命名规则  必须以字母开头  ? 长度不能超过30个字符   不能使用oracle的保留字   只能用如下字符 A-Za-z0-9$,#等 

 

oracle支持的数据类型


字符类 

char    定长 最大2000个字符。 

例子char(10)  ‘小韩’前四个字符放‘小韩’后添6个空格补全 如‘小

韩      ’ 

 

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

例子varchar210 ‘小韩’ oracle分配四个字符。这样可以节省空间。 

 

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', '张三', '男', '01-5月-05', 10); 

oracle中默认的日期格式‘dd-mon-yy’ dd日子天 mon 月份  yy  2位的

年  ‘09-6月-99’ 1999年6月9日 

修改日期的默认格式临时修改数据库重启后仍为默认如要修改需要修改注

册表 

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

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

INSERT INTO student VALUES ('A002', 'MIKE', '男', '1905-05-06', 10); 

 插入部分字段

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

 插入空值

INSERT INTO student(xh, xm, sex, birthday) VALUES ('A004', 'MARTIN', '

男', 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 = '1984-04-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; --删除表中的所有记录表结构还在不写日志无

法找回删除的记录速度快。 
5.oracle表查询

(1)oracle表基本查询 
emp 雇员表 

clerk  普员工 

salesman 销售 

manager  经理 

analyst 分析师 

president  总裁 

 

mgr  上级的编号 

hiredate 入职时间 

sal 月工资 

comm 奖金 

deptno 部门 

 

dept部门表 

deptno 部门编号 

accounting 财务部 

research  研发部 

operations 业务部 

loc 部门所在地点 

 

salgrade   工资级别 

grade    级别 

losal    最低工资 

hisal    最高工资 

 

简单的查询语句 

 查看表结构ν 

DESC emp; 

 查询所有列ν 

SELECT * FROM dept; 

切忌动不动就用select * 

SET TIMING ON; 打开显示操作时间的开关在下面显示查询时间。 

CREATE TABLE users(userId VARCHAR2(10), uName VARCHAR2 (20), uPassw

VARCHAR2(30)); 

INSERT INTO users VALUES('a0001', '啊啊啊啊', 'aaaaaaaaaaaaaaaaaaaaaaa'); 

--从自己复制加大数据量 大概几万行就可以了  可以用来测试sql语句执行

效率 

INSERT INTO users (userId,UNAME,UPASSW) SELECT * FROM users; 

SELECT COUNT (*) FROM users;统计行数 

 

 查询指定列ν 

SELECT ename, sal, job, deptno FROM emp; 

 如何取消重复行DISTINCTν 

SELECT DISTINCT deptno, job FROM emp; 

?查询SMITH所在部门工作薪水 

SELECT deptno,job,sal FROM emp WHERE ename = 'SMITH'; 

注意oracle对内容的大小写是区分的所以ename='SMITH'和ename='smith'

是不同的 

 

 使用算术表达式 ν nvl  null 

问题如何显示每个雇员的年工资 

SELECT sal*13+nvl(comm, 0)*13 "年薪" , ename, comm FROM emp; 

 使用列的别名ν 

SELECT ename "姓名", sal*12 AS "年收入" FROM emp; 

 如何处理null值ν 

使用nvl函数来处理 

 如何连接字符串||ν 

SELECT ename  || ' is a ' || job FROM emp; 

 使用where子句ν 

问题如何显示工资高于3000的 员工 

SELECT * FROM emp WHERE sal > 3000; 

问题如何查找1982.1.1后入职的员工 

SELECT ename,hiredate FROM emp WHERE hiredate >'1-1月-1982'; 

问题如何显示工资在2000到3000的员工 

SELECT ename,sal FROM emp WHERE sal >=2000 AND sal <= 3000; 

ν 

ν 如何使用like操作符 

%表示0到多个字符  _表示任意单个字符 

问题如何显示首字符为S的员工姓名和工资 

SELECT ename,sal FROM emp WHERE ename like 'S%'; 

如何显示第三个字符为大写O的所有员工的姓名和工资 

SELECT ename,sal FROM emp WHERE ename like '__O%'; 

 

 在where条件中使用inν 

问题如何显示empno为7844, 7839,123,456 的雇员情况 

SELECT * FROM emp WHERE empno in (7844, 7839,123,456); 

 使用is null的操作符ν 

问题如何显示没有上级的雇员的情况  错误写法select * from emp where mgr = ''; 

正确写法SELECT * FROM emp WHERE mgr is null;  6.oracle表查询

表查询表查询

表查询(2) 使用逻辑操作符号ν 

问题查询工资高于500或者是岗位为MANAGER的雇员同时还要满足他们的姓

名首字母为大写的J 

SELECT * FROM emp WHERE (sal >500 or job = 'MANAGER') and ename LIKE 'J%'; 

 使用order byν 字句   默认asc 

问题如何按照工资的从低到高的顺序显示雇员的信息 

SELECT * FROM emp ORDER by sal; 

问题按照部门号升序而雇员的工资降序排列 

SELECT * FROM emp ORDER by deptno, sal DESC; 

 

 

 使用列的别名排序ν 

问题按年薪排序 

select ename, (sal+nvl(comm,0))*12 "年薪" from emp order by "年薪" asc; 

别名需要使用“”号圈中,英文不需要“”号 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值