• oracle学习操作(1)


    一、oracle表及表空间:                                    

    1.查看用户、用户表空间等,需要sysdba登陆:
    select username, default_tablespace from dba_users;
     
    2.一个数据库可以有多个表空间,一个表空间里可以有多个表。表空间就是存多个表的物理空间;可以指定表空间的大小位置等。
    创建表空间:create tablespace ts1 datafile 'C: ablespace s1.dbf' size 50M;
    自动扩展大小:create tablespace ts2 datafile 'C: ablespace s2.dbf' size 50M autoextend on next 10M;
    设置最大空间:create tablespace ts3 datafile 'C: ablespace s3.dbf' size 50M autoextend on next 10M maxsize 1024M;
     
    3.更改默认的表空间:默认的表空间一般是users;需要sysdba
    alter database default tablespace ts1;
     
    4.更改某个用户默认的表空间,需要sysdba; alter user c##chengyu default tablespace mytablespace
     为用户授予表空间权限:                         alter user c##chengyu quota unlimited on mytablespace;
    5.表空间改名:alter tablespace ts1 rename to tss1;
    6.删除表空间:drop tablespace ts2 including contents and datafiles;
    需要手动删除硬盘上表空间文件;
     
    二、oracle虚表dual:                                    
    Dual表是sys用户下的一张虚表;提供一些运算和日期操作时候用到;
    select sysdate from dual;
     
     
    三、oracle序列:                                      
    oracle特有的。用来产生一个唯一的,不间断的,数字的一个序列;一般用来做主键
    比如文章表,每次往里插入,id自增1;
    可以考虑每次取出id的max(id),然后+1;
    但是这样有线程同步问题;很可能插入的id值一样等问题;
     
    1.创建序列:
     
    2.序列属性:
    create sequence user_seq start with 1 minvalue 1 increment by 1;
    使用序列:t_user表中的id是主键,使用序列自增:
     
    insert into t_user values(user_seq.nextval, 'zhangsan', '123456');
    insert into t_user values(user_seq.nextval, 'lisi', '123456');
    select user_seq.currval from dual;
    select user_seq.nextval from dual;
    序列产生一个序列的数,而且保证不会重复;即便是两个线程同时来访问这个东西,放心,还是不会重复,说白了自己内部已经做了线程同步了。
     
    真正项目中是一个项目用一个序列,还是一个表用一个序列??
    优缺点:
    一个项目用一个序列,很多表用一个序列: 缺点-每个表的主键就不连续了;
    一个表用一个序列:好管理点,生成的主键都是连续的;缺点-麻烦点,每个表都得建序列;
    一般是一个表对应一个序列;
     
     
    四、Oracle表操作:                                    
    1、update:
    更新一行的两个字段,之间用逗号隔开:
    update t_user set username='zhang_san', password='123' where id = 1;
     
    2、select查询:
     联合查询:
    例如现在数据库中表记录:
    t_user:
    t_user2:
     
     1)并集(去重复):
    select * from t_user union select * from t_user2;
     
     2) 并集(不去重复):
    select * from t_user union all select * from t_user2
     
    3)交集:
    select * from t_user intersect select * from t_user2   得到结果就是只有一个 zhang_san  123 
     
    4) 差集: 属于第一个集合里面,不在第二个集合里面;
     select * from t_user minus select * from t_user2    得到结果  lisi  123456
     
     
    五、oracle数据类型及函数:                                    
    1.字符串类型及函数:
    //解释:
    select lpad(username, 10, '0') username, password from t_user;
     
    substr(字段名,索引位置,截取长度) :  索引位置从1开始;
    instr(字段名,要查找的串,从第几个索引位置开始, 第几次出现),查不到的话,返回0;索引位置值从1开始;
     
    2.数值类型及函数:
    //代码解释:
    select round(123.45, 1) from dual    //123.5 
    round第二个参数,是保留几位小数;
     
    sign() 整数返回1; 0返回0; 负数返回-1;
     
    select trunc(123.456,2) from dual;    //123.45
    trunc第二个参数是保留几位小数,单纯的截取,不进行其他操作;
     
    select to_char(123.45,'0000.000') from dual;    // 0123.450
    select to_char(123.45,'9999.999') from dual    //123.450         9999.999和上面的区别就是:整数位不会自动补0;
    select to_char(123123,'99,999,999.99') from dual    //123,123.00 
     
    select to_char(123123.3,'FM99,999,999.99') from dual;  //123,123.3  FM会把结果前面的空格去掉;
     
    select to_char(123123.3,'$99,999,999.99') from dual    //$123,123.30
     
    select to_char(123123.3,'FM$99,999,999.99') from dual  //$123,123.3   FM将返回结果前面空格去掉,FM可以和$连用;
     
    select to_char(123123.3,'L99,999,999.99') from dual;  //¥123,123.30
     
    select to_char(123123.3,'99,999,999.99C') from dual  //123,123.30CNY 
     
    3.日期类型及函数
     
    //代码解释:
    select * from t_date;
     
    select add_months(d1,2) from t_date where id=1;

    ADD_MONTHS(D1,2)
    ----------------
    26-5月 -17

    select last_day(d1) from t_date where id=1;

    LAST_DAY(D1)
    ------------
    31-3月 -17

    select months_between(d1,d3) from t_date where id=1;

    MONTHS_BETWEEN(D1,D3)
    ---------------------
    3.197800553

    select extract(year from sysdate) from dual;

    EXTRACT(YEARFROMSYSDATE)
    ------------------------
    2017

    select extract(month from sysdate) from dual;

    EXTRACT(MONTHFROMSYSDATE)
    -------------------------
    3

    select to_char(d1,'YYYY-MM-DD') from t_date where id=1;

    TO_CHAR(D1,'YYYY-MM-DD')
    ------------------------
    2017-03-26

    select to_char(d1,'YYYY-MM-DD HH24:MI:SS') from t_date where id=1;

    TO_CHAR(D1,'YYYY-MM-DDHH24:MI:SS')
    ----------------------------------
    2017-03-26 21:41:23

    4.其他常用处理函数

    //代码解释:
    select ename,nvl(sal,0) from emp;    //如果sal列的值为null的话,将这个值用0来代替显示;
     
    oracle翻页:
    求薪水最高的第6到第10位:
    两种写法都可以:
    select * from (select a.*, rownum rn from (select * from emp order by sal desc) a where rownum <=10) where rn >= 6
    select * from (select a.*, rownum rn from (select * from emp order by sal desc) a) where rn >=6 and rn <=10
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    编写登陆认证程序
    模拟实现一个ATM + 购物商城程序
    三级菜单
    12 场景制造
    11 Unity Editor界面
    3.7练习题
    Coolite 弹窗妙用
    Nginx反向代理 实现Web负载均衡
    MySQL 架构
    Lnmmp
  • 原文地址:https://www.cnblogs.com/tenWood/p/6622577.html
Copyright © 2020-2023  润新知