第5篇:DML常见操作

第5篇:DML常见操作

DML(Data Manipulation Language)数据操作语⾔,以INSERT、UPDATE、DELETE三种指
令为核⼼,分别代表插⼊、更新与删除,是必须要掌握的指令,DML和SQL中的select熟
称CRUD(增删改查)。

插入数据

插入单行数据
方式1:
INSERT INTO 表名[(字段1,字段2,...) VALUES(值1,值2,...)];
    说明:
    值和字段要一一对应
    若是字符型和日期类型需要用单引号引起来
    字段和值的个数必须一致,一一对应
    字段如果不能为空,则必须插入值
    可以为空的字段可以不用插入值,但需要注意:字段和值都不写;或字段写上,值为NULL
    若要为所有字段插入值,则表名后的字段不写,VALUE后按顺序写所有的值
    
INSERT INTO mytest1
VALUES
	( '李四', 16, 'm' );
    
方式2:
INSERT INTO 表名 SET 字段 = 值,字段=值;
建议使用方式1
批量插入数据
方式1:
INSERT INTO 表名[(字段,字段)] VALUE (值,值),(值,值),(值,值),...;

例如:
INSERT INTO mytest1
VALUES
	( '小张', 16, 'm' ), 
	( '张三', 22, 'm' ),
	( '小李', 45, 'm' ),
	( '小王', 99, 'f' );

方式2:
INSERT INTO 表[(字段,字段)] 数据来源SELECT语句;
INSERT INTO test2(c1,c2) SELECT * FROM test1;
INSERT INTO test2(c2,c3) SELECT a,b FROM test1;

    说明:
    数据来源select语句可以有很多种写法,需要注意:select返回的结果和插⼊数据
    的字段数量、顺序、类型需要⼀致。
    将SELECT语句查询出来的数据插入到前一个表中,这里需要注意的是查询出来的数据与要插入表字段数的应该是完全一致的,比如查询两个字段的值,插入的也应该是两个字段,要是插入的是三个字段就会报错。

更新数据

单表更新
UPDATE 表名[[as] 别名] SET [别名.]字段=值,[别名.]字段=值,...;
    有些表名可能名称⽐较长,为了⽅便操作,可以给这个表名起个简单的别名,更⽅便操作⼀些。
    如果⽆别名的时候,表名就是别名。
    跟新的时候如果不加条件就会将所选字段的所有值都改成要改的值,若是想要修改部分的值,就需要在更新语句之后加WHERE子句限制更改的范围
多表更新
更新多个表中的数据
UPDATE 表1[[as] 别名1],表名2[[as] 别名2],... SET [别名.]字段=值,[别名.]字段=值,...;

建议采⽤单表⽅式更新,⽅便维护

删除数据

使用DELETE删除
DELETE单表删除
DELETE [别名] FROM 表名[[as] 别名] [WHERE 条件];
    注意:
    如果⽆别名的时候,表名就是别名
    如果有别名,delete后⾯必须写别名
    如果没有别名,delete后⾯的别名可以省略不写。
示例
    -- 删除test1表所有记录
    delete from test1;
    -- 删除test1表所有记录
    delete test1 from test1;
    -- 有别名的⽅式,删除test1表所有记录
    delete t1 from test1 t1;
    -- 有别名的⽅式删除满⾜条件的记录
    delete t1 from test1 t1 where t1.a>100;
    删除也一样,不加WHERE子句的情况下默认删除的是选中字段的所有值.
多表删除
DELETE [别名1,别名2] FROM 表1 [[as] 别名1],表2 [[as] 别名2] [WHERE 条件];
示例:
	delete t1 from test1 t1,test2 t2 where t1.a=t2.c2;
	删除test1表中的记录,条件是这些记录的字段a在test.c2中存在的记录
    delete t2,t1 from test1 t1,test2 t2 where t1.a=t2.c2;
    同时对2个表进⾏删除,条件是test.a=test.c2的记录
使用TURNCATE删除
TRUNCATE 表名;
DROP TRUNCATE DELETE区别
• drop (删除表):删除内容和定义,释放空间,简单来说就是把整个表去掉,以后要
新增数据是不可能的,除⾮新增⼀个表。
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引
(index),依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。
如果要删除表定义及其数据,请使⽤ drop table 语句。
• truncate (清空表中的数据):删除内容、释放空间但不删除定义(保留表的数据结
构),与drop不同的是,只是清空表数据⽽已。
注意:truncate不能删除具体⾏数据,要删就要把整个表清空了。
• delete (删除表中的数据):delete 语句⽤于删除表中的⾏。delete语句执⾏删除的过
程是每次从表中删除⼀⾏,并且同时将该⾏的删除操作作为事务记录在⽇志中保存,
以便进⾏进⾏回滚操作。
truncate与不带where的delete :只删除数据,⽽不删除表的结构(定义)
truncate table 删除表中的所有⾏,但表结构及其列、约束、索引等保持不变。
对于由foreign key约束引⽤的表,不能使⽤truncate table ,⽽应使⽤不带where⼦句
的delete语句。由于truncate table 记录在⽇志中,所以它不能激活触发器。
delete语句是数据库操作语⾔(dml),这个操作会放到 rollback segement 中,事务提
交之后才⽣效;如果有相应的 trigger,执⾏的时候将被触发。
truncate、drop 是数据库定义语⾔(ddl),操作⽴即⽣效,原数据不放到 rollback
segment 中,不能回滚,操作不触发 trigger。
如果有⾃增列,truncate⽅式删除之后,⾃增列的值会被初始化,delete⽅式要分情
况(如果数据库被重启了,⾃增列值也会被初始化,数据库未被重启,则不变)
• 如果要删除表定义及其数据,请使⽤ drop table 语句
• 安全性:⼩⼼使⽤ drop 和 truncate,尤其没有备份的时候,否则哭都来不及
• 删除速度,⼀般来说: drop> truncate > delete
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值