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;  

你可能感兴趣的:(Oracle_Day03)