MySQL初级-12-DML增删改

本文最后更新于:2020年7月25日 下午

mysql Ver 14.14 Distrib 5.5.62

文中案例所用数据库下载

12.1 插入语句

12.1.1 方式一

12.1.1.1 语法

INSERT INTO 表名(列名,...) VALUES(值,...);

12.1.1.2 特点

  1. 插入的值的类型要与列的类型一致或兼容。
  2. 不可以为NULL的列必须插入值。可以为NULL的列可以不插入值。
  3. 列的顺序可以颠倒。
  4. 列数和值的个数必须一致。
  5. 若省略列名,默认为所有列插入数据,而且列名的顺序和表中列的顺序一致。

12.1.1.3 示例

  1. 在beauty表中插入数据,id:18,姓名:刘亦菲,性别:女,出生日期:1987-08-15,电话:13032223333,男友id:无。

    INSERT INTO beauty(id,NAME,sex,borndate,phone)
    VALUES(18,'刘亦菲','女','1987-08-15',13032223333);
  1. 在boys表中插入数据,id:5,姓名:胡歌,魅力值:999。

    INSERT INTO boys
    VALUES(5,'胡歌',999);

12.1.2 方式二

12.1.2.1 语法

INSERT INTO 表名
SET 列名=值,列名=值,...

12.1.2.2 示例

  1. 在beauty表中插入数据,id:19,姓名:李若彤,性别:女,出生日期:1973-08-16,电话:18332223333,男友id:无。

    INSERT INTO beauty
    SET id=19,NAME='李若彤',sex='女',borndate='1973-08-16',phone=18332223333;

12.1.3 两种方式比较

  1. 方式一支持插入多行数据,方式二不支持。
  2. 方式一支持子查询,方式二不支持。

12.2 修改语句

12.2.1 修改单表的记录

12.2.1.1 语法

UPDATE 表名
SET 列名1=新值,列名2=新值,...
WHERE 筛选条件;

12.2.1.2 示例

  1. 修改beauty表中姓周的女神的电话为110。

    UPDATE beauty
    SET phone=110
    WHERE NAME LIKE '周%';
  1. 修改boys表中id号为2的男神名为黄渤,魅力值为120。

    UPDATE boys
    SET boyName='黄渤',userCP=120
    WHERE id=2;

12.2.2 修改多表的记录

12.2.2.1 语法

  1. SQL92语法:

    UPDATE1 别名,表2 别名
    SET 列=值,...
    WHERE 连接条件
    AND 筛选条件;
  2. SQL99语法:

    UPDATE1 别名
    INNER|LEFT|RIGHT JOIN2 别名
    ON 连接条件
    SET 列=值,...
    WHERE 筛选条件;

12.2.2.2 示例

  1. 修改张无忌女友的手机号为114。

    #SQL92语法
    UPDATE beauty b,boys bo
    SET b.phone=114
    WHERE b.`boyfriend_id`=bo.`id`
    AND bo.`boyName`='张无忌';
    #SQL99语法
    UPDATE beauty b
    INNER JOIN boys bo
    ON b.`boyfriend_id`=bo.`id`
    SET b.`phone`=114
    WHERE bo.`boyName`='张无忌';
  1. 将beauty表中男朋友编号不在boys表的女神的男朋友编号都改为7。

    UPDATE beauty b
    LEFT JOIN boys bo
    ON b.`boyfriend_id`=bo.`id`
    SET b.`boyfriend_id`=7
    WHERE bo.`id` IS NULL;

12.3 删除语句

12.3.1 方式一

12.3.1.1 语法

  1. 单表的删除。

    DELETE FROM 表名 
    WHERE 筛选条件;
  1. 多表的删除。

    #SQL92语法
    DELETE1的别名,表2的别名
    FROM1 别名,表2 别名
    WHERE 连接条件
    AND 筛选条件;
    #SQL99语法
    DELETE1的别名,表2的别名
    FROM1 别名
    INNER|LEFT|RIGHT JOIN2 别名
    ON 连接条件
    WHERE 筛选条件;

12.3.1.2 示例

  1. 删除手机号以9结尾的女神信息。

    DELETE FROM beauty
    WHERE phone LIKE "%9";
  1. 删除张无忌的女朋友的信息。

    #SQL92语法
    DELETE b
    FROM beauty b,boys bo
    WHERE b.`boyfriend_id`=bo.`id`
    AND bo.`boyName`='张无忌';
    #SQL99语法
    DELETE b
    FROM beauty b
    INNER JOIN boys bo ON b.`boyfriend_id` = bo.`id`
    WHERE bo.`boyName`='张无忌';
  1. 删除黄晓明的信息以及他女朋友的信息。

    #SQL92语法
    DELETE b,bo
    FROM beauty b,boys bo
    WHERE b.`boyfriend_id`=bo.`id`
    AND bo.`boyName`='黄晓明';
    #SQL99语法
    DELETE b,bo
    FROM beauty b
    INNER JOIN boys bo ON b.`boyfriend_id`=bo.`id`
    WHERE bo.`boyName`='黄晓明';

12.3.2 方式二

12.3.2.1 语法

TRUNCATE TABLE 表名;

12.3.2.2 示例

  1. 清空男神表。

    TRUNCATE TABLE boys;

12.3.3 两种方式比较

  1. DELETE可以加WHERE条件,TRUNCATE不行。

  2. TRUNCATE效率略高。

  3. 若要删除的表中有自增长列,

    如果用DELETE删除后,再插入数据,自增长列的值从断点处开始。

    如果用TRUNCATE删除后,再插入数据,自增长列从1开始。

  4. TRUNCATE删除没有返回值,无法查看受影响的行数,DELETE删除有返回值。

  5. TRUNCATE删除不能回滚,DELETE删除可以回滚。


版权声明:自由转载-非商用-非衍生-保持署名 Creative Commons BY-NC-ND 3.0 协议,转载请注明出处!

 目录