您的位置:首页 > 数据库 > Oracle

Oracle数据库入门 基础知识day05 火推阳光笔记

2017-09-21 21:27 267 查看
 

Oracle 05

DML 数据操作语言

事务 , insert

数据的删除

格式1.    

    删除指定表格中的所有数据 

    delete from 表名;

格式2.

    根据where条件 ,删除匹配的数据

    delete from 表名 where 条件;

练习: 

    需求: 删除id为11的person表格数据

    delete from person where id=11;

    commit;

    需求: 删除id为12 或 22的person表格数据

    commit;

    delete from person where id=12 or id=22;

    需求: 删除所有的person数据

    commit;

    delete from person;

数据的修改

格式: update 表名 set 字段名1=字段值1,字段名2=字段值2...字段名n=字段值n [where 条件];

在update语句中, set后面的字段名与值列表, 使用逗号隔开多个字段名/值

练习:

    需求:

    -   修改person表中的所有的age 为  18.

        update person set age=18;

        commit;

    -   修改person表中的 id为12的 人 ,将他的年龄设置为188

        update person set age=188 where id=12;

        commit;

    -   修改person表中的 id为13的人, 设置它的年龄为20 , 姓名为逗逼

        update person set age=20,name='逗逼' where id=13;

        commit;

TCL    事务控制语句

事务: 

    需要把多条的DML sql语句看作一个整体 , 要么一起成功, 要么一起失败

    oracle 数据库 事务是需要手动结束的 , 如果不结束则对数据库产生不了任何的影响 !

    Mysql 数据库 事务默认是自动提交 ,在你执行的每一条的dml语句后, 自动执行commit;

事务的特性:

1.  原子性: 同一个事务中的操作, 不可分割 ,要么一起成功, 要么一起失败 !

2.  一致性: 同一个事务的操作, 保持一致 !

3.  隔离性: 一个事务的dml操作, 在没有提交之前, 对于其他的事务来说, 数据应是不可见的 !

4.  持久性: 数据要一直保持

如何结束事务

1.  commit

    -   提交事务, 将数据写入数据库 !

2.  rollback

    -   回滚事务(回退操作) , 撤回, 回退本次事务的所有dml操作

    使用格式: 

        1.  rollback; 回退之前的所有dml操作:

        2.  rollback to 保存点

    保存点添加的方式: 

        savepoint 保存点名称;

    案例:

        将对于perosn表的四次插入, 看作一个事务

        insert into person values(10001,'凯凯',8);

        savepoint a;

        insert into person values(10002,'凯凯自充气版',8);

        savepoint b;

        insert into person values(10003,'凯凯合金弹头限量款',1);

        savepoint c;

        insert into person values(10004,'凯凯双马达动力款',20);

        savepoint d;

        --rollback to b;

        rollback;

        commit;

日期类型

在创建表格时, 字段类型指定为date即可, 不需要指定长度

创建表格: 

    表名: person

    列: 

        -   id  number类型 长度5

        -   name varchar2类型 长度100

        -   age number类型 长度5

        -   createdate date类型

    --------------------------------------------

    create table person(

        id number(5),

        name varchar2(100),

        age number(5),

        createdate date

    );

向表格插入日期

传入当前时间

sysdate : 表示系统(本机电脑)当前时间

insert into person values(10001,'凯凯',18,sysdate);

insert into person values(10002,'志强',28,sysdate);

使用to_char对日期进行格式化

to_char(参数1,参数2);

    -   1.  将一个数字 转换为指定格式的 字符串

    -   2.  将一个date 转换为指定格式的 字符串

-   类似Java中的 SimpleDateFormat (yyyy年-MM月-dd日 HH时mm分ss秒 sss毫秒)

参数1.    日期类型的数据

参数2.    日期格式化的模版

            -   模版中的特殊字符的含义

            yyyy:四位年

            MM  :月 (英文环境下 显示月份单词前三个字母)

            dd  :日

            hh  :12小时制

            hh24:24小时制

            mi  :分钟

            ss  :秒

            ---------------------------

            特殊: 

            day : 星期

            month:月(英文环境下,显示月份整个单词)

            am: 12小时制 , 

                中文显示:   上午/下午

                英文显示:   am / pm

    练习: 

        查询id为10002的person数据, 要求 ,创建日期要展示年月日时分秒

        select id,name,age,to_char(createdate,'yyyy-MM-dd am hh:mi:ss day') from person where id=10002;

        select id,name,age,to_char(createdate,'yyyy-MM-dd hh24:mi:ss day') from person where id=10002;

如何插入一个过去时间

向数据库插入北京奥运会开幕式的日期:  2008-8-8

默认日期格式: 

    英文环境: dd-mon-yy

        例如: 2008年8月8日:  08-aug-2008

    中文环境: 日-月-年

        例如: 2008年8月8日:  08-8月-2008

通过上述格式的字符串 即可插入

insert into person values(10003,'凯凯3',18,'08-8月-2008');

to_date(参数1,参数2)

    将一个日期字符串, 转换为date

使用方式与to_char基本一致 !

参数1.    字符串类型的时间

参数2.    匹配参数1的字符串 时间格式模版

-------------

使用to_date 像数据库中插入 2008年8月-8日 20时08分08秒

insert into person values(10004,'志强2',28,to_date('2008-08-08 20:08:08','yyyy-mm-dd hh24:mi:ss'));

commit;

日期的设置 与 取出

我们正常需求下 , 一般通过to_date 将数据插入数据库 

通过to_char将数据从数据库中取出并展示

日期(date)的调整

sysdate : 系统当前时间,date类型的数据

    date类型可以与数字进行加减 !

    date类型可以减去date类型

        sysdate-sysdate=0;

    date类型无法与date类型相加

sysdate+1:当前时间增加一天

    select to_char(sysdate+1,'yyyy-mm-dd hh24:mi:ss') from dual;

sysdate-1:当前时间减少一天

    select to_char(sysdate-1,'yyyy-mm-dd hh24:mi:ss') from dual;

求出当前时间 向前推一小时的时间: (减少一小时)

sysdate-(1/24)

    select to_char(sysdate-(1/24),'yyyy-mm-dd hh24:mi:ss') from dual;

练习: 

    求出当前时间增加10分钟

    select to_char(sysdate+(10/60/24),'yyyy-mm-dd hh24:mi:ss') from dual;

    求出当前时间减少一个半小时

    sel
4000
ect to_char(sysdate-(1.5/24),'yyyy-mm-dd hh24:mi:ss') from dual;

求出当前时间增加一个月的时间

add_months(参数1,参数2);

    参数1. date类型的数据

    参数2. number类型 , 1表示一个月 , -1表示负一个月

select to_char(add_months(sysdate,1),'yyyy-mm-dd hh24:mi:ss') from dual;

截取日期

trunc(参数1,参数2);

参数1. 要截取的日期类型的数据(date)

参数2. 要截取的日期单位 (默认截取单位是dd)(传入的值为日期模版中的单位)

2017-09-21 14:38:55

默认截取到dd

select to_char(trunc(sysdate),'yyyy-mm-dd hh24:mi:ss') from dual;

截取到mm

select to_char(trunc(sysdate,'mm'),'yyyy-mm-dd hh24:mi:ss') from dual;

截取到hh

select to_char(trunc(sysdate,'hh'),'yyyy-mm-dd hh24:mi:ss') from dual;

日期操作练习题

1.  求出当前时间 , 当前月份的最后一分钟

    select to_char(add_months(trunc(sysdate,'mm'),1)-(1/60/24),'yyyy-mm-dd hh24:mi:ss') from dual;

2.  查询s_emp表格(id,last_name,start_date) , 按照start_date排序

    select id,last_name,to_char(start_date,'yyyy-mm-dd hh24:mi:ss') from s_emp order by start_date;

3.  查询s_emp表格(id,last_name,start_date) , 查询的条件为入职日期在1990年1月份 到 1990年12月份

    select id,last_name,to_char(start_date,'yyyy-mm-dd hh24:mi:ss') from s_emp where start_date>to_date('1990-1-1','yyyy-mm-dd') and start_date<'31-12月-1990';

约束

数据库的约束, 是对于在数据库中进行数据插入时的一些限制!

满足约束条件的 则可以正常插入数据, 不满足的则报错!

约束的分类与含义

-   主键约束(primary key)(pk) :一个表格只允许存在一个主键列 ,  一般用来做唯一标识 ,  一个字段加了主键约束以后 ,则这个字段不能为null , 并且这个字段不可重复 ! 可以理解为: 非空+唯一

-   非空约束(not null) (nn):字段的值不能为空

-   唯一性约束(unique)(uk) :字段的值不可重复

-   检查约束(check)(ck) : 字段的值必须符合检查条件

-   外键约束:以后再说

----------------------------------------------------

约束的使用方式:

1.  列级约束:   在定义表的某一列时 , 在列后面追加约束关键字, 叫做列级约束!

2.  表级约束:   在定义完毕表的所有列之后, 再选择某些列添加约束, 叫做表级约束 !

列级约束-主键约束

创建一个person表格, 设置它的id为主键: 

create table person(

    id number primary key,

    name varchar2(100),

    age number

);

向上述的表格插入两行数据: 

insert into person(name,age) values('a',18);

    我们在尝试插入数据时, 忽略了主键字段, 报错!

insert into person values(1,'a',18);

    我们在尝试插入全字段数据时, 插入成功

insert into person values(1,'b',28);

    重复插入相同的主键, 报错 : 违反唯一与约束

练习: 

创建一个表格person_1

    拥有如下字段: 

    id number  主键

    name varchar(100) 唯一

    age number 非空

create table person_1(

    id number primary key,

    name varchar2(100) unique,

    age number not null

);

约束别名

每个约束, oracle都会为其生成一个不重复的别名 , 系统生成的别名 不具备 见名知意的效果

我们可以主动在添加约束时, 给约束指定一个别名, 方便我们后期进行调试!

别名的特点: 

    具备唯一性 

别名的命名规范: 

    表名_字段名_约束的简写

格式: 

    create table 表名(

        字段名1 字段类型 constraint 别名 约束关键字,

        字段名2 字段类型

        ...

    );

create table person(

    id number constraint person_id_pk primary key,

    name varchar2(100) constraint person_name_uk unique,

    age number constraint person_age_nn not null

);

尝试违反约束条件, 观看报错时的约束名称:

insert into person values(1,'凯凯',88);

commit;

insert into person values(1,'凯凯',88);

commit;

列级约束--检查约束

练习: 

创建一个用户表格 , 因为网站的特殊性, 要求年龄满18岁才可以注册

    create table user13(

        uname varchar2(20),

        upass varchar2(20),

        age number constraint user13_age_ck check(age>=18)

    );

尝试插入年龄低于18岁的信息

insert into user13 values('kaikai','yibaige6',12);

commit;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle 数据库