DML语句(delete,insert,update)

DML语句(delete,insert,update)DML DataManipula 数据操作语言 insert 将记录插入到数据库 update 修改数据库的记录 delete 删除数据库的记录 commit 提交数据 savepoint 设置回滚点 rollback 回滚执行 DML 命令如果没有提交 将不会被其他会话看到 除非在 DML 命令之后执行了 DDL 命令或 DCL 命令 或用户退出会话 或终止实例 此时系统会自动发出 commit 命令 使未交的 DML 命令提 DQL select 查询语句 DML 数据操作语言 DDL 数据定义语言 DCL

一、概述:DML (Data Manipulation Language 数据操作语言)

 insert 将记录插入到数据库 update 修改数据库的记录 delete 删除数据库的记录    commit 提交数据          savepoint 设置回滚点          rollback   回滚 当执行DML命令如果没有提交,将不会被其他会话看到。除非在DML命令之后执行了DDL命令或DCL命令,或用户退出会话,或终止实例,此时系统会自动发出commit命令,使未提交的DML命令提交。     

二、    sql语句的分类:

        DQL: select查询语句
        DML:数据操作语言
        DDL:数据定义语言
        DCL:事务控制语句
三、对DML语言: insert update delete     的测试
    (一)测试使用的表: 没有主外键关联    

create table t_user( id number, name varchar2(50) constraint user_name_nn not null, email varchar2(50), gender char(1), age number, birthday date, constraint user_id_pk primary key(id), constraint user_email_un unique(email), constraint user_gender_ck check(gender in('f','m')) ); 

    drop table t_user; 
    3.1.1 insert语句: 
        向表中插入数据:
        //默认是向表中的每一个列中【依次】插入数据       

insert into t_user values(1,'tom','abc','f',20,'11-8月-98');

DML语句(delete,insert,update)


 
        //也可以指明向表中的哪些列插入数据
        //注意:可以任意交换下面列名的位置,只有values语句中的值也对应交换即可        

insert into t_user(id,name,email,gender,age,birthday) values(2,'tom','abc1','f',20,'11-8月-98'); 

        //列的值可以是null的话,那么也在插入的时候不指定这个列
        //注意:unique约束和check约束的值,都可以为null
        //注意:主键约束和非空约束的值,都不可以为null      

 insert into t_user(id,name,email,gender) values(3,'tom','abc3','f'); insert into t_user(id,name,email) values(4,'tom','abc31'); insert into t_user(id,name) values(5,'tom');

        //使用运行时参数设置需要输入表中的值       

 insert into t_user(id,name) values(&id,'&name');

        //把查询的结果 插入到表中
        //前提是查询的列的顺序和要插入表中列的顺序是一致的,这个一致指的的是数据类型是一种的。  

 insert into t_user(id,name,birthday) select id,last_name,start_date from s_emp;

DML语句(delete,insert,update)


   3.1.2 update语句:
        //修改表中所有数据的age值为20岁        

update t_user set age=20;         

        //修改表中所有数据的age和gender的值        

update t_user set age=25,gender='m';         

        //修改表中id小于10数据的age和gender的值为null        

update t_user set age=null,gender=null where id<10;                  

        //修改id为18的用户的名字为zhangsan       

 update t_user set name='zhangsan' where id=18;      

   3.1.3 delete语句
        //删除表中id大于20的用户信息        

delete from t_user where id>20;         

        //删除名字为张三的用户信息        

delete from t_user where name='zhangsan';         

        //删除表中所有的数据        

delete from t_user;

(二)  测试使用的表: 主外键关联    

create table t_customer( id number, name varchar2(20) constraint customer_name_nn not null, constraint customer_id_pk primary key(id) );   
 create table t_order( id number, price number, customer_id number, constraint order_id_pk primary key(id), constraint order_cid_fk foreign key(customer_id) references t_customer(id) );     

    drop table t_order;
    drop table t_customer;      
   3.2.1 insert语句:
        //t_customer表中插入数据       

 insert into t_customer(id,name) values(1,'tom1'); insert into t_customer(id,name) values(2,'tom2'); insert into t_customer(id,name) values(3,'tom3');

        //t_order表中插入数据
        //customer_id外键列的值必须是t_customer表中出现过的id值       

 insert into t_order(id,price,customer_id) values(1,1000,1); insert into t_order(id,price,customer_id) values(2,2000,2);  

        //下面语句插入出差,因为6这个值并没有在t_customer表中id列出现过的 

 insert into t_order(id,price,customer_id) values(3,3000,6);  

        //t_order表中插入数据
        //默认情况下,外键列上的值是可以为空的       

 insert into t_order(id,price,customer_id) values(3,3000,null); insert into t_order(id,price) values(4,4000);

        注意:如果在外键列上加一个非空约束,那么这个外键列的值就不能为null了(可以给一个列上添加多种约束,使用空格隔开即可)  
        //t_order表中插入数据
        //默认情况下,外键列上的值是可以重复的        

 insert into t_order(id,price,customer_id) values(5,5000,1); insert into t_order(id,price,customer_id) values(6,6000,1);

        注意:如果在外键列上加一个唯一约束,那么这个外键列的值就不能重复了(可以给一个列上添加多种约束)      
   3.2.2 update语句:
        把俩个测试表删除了重新创建,然后向表中插入一些数据
        //t_customer表中插入数据
        insert into t_customer(id,name) values(1,'tom1');
        insert into t_customer(id,name) values(2,'tom2');
        insert into t_customer(id,name) values(3,'tom3');
        //t_order表中插入数据
        insert into t_order(id,price,customer_id) values(1,1000,1);
        insert into t_order(id,price,customer_id) values(2,2000,2);         
        //把t_order表中id=1的数据的customer_id列修改为3        

update t_order set customer_id = 3 where id = 1; 

        //把t_order表中id=1的数据的customer_id列修改为null        

update t_order set customer_id = null where id = 1;     

        //把t_order表中id=1的数据的customer_id列修改为20
        //sql执行出错,因为就没id=20的顾客        

update t_order set customer_id = 20 where id = 1; 

   3.2.3 delete语句:         
        //删除t_order表中的的所有数据
        //可以成功删除,没有问题,因为删除t_order不会对t_costomer表的数据产生任何影响
        delete from t_order;         
        //t_order表中插入数据
        insert into t_order(id,price,customer_id) values(1,1000,1);
        insert into t_order(id,price,customer_id) values(2,2000,2);          
        //删除t_customer表中id=3的数据
        //删除成功,因为t_order表中外键列中没有引用过这个值        

delete from t_customer where id = 3;

         //删除t_customer表中id=1的数据
        //删除失败,因为t_order表中外键列中已经引用了这个值        

delete from t_customer where id = 1; 

       【在这种情况下,on delete 语句就可以起作用了,如下面介绍的on delete】 
 四、on delete语句
        on delete no action(默认情况:什么不都写)
        on delete cascade
        on delete set null         
        on delete语句是在声明外键约束的时候使用的。用户在删除A表中的一条数据,而这条数据被B表中的外键列所引用了,这个时候on delete语句的设置可以告诉oracle这个时候该如何处理                 
        如果在建外键的时候,不加on delete语句,就是on delete no action
        例如1: on delete no action        

create table t_customer( id number, name varchar2(20) constraint customer_name_nn not null, constraint customer_id_pk primary key(id) );         
create table t_order( id number, price number, customer_id number, constraint order_id_pk primary key(id), constraint order_cid_fk foreign key(customer_id) references t_customer(id) );          

        drop table t_order;
        drop table t_customer; 
        插入测试数据:
        //t_customer表中插入数据       

 insert into t_customer(id,name) values(1,'tom1'); insert into t_customer(id,name) values(2,'tom2'); insert into t_customer(id,name) values(3,'tom3');

        //t_order表中插入数据       

 insert into t_order(id,price,customer_id) values(1,1000,1); insert into t_order(id,price,customer_id) values(2,2000,2); 

        //如下面语句进行删除,则显示删除失败
        //ORA-02292: 违反完整约束条件 - 已找到子记录        

 delete from t_customer where id = 1;          

        例如2: on delete cascade
        建表语句和测试数据上例1相同,只是在声明外键列的时候加入on delete cascade语句        

create table t_order( id number, price number, customer_id number, constraint order_id_pk primary key(id), constraint order_cid_fk foreign key(customer_id) references t_customer(id) on delete cascade );              

        //同样做删除测试
        //删除成功,同时级联(cascade)删除了t_order表中所关联的那条数据        

delete from t_customer where id = 1;

         这就相当于删除客户的同时删掉客户的订单     
        例如3: on delete set null
        建表语句和测试数据上例1相同,只是在声明外键列的时候加入on delete set null语句       

 create table t_order( id number, price number, customer_id number, constraint order_id_pk primary key(id), constraint order_cid_fk foreign key(customer_id) references t_customer(id) on delete set null );               

        //同样做删除测试
        //删除成功,同时把t_order表中所关联的那条数据的外键设置为了null       

 delete from t_customer where id = 1; 

 
 
  

















































































































































































版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176835.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午8:56
下一篇 2026年3月26日 下午8:56


相关推荐

  • python中return的用法

    python中return的用法python 中 return 的用法 1 return 语句就是把执行结果返回到调用的地方 并把程序的控制权一起返回程序运行到所遇到的第一个 return 即返回 退出 def 块 不会再运行第二个 return 例如 defhaha x y ifx y returnx yprint haha 1 1 结果 这种 return 传参会返回元组 1 2 2 但是

    2026年3月20日
    2
  • 自己动手写操作系统 —-总计

    自己动手写操作系统 —-总计2021 1 23 开始写操作系统 参考书 ORANGE S 一个操作系统的实现 好奇心是动力的源泉 追究问题的本质是优秀黑客的必备素质 只有充分掌握了系统原理 才能在技术上游刃有余 才能有真正的创新和发展 中国需要更多真正的黑客 也希望更多的程序员能享受属于黑客的创造乐趣 实践 遇到问题 解决问题 再实践 NASM2 12 02 稳定版下载 2017 年 软盘已经退出历史舞台 而且 rawrite 软件已经不能在 win10 0 14393 这样的 64 系统上运行了 经过考量 作者决定选用 WinHex18

    2026年3月26日
    1
  • 软件测试入门基础_软件测试如何自学

    软件测试入门基础_软件测试如何自学电商项目实战-用例设计系列参考书籍:《电商后台系统产品逻辑全解析》一、电商模式其中大家接触最多的就是B2C。电商模式名词解释不做过多讲解。电商模式二:电商后台管理系统。重点给大家分享订单中心、支付中心、促销中心的用例设计思路。电商后台管理系统【1】促销形式…………

    2026年4月13日
    3
  • Readprocessmemory使用方法

    Readprocessmemory使用方法函数功能:该函数从指定的进程中读入内存信息,被读取的区域必须具有訪问权限。函数原型:BOOLReadProcessMemory(HANDLEhProcess,LPCVOIDlpBaseAddre

    2022年7月3日
    36
  • 笔记本外接显示器怎么投屏(笔记本电脑怎么连接显示屏)

    “开始”右键,点击搜索->在搜索框中输入“投影”->“投影到第二屏幕”,点击打开可以看到四种模式:仅电脑屏幕;仅第二屏幕;复制;扩展选择“扩展”桌面空白处右键->显示设置->显示点击标识,确认屏幕1(一般是笔记本原屏幕),屏幕2(一般是外接显示屏)分别是哪块屏幕。根据自己的需要设置主显示器然后就可以愉快的双屏工作啦~…

    2022年4月11日
    408
  • AI 引擎 : MiroFish AI智能体项目介绍

    AI 引擎 : MiroFish AI智能体项目介绍

    2026年3月15日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号