ch04-操作数据-DML语句
- 格式:ppt
- 大小:859.00 KB
- 文档页数:21
数据库DML操作(DCL了解)DQL:SELECT * FROM 表名DML(数据操作语⾔,它是对表记录的操作(增、删、改)!)1. 插⼊数据* INTERT INTO 表名(列名1,列名2, ...) VALUES(列值1, 列值2, ...);> 在表名后给出要插⼊的列名,其他没有指定的列等同与插⼊null值。
所以插⼊记录总是插⼊⼀⾏,不可能是半⾏。
> 在VALUES后给出列值,值的顺序和个数必须与前⾯指定的列对应* INTERT INTO 表名 VALUES(列值1, 列值2)> 没有给出要插⼊的列,那么表⽰插⼊所有列。
> 值的个数必须是该表列的个数。
> 值的顺序,必须与表创建时给出的列的顺序相同。
在数据库中所有的字符串类型,必须使⽤单引,不能使⽤双引!⽇期类型也要使⽤单引!//插⼊所有列INSERT INTO stu(number, name, age, gender)VALUES('ITCAST_0001', 'zhangSan', 28, 'male');//插⼊部分列,没有指定的列默认为NULL值INSERT INTO stu(number, name) VAKLUES('ITCAST_0002', 'liSi');//不给出插⼊列,那么默认为插⼊所有列!值的顺序要与创建表时列的顺序相同INSERT INTO stu VALUES('ITCAST_0003', 'wangWu', 82, 'female');2. 修改数据* UPDATE 表名 SET 列名1=列值1, 列名2=列值2, ... [WHERE 条件]* 条件(条件可选的):> 条件必须是⼀个boolean类型的值或表达式:UPDATE t_person SET gender='男', age=age+1 WHERE sid='1'; > 运算符:=、!=、<>、>、<、>=、<=、BETWEEN...AND、IN(...)、IS NULL、NOT、OR、AND列如:WHERE age >=18AND age <=80WHERE age BETWEEN18AND80WHERE name='zhangSan'OR name='liSi'WHERE name IN ('zhangSan', 'liSi')WHERE age IS NULL, //不能使⽤等号WHERE age IS NOT NULL3. 删除数据* DELETE FROM 表名 [WHERE 条件];* TRUNCATE TABLE 表名:TRUNCATE是DDL语句,它是先删除drop该表,再create该表。
处理数据-DML语句处理数据-DML语句1 SQL语句类型1.1 DML:数据操纵语⾔ Data Manipulation LanguageDML是指SQL语句中⽤于处理对象中的数据的语⾔。
DML语句⽤来增加、修改和删除数据库对象中的数据,例如表中的数据。
insert 向数据库的表中添加数据update 更改表中已有的数据delete 从表中删除已有的数据merge 能够在⼀个SQL语句中对⼀个表同时执⾏inserts和updates操作DML:增、删、改1.2 DDL:数据定义语⾔ Data Definition LanguageDDL是指⽤于构建数据库对象的语⾔create 创建数据库中的表、视图、索引、同义词和其他对象alter ⽤于修改数据库中已经存在的对象结构、名称或其他属性drop 删除数据库对象truncate 截断表1.3 DCL:数据控制语⾔ Data Control Languagegrant 为⽤户赋予权限revoke 收回⽤户权限1.4 TCL:事务控制语⾔ Transaction Control Languagecommit 提交事务rollback 撤销事务savepoint 在会话中设置⼀个保存点,将来通过rollback语句可以回滚到该位置。
2 DML数据操纵语⾔2.1 insert语句语法:insert into table_name(column1, column2...) values(value1, value2...);2.1.1 向表中插⼊新⾏insert into dept(deptno,dname,loc) values(50,'DEVELOPMENT','DETROIT');2.1.2 插⼊带有空值的⾏第⼀种⽅法:省略字段的⽅法:从列的表中忽略有空值的列(例如dept表中有deptno、dname、loc字段,插⼊数据时只需指定deptno、dname字段的值即可)insert into dept(deptno,dname) values(60,'MIS');第⼆种⽅法:明确指定的⽅法:指定null关键字insert into dept values(70,'FINANCE',null);【常见错误】1.对not null约束的列没有插⼊值或插⼊null值2.违反唯⼀约束、check约束3.数据类型不匹配4.值过⼤,超出列的范围2.1.3 插⼊当前⽇期时间 sysdate函数insert into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (7196,'GREEN','SALESMAN',7782,sysdate,2000,null,10); sysdate函数取出当前的⽇期时间insert into emp values(2296,'AROMANO','SALESMAN',7782,TO_DATE('FEB 3,1997','MON DD,YYYY'),1300,null,10);to_char()将指定时间按照指定格式转化为字符串2.1.4 从另⼀张表中拷贝⾏(带有⼦查询的insert语句)insert into emp1 select*from emp where job='MANAGER';【注意】1.不要使⽤values⼦句语句2.⼦查询中的列要与insert⼦句中的列相匹配2.1.5 扩展:insert all多⾏插⼊多张表使⽤⼀张表,向三个表中插⼊数据insert allwhen deptno =10theninto emp10 values(empno,ename,deptno)when deptno =20theninto emp20 values(empno,ename,deptno)when deptno =30theninto emp30 values(empno,ename,deptno)select empno,ename,deptno from emp;2.2 update语句语法:update table_name set column1=value1(,column2=value2...) (where condition);【注意事项】带where条件:修改⼀⾏或者⼏⾏或者所有⾏不带where条件:修改所有⾏2.2.1 修改数据需求:7782号员⼯从10号部门调到20号部门select*from emp where empno=7782;update emp set deptno=20where empno=7782;2.2.2 基于另⼀个表进⾏修改update emp set deptno = (select deptno from emp where empno =7788) where job = (select job from emp where empno =7788); 2.2.3 将值更新为空值update时可以使⽤=nullupdate emp set job=null;也可以使⽤=''update emp set job='';where条件中不能使⽤=null、=''、<>''、<>null,可以⽤is null、is not null2.2.4 关联⼦查询更新需求:更新emp1表中loc列update emp1 e set loc=(select loc from dept d where d.deptno=e.deptno);2.3 delete 语句语法:delete from table_name [where condition];【注意】delete 语句⽤来从数据库的表中删除⾏被删除的⾏是由where⼦句所确定的,如果将where⼦句忽略,那么delete将从表中删除所有的⾏2.3.1 删除数据delete from emp where deptno=10;delete from emp;3 TCL事务控制语⾔数据库事务由以下部分组成:⼀个或多个DML语句⼀个DDL语句⼀个DCL语句数据库事务的开始和结束:以第⼀个DML语句的执⾏作为开始以下⾯的其中之⼀作为结束:-- commit或rollback语句-- DDL或DCL语句(⾃动commit)-- SQL Developer or SQL*Plus⽤户的退出-- 系统崩溃sqlplus 异常中⽌时⾃动进⾏隐式回滚3.1 事务的ACID属性任何关系型数据库都必须能够通过ACID测试:原⼦性:Atomicity ⼀致性:Consistency 隔离性:Isolation 持久性:Durability原⼦性:⼀个事务的所有部分必须都完成,或者都不完成⼀致性:查询的结果必须与数据库在查询开始时的状态⼀致隔离性:除了作出变更的会话,其他会话都⽆法看到未提交的数据持久性:事务⼀旦完成,所有⽤户必须能够⽴刻看到所做的变更,同时数据库必须保证这些变更不会丢失(数据库通过⽇志保持事务的持久性)3.2 commitcommit保存从会话中最后⼀次提交之后对数据库所做的修改commit对数据库作出永久的变动,⼀旦提交之后,这些变动就⽆法再通过rollback语句撤销显⽰提交:commit语句隐式提交:DDL或DCL语句、正常退出Sql*Plus3.2.1 commit或rollback之前的数据状态改变前的数据状态是可以恢复的执⾏DML操作的⽤户可以通过SELECT语句查询之前的修正其他⽤户不能看到当前⽤户所做的改变,直到当前⽤户结束事务DML语句所涉及到的⾏被锁定,其他⽤户不能操作3.2.2 commit 之后的数据状态数据的改变被保存在数据库中以前的数据被覆盖所有⽤户都可以查看结果受影响的⾏上的锁被释放,可供其他⽤户来操作的那些⾏所有保存点都将被删除3.2.3 commit 提交数据3.2.4 隐式提交隐式事务处理⾃动提交会在以下情况中执⾏:DDL语句DCL语句不使⽤COMMIT或ROLLBACK语句提交或回滚,正常结束会话DDL、DCL、正常退出DDL、DCL语句正确执⾏后会隐式commit语法正确的DDL、DCL语句执⾏前会隐式commit隐式提交:⾮“⾃动提交”,Oracle服务器只是按照指令进⾏操作1.执⾏DDL语句时,实现这个DDL命令的源代码包含了⼀个完全正规的commit命令2.SQL*Plus退出命令exit(quit),默认exit commit,可以退出时exit rollback;3.3 rollbackrollback撤销了执⾏该命令的⽤户在指定的会话中对数据库所做的修改rollback不会撤销已经提交过的修改3.3.1 回滚后的数据状态使⽤ROLLBACK语句可使数据变化失效:数据更改都会被撤消数据恢复到以前的状态锁被释放3.3.2 隐式回滚1.异常退出:(点X关闭sqlplus)2.系统崩溃原理:windows平台SQL*Plus关闭窗⼝的代码中嵌⼊了⼀条rollback语句3.4 savepointsavepoint在⼀个事务内建⽴分隔点,使后续的rollback语句可以进⼀步细分能够撤销操作的位置。
MySQL基础教程之DML语句详解⽬录DML 语句1.插⼊记录2.更新记录3.简单查询记录4.删除记录5.查询记录详解(DQL语句)5.1.查询不重复的记录5.2.条件查询5.3.聚合查询5.4.排序查询5.5.limit查询5.6.连表查询5.7.⼦查询5.8.记录联合5.9.select语句的执⾏顺序6.总结DML 语句DML(Data Manipulation Language)语句:数据操纵语句。
⽤途:⽤于添加、修改、删除和查询数据库记录,并检查数据完整性。
常⽤关键字:insert、update、delete、select等。
DML 操作的对象是库表的数据(记录)。
主要包括插⼊(insert)、更新(update)、删除(delete)和查询(select)。
DML 语句是开发⼈员使⽤最频繁的操作。
1.插⼊记录插⼊⼀条记录insert into tablename (field1,field2,...,fieldn) values (value1,value2,...,valuen);⼀次性插⼊多条数据insert into tablename(field1,field2,...,fieldn)values(value1,value2,...,valuen),(value1,value2,...,valuen);2.更新记录更新单表数据update tablename set field1=value1,filed2=value2,...fieldn=valuen [where condition]同时更新多个表的数据update t1,t2,...,tn set t1.field1=expr1,tn.field=exprn [where condition];通常⽤于根据⼀个表的字段来动态地更新另外⼀个表的字段在此说明:中括号 “[ ]” 代表的是可选参数,即可有可⽆的参数。
3.简单查询记录简单的条件查询。
DML语⾔(数据操纵语⾔)#DML语⾔/*数据操作语⾔:插⼊:insert修改:update删除:delete*/#⼀、插⼊语句#⽅式⼀:经典的插⼊/*语法:insert into 表名(列名,...) values(值1,...);*/SELECT * FROM beauty;#1.插⼊的值的类型要与列的类型⼀致或兼容INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id)VALUES(13,'唐艺昕','⼥','1990-4-23','1898888888',NULL,2);#2.不可以为null的列必须插⼊值。
可以为null的列如何插⼊值?#⽅式⼀:INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id)VALUES(13,'唐艺昕','⼥','1990-4-23','1898888888',NULL,2);#⽅式⼆:INSERT INTO beauty(id,NAME,sex,phone)VALUES(15,'娜扎','⼥','1388888888');#3.列的顺序是否可以调换INSERT INTO beauty(NAME,sex,id,phone)VALUES('蒋欣','⼥',16,'110');#4.列数和值的个数必须⼀致INSERT INTO beauty(NAME,sex,id,phone)VALUES('关晓彤','⼥',17,'110');#5.可以省略列名,默认所有列,⽽且列的顺序和表中列的顺序⼀致INSERT INTO beautyVALUES(18,'张飞','男',NULL,'119',NULL,NULL);#⽅式⼆:/*语法:insert into 表名set 列名=值,列名=值,...*/INSERT INTO beautySET id=19,NAME='刘涛',phone='999';#两种⽅式⼤pk ★#1、⽅式⼀⽀持插⼊多⾏,⽅式⼆不⽀持INSERT INTO beautyVALUES(23,'唐艺昕1','⼥','1990-4-23','1898888888',NULL,2),(24,'唐艺昕2','⼥','1990-4-23','1898888888',NULL,2),(25,'唐艺昕3','⼥','1990-4-23','1898888888',NULL,2);#2、⽅式⼀⽀持⼦查询,⽅式⼆不⽀持INSERT INTO beauty(id,NAME,phone)SELECT 26,'宋茜','11809866';INSERT INTO beauty(id,NAME,phone)SELECT id,boyname,'1234567'FROM boys WHERE id<3;#⼆、修改语句/*1.修改单表的记录★语法:update 表名set 列=新值,列=新值,...where 筛选条件;2.修改多表的记录【补充】语法:sql92语法:update 表1 别名,表2 别名set 列=值,...where 连接条件and 筛选条件;sql99语法:update 表1 别名inner|left|right join 表2 别名on 连接条件set 列=值,...where 筛选条件;*/#1.修改单表的记录#案例1:修改beauty表中姓唐的⼥神的电话为138******** UPDATE beauty SET phone = '138********'WHERE NAME LIKE '唐%';#案例2:修改boys表中id好为2的名称为张飞,魅⼒值 10 UPDATE boys SET boyname='张飞',usercp=10WHERE id=2;#2.修改多表的记录#案例 1:修改张⽆忌的⼥朋友的⼿机号为114UPDATE boys boINNER JOIN beauty b ON bo.`id`=b.`boyfriend_id`SET b.`phone`='119',bo.`userCP`=1000WHERE bo.`boyName`='张⽆忌';#案例2:修改没有男朋友的⼥神的男朋友编号都为2号UPDATE boys boRIGHT JOIN beauty b ON bo.`id`=b.`boyfriend_id`SET b.`boyfriend_id`=2WHERE bo.`id` IS NULL;SELECT * FROM boys;#三、删除语句/*⽅式⼀:delete语法:1、单表的删除【★】delete from 表名 where 筛选条件2、多表的删除【补充】sql92语法:delete 表1的别名,表2的别名from 表1 别名,表2 别名where 连接条件and 筛选条件;sql99语法:delete 表1的别名,表2的别名from 表1 别名inner|left|right join 表2 别名 on 连接条件where 筛选条件;⽅式⼆:truncate语法:truncate table 表名;*/#⽅式⼀:delete#1.单表的删除#案例:删除⼿机号以9结尾的⼥神信息DELETE FROM beauty WHERE phone LIKE '%9'; SELECT * FROM beauty;#2.多表的删除#案例:删除张⽆忌的⼥朋友的信息DELETE bFROM beauty bINNER JOIN boys bo ON b.`boyfriend_id` = bo.`id`WHERE bo.`boyName`='张⽆忌';#案例:删除黄晓明的信息以及他⼥朋友的信息DELETE b,boFROM beauty bINNER JOIN boys bo ON b.`boyfriend_id`=bo.`id`WHERE bo.`boyName`='黄晓明';#⽅式⼆:truncate语句#案例:将魅⼒值>100的男神信息删除TRUNCATE TABLE boys ;#delete pk truncate【⾯试题★】/*1.delete 可以加where 条件,truncate不能加2.truncate删除,效率⾼⼀丢丢3.假如要删除的表中有⾃增长列,如果⽤delete删除后,再插⼊数据,⾃增长列的值从断点开始,⽽truncate删除后,再插⼊数据,⾃增长列的值从1开始。
MySQL中的DML语句执行技巧MySQL是一种常用的关系型数据库管理系统,它具有良好的性能和可靠性,被广泛用于各种应用场景。
在MySQL中,数据操作语言(Data Manipulation Language,简称DML)语句用于执行对数据库表中数据的增、删、改操作。
本文将介绍一些MySQL中DML语句的执行技巧,旨在帮助读者快速、有效地操作数据库。
一、插入数据插入数据是使用MySQL的DML语句最常见的操作之一。
在插入数据时,可以使用"INSERT INTO"语句指定要插入数据的表名和要插入的数据值。
例如:```INSERT INTO students(name, age, gender, grade) VALUES('Tom', 18, 'male', 'A');```上述语句将在名为"students"的表中插入一条数据,该数据包括姓名、年龄、性别和年级。
在实际操作中,可以使用占位符的方式插入变量值,以提高代码重用性和安全性。
另外,MySQL还提供了"INSERT INTO ... SELECT"语句,可以实现从一个表中选择部分数据并插入到另一个表中。
这在数据迁移和数据分析等场景中非常有用。
二、更新数据更新数据是在MySQL中执行DML操作的另一个重要方面。
更新数据使用"UPDATE"语句,该语句可以指定要更新的表名、列名以及更新后的值。
例如:```UPDATE students SET grade = 'A+' WHERE name = 'Tom';```上述语句将名为"students"的表中姓名为"Tom"的学生的年级更新为"A+"。
在实际应用中,可以使用"WHERE"子句指定更新条件,以准确、高效地更新数据。
1 DML数据库操作语言DML 可以在下列条件下执行:•向表中插入数据•修改现存数据•删除现存数据在cmd中输入DESC EMP 表输出信息使用INSERT 语句向表中插入数据INSERT INTO 表名[(column1 [, column...])] //括号可以为0 列名V ALUES (value [, value...]); //值1,值2 …..使用这种语法一次只能向表中插入一条数据。
为每一列添加一个新值。
按列的默认顺序列出各个列的值。
在INSERT 子句中随意列出列名和他们的值。
字符和日期型数据应包含在单引号中插入数据的时候应该values 值和字段的类型和数量保持一致INSERT INTO departments(department_id, department_name, manager_id, location_id) VALUES (70, 'Public Relations', 100, 1700); select * from departments第一种方法:insert into departments(DEPARTMENT_ID,DEPARTMENT_NAME,MANAGER_ID,LOCATION_ID) values (120,'eee',206,1700)select * from departments第二种方法:insert into departmentsvalues (121,'eee',206,1700)列可以省略隐式方式: 在列名表中省略该列的值select * from departmentsINSERT INTO departments (department_id,department_name )VALUES(30, 'Purchasing');显示方式: 在VALUES 子句中指定空值。