ch04-操作数据-DML语句
数据库DML操作(DCL了解)

数据库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语句处理数据-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语句详解

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(Data Manipulation Language)数据操纵语言

DML(Data Manipulation Language)数据操纵语言命令使用户能够查询数据库以及操作已有数据库中的数据。
如insert,delete,update,select(插入、删除、修改、检索)等都是DML.
INSERT 陈述式
用来在资料表或检视表中插入一列资料。例如,如果要在Customer_Data 资料表中新增一个客户,可使用类似以下的 INSERT 陈述式:
INSERT INTO Customer_Data
VALUES (777, "Frankie", "Stein", "4895873900")
注意:如果使用这种形式的 INSERT 陈述式,但被插入的数值次序上与建立资料表时不同,数值将被放入错误的资料行。如果资料的型别与定义不符,则会收到一个错误讯息。
E 陈述式
DELETE 陈述式用来删除资料表中一列或多列的资料,您也可以删除资料表中的所有资料列。要从 Customer_Data 资料表中删除所有的列,您可以利用下列陈述式:
DELETE FROM Customer_Data
或
DELETE Customer_Data
UPDATE Customer_Data
SET phone= 02145896352
WHERE customer_id = 100;
与之相关的概念:DDL
DDL(Data Definition Language)语句用语定义和管理数据库中的对象,如Create,Alter和Drop.
UPDATE陈述式
用来对资料表中的一行或多行进行数据的修改,您也可以修改资料表中的所有资料行。要从Customer_Data资料表中更改所有行,您可以利用下列陈述式:
ch04-指令系统

据相互交换。 (5条)
– – – – – XCH A, Rn XCH A, @Ri XCH A, direct XCHD A, @Ri SWAP A
堆栈操作指令
– PUSH direct • 先将堆栈指针SP的内容加1, 然后将direct 所指字节单元的内容送入SP所指内部RAM 单元;
40
逻辑与指令
用法(格式):ANL Dest , Source
– ANL A, Rn
– – – – – ANL ANL ANL ANL ANL A, direct A, @Ri A, #data direct, A direct, #data
A
B
Y
0
0 1
0
1 0
0
0 0
功能:Dest Dest & Source。
程序存储器数据传送指令
(1)指令格式 – 格式:MOVC A,[源字节] – MOVC A, @A+DPTR – MOVC A, @A+PC (2)操作数:目的操作数只能是累加器
A,源操作数则采用变址寻址方式。寄存 器 间 接 地 址 只 能 是 @A+DPTR 和 @A+PC 。
数据交换类指令
内部RAM之间的数据传送指令
共5条: – MOV direct1, direct2 – MOV direct , Rn – MOV Rn , direct – MOV direct ,@Ri – MOV @Ri ,direct
与累加器A有关的数据传送指令
共6条: – MOV A,Rn – MOV Rn , A – MOV A,direct – MOV direct , A – MOV A,@Ri – MOV @Ri , A
DML语言(数据操纵语言)

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开始。
ch04-操作数据-DML语句
50 DEVELOPMENT DETROIT
INSERT语句
使用 INSERT 语句向表中增加新行.
INSERT INTO VALUES table [(column [, column...])] (value [, value...]);
使用这种方法只能一次插入一行数据.
插入新行
插入包含每一个列值的新行. 按缺省顺序列出表中所有的列值. 列出 INSERT 子句中所有的列.
(SELECT FROM WHERE (SELECT FROM WHERE deptno emp empno = 7788) job emp empno = 7788);
修改行: 完整性约束错误
SQL> UPDATE 2 SET 3 WHERE
emp deptno = 55 deptno = 10;
VALUES
插入特殊的日期值
增加一个新的员工.
SQL> INSERT INTO 2 VALUES 3 4 1 row created. emp (2296,'AROMANO','SALESMAN',7782, TO_DATE('FEB 3, 1997', 'MON DD, YYYY'), 1300, NULL, 10);
UPDATE SET [WHERE table column = value [, column = value, ...] condition];
如果需要,可以一次更改多行.
更改表中的行
使用 WHERE 子句来指定要修改的行.
SQL> UPDATE emp 2 SET deptno = 20 3 WHERE empno = 7782; 1 row updated.
MySQL中的DML语句执行技巧
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"子句指定更新条件,以准确、高效地更新数据。
DML数据操作语言
添加多条语句:insert into 表名(字段名....) select 内容 [nuion select 值[union]];
将A表列插入到B表(已知):insert into BM(B)(列名) select [列名 ...] from BM(A);
(一)、DML(数据操作语言)用于操作数据库对象中所包含的数据
包括 :INSERT(添加数据语言)
UPDATE(更新数据语言)
DELETE(删除数据语言)
一、添加数据
INSERT命令 语法:
INSERT INTO 表名[(字段1,字段2,...)] VALUES(“值1”,“值2”...);
START TRANSACTION:开始一个事务,标记事务的起始点
COMMIT:提交一个事务给数据库
ROLLBACK:(如有问题)将事务回滚(之前做的作废),数据回到本次事务的初始状态
SET AUTOCOMMIT =1:还原数据库的自动提交
将A表列插入到B表(未知):select 列名 into BM(B) from BM(A);
二、修改数据
UPDATE 命令语法:
UPDATE 表名 SET column_name=valve[,coumn_name2=value,...]
[where condition];
持久性(Durable)数据永久
二、事务的实现方法
改变自动提交模式:
SET AUTOCOMMIT =0;#关闭自动提交模式
SET AUTOCOMMIT =1;#开启自动提交模式
DML 数据操作语言
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 子句中指定空值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
deptno dept dname ='SALES');
删除行: 完整性约束错误
SQL> DELETE FROM 2 WHERE dept deptno = 10;
DELETE FROM dept * ERROR at line 1: ORA-02292: integrity constraint (USR.EMP_DEPTNO_FK) violated - child record found
明确的方法: 指定 NULL 关键字.
INSERT INTO VALUES dept (70, 'FINANCE', NULL);
插入特殊的值
GETDATE()函数取出当前的日期的 时间.
INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) (7196, 'GREEN', 'SALESMAN', 7782, GETDATE(), 2000, NULL, 10);
EMP
EMPNO ENAME 7839 7698 7782 7566 ... KING BLAKE CLARK JONES JOB PRESIDENT MANAGER MANAGER MANAGER ... DEPTNO 10 30 20 10 20
UPDATE 语句
使用 UPDATE 语句更改现有的行.
50 DEVELOPMENT DETROIT
INSERT语句
使用 INSERT 语句向表中增加新行.
INSERT INTO VALUES table [(column [, column...])] (value [, value...]);
使用这种方法只能一次插入一行数据.
插入新行
插入包含每一个列值的新行. 按缺省顺序列出表中所有的列值. 列出 INSERT 子句中所有的列.
INSERT INTO VALUES dept (deptno, dname, loc) (50, 'DEVELOPMENT', 'DETROIT');
日期值和字符值要用单引号括起来.
插入带有空值的行
省略的方法: 从列的链表忽略有空值的列.
INSERT INTO VALUES dept (deptno, dname ) (60, 'MIS');
子查询中的列要与INSERT子句中的列 相匹配.
改变一个表中的数据
EMP
EMPNO ENAME 7839 7698 7782 7566 ... KING BLAKE CLARK JONES JOB PRESIDENT MANAGER MANAGER MANAGER ... DEPTNO 10 “…更改EMP 表中的一行 30 数据…” 10 20
总结
语句 INSERT 描述 向表中增加一个新的行
UPDATE
DELETE
更改表中现存的行
从表中删除现存的行
UPDATE SET [WHERE table column = value [, column = value, ...] condition];
如果需要,可以一次更改多行.
更改表中的行
使用 WHERE 子句来指定要修改的行.
SQL> UPDATE emp 2 SET deptno = 20 3 WHERE empno = 7782; 1 row updated.
创建带有子查询的 INSERT语句。
INSERT INTO managers(id, name, salary, hiredate) SELECT empno, ename, sal, hiredate FROM emp WHERE job = 'MANAGER';
不要使用 VALUES 子句.
操作数据-DML语句
目标
ห้องสมุดไป่ตู้结束本节课后,应当达到如下目标:
描述每个DML语句 向一个表中插入数据
更新一个表中数据行
从一个表中删除行
数据操作语言
DML语句在下列情况下发生:
往一个表中增加新行
更改一个表中现有的行
从一个表中删除掉现有的行
向一个表中增加新行
50 DEVELOPMENT DETROIT
可以使用 DELETE 语句从表中删去现 存的行.
DELETE [FROM] [WHERE table condition];
从一个表中删去行
使用 WHERE 子句以指定哪些行应当被 删去.
SQL> DELETE FROM 2 WHERE 1 row deleted. department dname = 'DEVELOPMENT';
UPDATE emp * ERROR at line 1: ORA-02291: integrity constraint (USR.EMP_DEPTNO_FK) violated - parent key not found
从一个表中移去一行
DEPT
DEPTNO -----10 20 30 40 50 60 ... DNAME ---------ACCOUNTING RESEARCH SALES OPERATIONS LOC -------NEW YORK DALLAS CHICAGO BOSTON DEVELOPMENT DETROIT MIS
新行
“…向 DEPT 表中 增加新行…”
DEPT
DEPTNO -----10 20 30 40 DNAME ---------ACCOUNTING RESEARCH SALES OPERATIONS LOC -------NEW YORK DALLAS CHICAGO BOSTON
DEPT
DEPTNO -----10 20 30 40 DNAME ---------ACCOUNTING RESEARCH SALES OPERATIONS LOC -------NEW YORK DALLAS CHICAGO BOSTON
VALUES
插入特殊的日期值
增加一个新的员工.
SQL> INSERT INTO 2 VALUES 3 4 1 row created. emp (2296,'AROMANO','SALESMAN',7782, TO_DATE('FEB 3, 1997', 'MON DD, YYYY'), 1300, NULL, 10);
• 检验结果.
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ------- -------- ---- --------- ---- ---- -----2296 AROMANO SALESMAN 7782 03-FEB-97 1300 10
从另一个表中拷贝行
如果忽略WHERE子句,那么句子中所有 SQL> UPDATE employee 2 的值都将被更改. SET deptno = 20;
14 rows updated.
对基于另一个表的行进行更改
在 UPDATE语句中,使用子查询来进 行更改,更改的数据与其它表中的数据 有关.
SQL> UPDATE employee 2 SET deptno = 3 4 5 WHERE job = 6 7 2 rows updated.
“…从一个表中删去一行 …”
DEPT
DEPTNO -----10 20 30 40 60 ... DNAME ---------ACCOUNTING RESEARCH SALES OPERATIONS MIS LOC -------NEW YORK DALLAS CHICAGO BOSTON
DELETE语句
(SELECT FROM WHERE (SELECT FROM WHERE deptno emp empno = 7788) job emp empno = 7788);
修改行: 完整性约束错误
SQL> UPDATE 2 SET 3 WHERE
emp deptno = 55 deptno = 10;
如果忽略WHERE 子句,那么表中所有 SQL> DELETE FROM department; 的数据. 4 rows deleted.
参照另一个表来删除行
使用子查询,使得 DELETE 语句能从 另一个表中删除某些行.
SQL> DELETE FROM 2 WHERE 3 4 5 6 rows deleted. employee deptno = (SELECT FROM WHERE