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 beauty
VALUES(18,'张飞','男', NULL, '119', NULL, NULL);

#方式二:
/*
insert into 表名
set 列名 = 值, 列名 = 值,...
*/

INSERT INTO beauty
SET id = 19, NAME = '刘涛', phone='999';


#两种方式大比较★
#1、方式一一次可以插入多行, 方式二一次只能插入一行
INSERT INTO beauty
VALUES(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表中姓唐的女生的电话修改为为13899888899
UPDATE beauty SET phone = '13899888899'
WHERE NAME LIKE '唐%';

#案例2:将boys表中id号为2的名称改为张飞,魅力值改为10
UPDATE boys SET boyName = '张飞', userCP = 10
WHERE id = 2;

#2、修改多表的记录

#案例 1:将张无忌的女朋友的手机号改为114
#分析:本题中表没有主从之分,用内连接即可
UPDATE boys bo
INNER JOIN beauty b 
ON bo.`id` = b.`boyfriend_id`    #连接两个表
SET b.`phone` = '114'
WHERE bo.`boyName` = '张无忌';

#案例2:将没有男朋友的女生的男朋友的编号都改为2
#分析:女生一定有,男生可能没有,故beauty表为主表
UPDATE boys bo
RIGHT JOIN beauty b 
ON bo.`id` = b.`boyfriend_id`
SET b.`boyfriend_id` = 2 
WHERE bo.`id` IS NULL;

#三、删除语句
/*
方式一: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 表名;
效果:清空整个表
注意:不能跟where语句
*/

#方式一:delete
#1、单表的删除
#案例:删除手机号以9结尾的女生信息
DELETE FROM beauty 
WHERE phone LIKE '%9';


#2、多表的删除
#案例1:删除张无忌的女朋友的信息
DELETE b
FROM beauty b
INNER JOIN boys bo 
ON b.`boyfriend_id` = bo.`id`
WHERE bo.`boyName`='张无忌';


#案例:删除黄晓明以及他女朋友的信息
DELETE b, bo
FROM beauty b
INNER JOIN boys bo 
ON b.`boyfriend_id` = bo.`id`
WHERE bo.`boyName` = '黄晓明';

#方式二:truncate语句
#案例:将所有男生表删除
TRUNCATE TABLE boys;

/*
delete、truncate的比较【面试题★】
    1、删除范围:delete可以删除部分或全部表格,truncate只能删除全部表格
    2、能否跟where条件:delete可以,truncate不可以
    3、效率:truncate > delete
    4、有无返回值:truncate有,delete没有
    5、能否回滚:delete可以,truncate不可以
    6、若要删除的语句中有自增长列,先删除再插入后,自增长列的值从哪里开始?
        delete:从断点开始
        truncate:从1开始。
*/

SELECT * FROM boys;

DELETE FROM boys;

INSERT INTO boys (boyname, usercp)
VALUES('张飞', 100), ('刘备', 100), ('关云长', 100);


TRUNCATE TABLE boys;


 

转载于:https://my.oschina.net/u/4154018/blog/3086285

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值