Oracle_Day03
权限
系统权限:用户对数据库的相关操作权限
我通过system不仅要赋予user1登录到数据库的权限,还要让user1能够赋予其他人登录权限(注:权限无法接力,除非管理员赋予权限可接力权限,grant 权限 to 用户 with admin option )
对象权限:用户是否有对其他用户的对象进行操作的权限
用户口令:profile,文件内包含了所有用户的配置信息
Oracle在创建完成之后就会有一个default的profile。
用户锁定
指定某一个用户如果连续输错3次密码,就将他锁定,在2天之后自动解锁
create profile loak_account limit failed_login_attempts 3 password_lock_time 2;
新建profile文件 文件名 连续输错密码次数 自动解锁时间
将创建的profile赋予给user1
alter user user1 profile loak_account;
当user1被锁定后,通过DBA解锁
alter user user1 account unlock;
Oracle中表(表格,二维表,table)的操作
Oracle中表名的命名规范
1、必须以字母开头
2、表名的大小不能超过30个字符
3、不能出现oracle中的关键字
4、名字中只能包含A-Z,a-z,0-9,_
create table tablename(字段名1字段类型,字段名2字段类型,.......)
Oracle中的数据类型:
1、字符型:
char(最大2000个字符,char为定长,当字段为定长时比如:身份证号,手机号,选用char)
varchar2(最大可以表示4000个字符,varchar为变长,当字段为变长时比如:名字,选用varchar2)
clob(字符型大对象,最大可以存储4G的字符)
2、数字型:
number(取值范围为10^-38~10^38,浮点数:number(5,2)五位有效数字中有俩位小数,共有5位数)
3、时间型:
date:年月日时分秒,不不必指定长度
timestamp:时间戳,可以表示秒之后的小数
4、图片:
blob 二进制文件,图片,视屏,音频
一般存储相关文件的路径
案例:创建一个学生表
学号,名字,年龄,性别,奖金
create table student_table(no number(4),name varchar2(9),age number(3),sex char(3),selary(6,3) );
查看表结构:desc tablename;
对表的修改操作:
添加一个字段:
alter table tablename add(字段名 字段类型(长度))
修改一个字段(想修改的字段没有数据):
alter table tablename modify(字段名 字段类型(长度))
修改字段名:
alter table tablename rename column 旧名字 to 新名字
删除一个字段:
alter table tablename drop column 字段名;
对表重命名:
rename 旧表名 to 新名字;
删除表:
drop table tablename;
添加数据:
insert into tablename values(字符1,字符2,‘字符串’),按照字段的顺序输入,字符串用单引号括起来
因为Oracle默认的时间格式是dd-mm-yyy,但是我们想让Oracle的时间格式为yy-mm-dd,需要更改设置。
将Oracle的环境更改为英文,alter session set nls_language=english;
将Oracle的环境更改为中文,alter session set nls_language=‘simplified chinese’;
更改时间默认格式:alter session set nls_date_format='yyy-mm-dd'
只插入部分字段的数据
insert into student_table (要插入的部分列) values(插入的部分数据)
更改数据:
修改一个字段:
update tablename set 要修改的字段名=要修改的值 where 唯一标识 = '查询条件'
修改多个字段:
update tablename set 要修改的字段名1=要修改的值 , 要修改的字段名2=要修改的值 where 唯一标识=‘查询条件’
案例:将所有女性的工资修改成之前的一半
update tablename set sal = sal/2 where sex = '女';
删除数据(回滚操作:rollback):
完全删除
delete from tablename;(数据可找回)
truncate table tablename;(数据不可找回)
设置保存点:savepoint 时间戳命名
回退到保存点:rollback to 时间戳命名
案例:删除员工表中员工编号为0020号的员工
delete from emp where empno = 0020;
案例:删除员工表中所有工资小于5000的员工信息
delete from emp where sal<5000;
Oracle中的查:用的最多,最复杂
desc tablename:查看表结构
select * from tablename;查某张表中的所有数据(效率低)
select 字段名1,字段名2 from tablename; 查询某一个或者某几个字段
案例:查看名为andy的工资与工作
select sal,job from emp where ename='andy'
案例:查看andy的年工资
select sal*12 年工资,job 工作 from emp where ename = 'andy'(可以在要查找的字段后面起别名,字段名1 别名1,字段名2 别名2)
案例:查看员工号为0001的员工的名字和工种
select ename,job from briup_emp where empno=0001;
select ename||'的工种是'||job from briup_emp where empno=0001;(字符串的拼接)
案例:查看所有员工的年薪
select sal*12+comm*12 年薪 from emp;(这么做,有问题,如果有员工的薪资为null,那么算出来的薪资也为null)
select nvl(sal,0)*12+nvl(comm,0)*12 年薪 from emp;
nvl(exp1,exp2);如果exp1这个字段的数据为null,则其值为exp2
where 子句
案例:显示工资低于5000的员工信息
select * from emp where sal<5000
案例:查询入职时间在2004-01-01之后的员工信息
select * from emp where startdate>'2004-01-01'
案例:查询工资在3000到5000之间的员工信息
select * from emp where sal<5000 and sal>3000
like 子句(模糊查询)
通配符:%:0~N个字符 “_”:表示一个字符
案例:查询员工表中所有张姓的同事信息
select * from emp where ename like '张%'
案例:查询名字中第三个字母是a的员工的姓名和工资
select ename , sal from emp where ename like '__a%'
案例:查询名字中第三个字母是a的员工的姓名和工资
select ename , sal from emp where ename like '%a__'
in 子句
案例:查询1号部门和2号部门的所有员工信息
select * from emp where depton in (1,2);
is / is not 子句
案例:查询奖金为null的员工信息
select ename from emp where comm is null
案例:查询奖金不为null的员工信息
select ename from emp where comm is not null
and 和 or子句
案例:查询工资大于5000或奖金大于500且名字里有a这个字符的员工信息
select ename,sal from emp where (sal>5000 or comm>500) and ename like '%a%';
order by 子句(排序,默认升序排列)
案例:查询所有员工的工资,并且从低到高来排序
select ename ,sal from emp order by sal;
案例:查询所有员工的工资,并且从高到低来排序
select ename ,sal from emp order by sal desc;
案例:查询所有员工的姓名,工资,部门编号,按照部门编号的升序且工资的降序。
select ename,sal,deptno from emp order by depton,sal desc;
案例:将所有员工的年工资做降序排列
select ename,sal*12 年工资 from emp order by 年工资 desc;