美文网首页程序员
SQL-DML(12)数据操纵语言

SQL-DML(12)数据操纵语言

作者: 小白201808 | 来源:发表于2018-08-31 09:07 被阅读1次
    数据操纵语言:
     插入:insert
     修改:update
     删除:delete
    

    1.插入语句

    1. 方式一插入的语法:(常用的插入方式)
      insert into 表名(列名1,列名2,...)values(值1,值2...);
      
      方式二插入的语法:(不常用)
      insert into 表名
      set 列名=值,列名=值...
      
    2.注意:(1)插入的值的类型要和列的类型一致或兼容
            (2)不可以为null的列必须插入值。
            (3)列的顺序可以调换,但必须写出列名
            (4)列的个数和值的个数必须一致
            (5)可以省略列名,默认所有列,而且列的顺序和表中列的顺序一致。
    

    √1-1. 小试牛刀(嘻嘻,不要脸)

    案例一:不省略列名,并且不全插

     mysql> insert into beauty (name,sex,borndate,phone,boyfriend_id) values('杨紫','女','1992-11-06',1884626857,6);
    Query OK, 1 row affected (0.24 sec)
    
    mysql> select * from beauty ;                                                                          +----+------------+------+---------------------+-------------+-------+--------------+
    | id | name       | sex  | borndate            | phone       | photo | boyfriend_id |
    +----+------------+------+---------------------+-------------+-------+--------------+
    |  1 | 柳岩       | 女   | 1988-02-03 00:00:00 | 18209876577 | NULL  |            8 |
    |  2 | 苍老师     | 女   | 1987-12-30 00:00:00 | 18219876577 | NULL  |            9 |
    |  3 | Angelababy | 女   | 1989-02-03 00:00:00 | 18209876567 | NULL  |            3 |
    |  4 | 关晓彤     | 女   | 1993-02-03 00:00:00 | 18209876579 | NULL  |            2 |
    |  5 | 周冬雨     | 女   | 1992-02-03 00:00:00 | 18209179577 | NULL  |            9 |
    |  6 | 周芷若     | 女   | 1988-02-03 00:00:00 | 18209876577 | NULL  |            1 |
    |  7 | 岳灵珊     | 女   | 1987-12-30 00:00:00 | 18219876577 | NULL  |            9 |
    |  8 | 小昭       | 女   | 1989-02-03 00:00:00 | 18209876567 | NULL  |            1 |
    |  9 | 双儿       | 女   | 1993-02-03 00:00:00 | 18209876579 | NULL  |            9 |
    | 10 | 王语嫣     | 女   | 1992-02-03 00:00:00 | 18209179577 | NULL  |            4 |
    | 11 | 夏雪       | 女   | 1993-02-03 00:00:00 | 18209876579 | NULL  |            9 |
    | 12 | 赵敏       | 女   | 1992-02-03 00:00:00 | 18209179577 | NULL  |            1 |
    | 13 | 王菲       | 女   | 1969-08-08 00:00:00 | 18202318320 | NULL  |            5 |
    | 14 | 张柏芝     | 女   | 1980-05-24 00:00:00 | 15920424850 | NULL  |            5 |
    | 15 | 杨紫       | 女   | 1992-11-06 00:00:00 | 1884626857  | NULL  |            6 |
    +----+------------+------+---------------------+-------------+-------+--------------+
    15 rows in set (0.00 sec)
    
    

    案例二:省略列名的插入。

    
    mysql> insert into boys values(6,'张一山',666);
    Query OK, 1 row affected (0.21 sec)
    
    mysql> select * from boys;
    +----+-----------+--------+
    | id | boyName   | userCP |
    +----+-----------+--------+
    |  1 | 张无忌    |    100 |
    |  2 | 鹿晗      |    800 |
    |  3 | 黄晓明    |     50 |
    |  4 | 段誉      |    300 |
    |  5 | 谢霆锋    |   1000 |
    |  6 | 张一山    |    666 |
    +----+-----------+--------+
    6 rows in set (0.00 sec)
    
    
    

    案例三:使用语法二的方式插入

    mysql> insert into boys set id = 7 ,boyname = '张翰',usercp = 500;
    Query OK, 1 row affected (0.09 sec)
    
    mysql> select * from boys;
    +----+-----------+--------+
    | id | boyName   | userCP |
    +----+-----------+--------+
    |  1 | 张无忌    |    100 |
    |  2 | 鹿晗      |    800 |
    |  3 | 黄晓明    |     50 |
    |  4 | 段誉      |    300 |
    |  5 | 谢霆锋    |   1000 |
    |  6 | 张一山    |    666 |
    |  7 | 张翰      |    500 |
    +----+-----------+--------+
    7 rows in set (0.00 sec)
    
    

    √ 方式一 PK 方式2

     1.方式一支持多行插入,方式二只支持单行插入
       insert into beauty values(...),(...),(...)...;
     2.方式一 支持子查询,方式二不支持。
      insert into beauty(ID,name,phone)
      select ID  boyname ,'123456' from boys ;
      这样能实现将另一个表的数据插入当前表。
    

    2. 修改语句

    语法:
     1.修改单表的记录(√√√)
      update 表名
      set 列=新值,列=新值,...
      where 筛选条件;
     2.修改多表的记录【补充,了解】(SQL199语法)
      update 表1,别名
      inner/left/right join表2,别名
      on 连接条件
      set 列=值...
      where 筛选条件;     
    

    √ 2-1 练习

    案例一:单表修改练习

    mysql> #将安迪的电话号码修改为‘13102609278’
    mysql> update beauty set phone ='13104209278' where name='安迪';
    Query OK, 1 row affected (0.20 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    mysql> select * from beauty;
    +----+------------+------+---------------------+-------------+-------+--------------+
    | id | name       | sex  | borndate            | phone       | photo | boyfriend_id |
    +----+------------+------+---------------------+-------------+-------+--------------+
    |  1 | 柳岩       | 女   | 1988-02-03 00:00:00 | 18209876577 | NULL  |            8 |
    |  2 | 苍老师     | 女   | 1987-12-30 00:00:00 | 18219876577 | NULL  |            9 |
    |  3 | Angelababy | 女   | 1989-02-03 00:00:00 | 18209876567 | NULL  |            3 |
    |  4 | 关晓彤     | 女   | 1993-02-03 00:00:00 | 18209876579 | NULL  |            2 |
    |  5 | 周冬雨     | 女   | 1992-02-03 00:00:00 | 18209179577 | NULL  |            9 |
    |  6 | 周芷若     | 女   | 1988-02-03 00:00:00 | 18209876577 | NULL  |            1 |
    |  7 | 岳灵珊     | 女   | 1987-12-30 00:00:00 | 18219876577 | NULL  |            9 |
    |  8 | 小昭       | 女   | 1989-02-03 00:00:00 | 18209876567 | NULL  |            1 |
    |  9 | 双儿       | 女   | 1993-02-03 00:00:00 | 18209876579 | NULL  |            9 |
    | 10 | 王语嫣     | 女   | 1992-02-03 00:00:00 | 18209179577 | NULL  |            4 |
    | 11 | 夏雪       | 女   | 1993-02-03 00:00:00 | 18209876579 | NULL  |            9 |
    | 12 | 赵敏       | 女   | 1992-02-03 00:00:00 | 18209179577 | NULL  |            1 |
    | 13 | 王菲       | 女   | 1969-08-08 00:00:00 | 18202318320 | NULL  |            5 |
    | 14 | 张柏芝     | 女   | 1980-05-24 00:00:00 | 15920424850 | NULL  |            5 |
    | 15 | 杨紫       | 女   | 1992-11-06 00:00:00 | 1884626857  | NULL  |            6 |
    | 16 | 安迪       | 女   | 1987-01-01 00:00:00 | 13104209278 | NULL  |         NULL |
    +----+------------+------+---------------------+-------------+-------+--------------+
    16 rows in set (0.00 sec)
    

    案例二:多表修改练习

    mysql> #修改没有男朋友资料的女神的男朋友编号到为6号,哈哈!
    mysql> update beauty left join boys b on boyfriend_id =b.id set boyfriend_id = 7 where b.id is null;
    Query OK, 6 rows affected (0.07 sec)
    Rows matched: 6  Changed: 6  Warnings: 0
    
    mysql> select * from beauty;
    +----+------------+------+---------------------+-------------+-------+--------------+
    | id | name       | sex  | borndate            | phone       | photo | boyfriend_id |
    +----+------------+------+---------------------+-------------+-------+--------------+
    |  1 | 柳岩       | 女   | 1988-02-03 00:00:00 | 18209876577 | NULL  |            7 |
    |  2 | 苍老师     | 女   | 1987-12-30 00:00:00 | 18219876577 | NULL  |            7 |
    |  3 | Angelababy | 女   | 1989-02-03 00:00:00 | 18209876567 | NULL  |            3 |
    |  4 | 关晓彤     | 女   | 1993-02-03 00:00:00 | 18209876579 | NULL  |            2 |
    |  5 | 周冬雨     | 女   | 1992-02-03 00:00:00 | 18209179577 | NULL  |            7 |
    |  6 | 周芷若     | 女   | 1988-02-03 00:00:00 | 18209876577 | NULL  |            1 |
    |  7 | 岳灵珊     | 女   | 1987-12-30 00:00:00 | 18219876577 | NULL  |            7 |
    |  8 | 小昭       | 女   | 1989-02-03 00:00:00 | 18209876567 | NULL  |            1 |
    |  9 | 双儿       | 女   | 1993-02-03 00:00:00 | 18209876579 | NULL  |            7 |
    | 10 | 王语嫣     | 女   | 1992-02-03 00:00:00 | 18209179577 | NULL  |            4 |
    | 11 | 夏雪       | 女   | 1993-02-03 00:00:00 | 18209876579 | NULL  |            7 |
    | 12 | 赵敏       | 女   | 1992-02-03 00:00:00 | 18209179577 | NULL  |            1 |
    | 13 | 王菲       | 女   | 1969-08-08 00:00:00 | 18202318320 | NULL  |            5 |
    | 14 | 张柏芝     | 女   | 1980-05-24 00:00:00 | 15920424850 | NULL  |            5 |
    | 15 | 杨紫       | 女   | 1992-11-06 00:00:00 | 1884626857  | NULL  |            6 |
    | 16 | 安迪       | 女   | 1987-01-01 00:00:00 | 13104209278 | NULL  |            7 |
    +----+------------+------+---------------------+-------------+-------+--------------+
    16 rows in set (0.00 sec)
    
    

    3. 删除语句

     方式一:delete
     1.单表删除(√√√)
     语法  :
     delete from 表名 where 筛选条件
     2.多表的删除【补充了解 以199语法为标准】
     语法  :
     delete 表1别名,表2别名
     from 表1 别名
     inner/left/right join 表2 别名 on 连接条件
     where 筛选条件;
      
     方式二:truncate
     语法:truncate table 表名;
    

    √ 3-1 练习

    案例一:单表删除

    #删除手机号以8结尾的女神信息(结果把安迪给删了)
    mysql> delete from beauty where phone like '%8';
    Query OK, 1 row affected (0.35 sec)
    
    mysql> select * from beauty;
    +----+------------+------+---------------------+-------------+-------+--------------+
    | id | name       | sex  | borndate            | phone       | photo | boyfriend_id |
    +----+------------+------+---------------------+-------------+-------+--------------+
    |  1 | 柳岩       | 女   | 1988-02-03 00:00:00 | 18209876577 | NULL  |            7 |
    |  2 | 苍老师     | 女   | 1987-12-30 00:00:00 | 18219876577 | NULL  |            7 |
    |  3 | Angelababy | 女   | 1989-02-03 00:00:00 | 18209876567 | NULL  |            3 |
    |  4 | 关晓彤     | 女   | 1993-02-03 00:00:00 | 18209876579 | NULL  |            2 |
    |  5 | 周冬雨     | 女   | 1992-02-03 00:00:00 | 18209179577 | NULL  |            7 |
    |  6 | 周芷若     | 女   | 1988-02-03 00:00:00 | 18209876577 | NULL  |            1 |
    |  7 | 岳灵珊     | 女   | 1987-12-30 00:00:00 | 18219876577 | NULL  |            7 |
    |  8 | 小昭       | 女   | 1989-02-03 00:00:00 | 18209876567 | NULL  |            1 |
    |  9 | 双儿       | 女   | 1993-02-03 00:00:00 | 18209876579 | NULL  |            7 |
    | 10 | 王语嫣     | 女   | 1992-02-03 00:00:00 | 18209179577 | NULL  |            4 |
    | 11 | 夏雪       | 女   | 1993-02-03 00:00:00 | 18209876579 | NULL  |            7 |
    | 12 | 赵敏       | 女   | 1992-02-03 00:00:00 | 18209179577 | NULL  |            1 |
    | 13 | 王菲       | 女   | 1969-08-08 00:00:00 | 18202318320 | NULL  |            5 |
    | 14 | 张柏芝     | 女   | 1980-05-24 00:00:00 | 15920424850 | NULL  |            5 |
    | 15 | 杨紫       | 女   | 1992-11-06 00:00:00 | 1884626857  | NULL  |            6 |
    +----+------------+------+---------------------+-------------+-------+--------------+
    15 rows in set (0.00 sec)
    

    案例二:多表删除

    #删除张无忌以及他女盆友的信息
    mysql> delete bf, gf from beauty gf join boys bf on bf.id = gf.boyfriend_id where bf.boyname = '张无忌';
    Query OK, 4 rows affected (0.11 sec)
    
    mysql> select * from beauty;
    +----+------------+------+---------------------+-------------+-------+--------------+
    | id | name       | sex  | borndate            | phone       | photo | boyfriend_id |
    +----+------------+------+---------------------+-------------+-------+--------------+
    |  1 | 柳岩       | 女   | 1988-02-03 00:00:00 | 18209876577 | NULL  |            7 |
    |  2 | 苍老师     | 女   | 1987-12-30 00:00:00 | 18219876577 | NULL  |            7 |
    |  3 | Angelababy | 女   | 1989-02-03 00:00:00 | 18209876567 | NULL  |            3 |
    |  4 | 关晓彤     | 女   | 1993-02-03 00:00:00 | 18209876579 | NULL  |            2 |
    |  5 | 周冬雨     | 女   | 1992-02-03 00:00:00 | 18209179577 | NULL  |            7 |
    |  7 | 岳灵珊     | 女   | 1987-12-30 00:00:00 | 18219876577 | NULL  |            7 |
    |  9 | 双儿       | 女   | 1993-02-03 00:00:00 | 18209876579 | NULL  |            7 |
    | 10 | 王语嫣     | 女   | 1992-02-03 00:00:00 | 18209179577 | NULL  |            4 |
    | 11 | 夏雪       | 女   | 1993-02-03 00:00:00 | 18209876579 | NULL  |            7 |
    | 13 | 王菲       | 女   | 1969-08-08 00:00:00 | 18202318320 | NULL  |            5 |
    | 14 | 张柏芝     | 女   | 1980-05-24 00:00:00 | 15920424850 | NULL  |            5 |
    | 15 | 杨紫       | 女   | 1992-11-06 00:00:00 | 1884626857  | NULL  |            6 |
    +----+------------+------+---------------------+-------------+-------+--------------+
    12 rows in set (0.00 sec)
    
    mysql> select * from boys;
    +----+-----------+--------+
    | id | boyName   | userCP |
    +----+-----------+--------+
    |  2 | 鹿晗      |    800 |
    |  3 | 黄晓明    |     50 |
    |  4 | 段誉      |    300 |
    |  5 | 谢霆锋    |   1000 |
    |  6 | 张一山    |    666 |
    |  7 | 张翰      |    500 |
    +----+-----------+--------+
    6 rows in set (0.00 sec)
    
     
    

    案例三:方式二:truncate(清除整个表的内容,慎用哦!嘻嘻,我复制了boys表并命名为boy_2再删除复制的表)

    mysql> select * from boys_2;
    +----+-----------+--------+
    | id | boyName   | userCP |
    +----+-----------+--------+
    |  2 | 鹿晗      |    800 |
    |  3 | 黄晓明    |     50 |
    |  4 | 段誉      |    300 |
    |  5 | 谢霆锋    |   1000 |
    |  6 | 张一山    |    666 |
    |  7 | 张翰      |    500 |
    +----+-----------+--------+
    6 rows in set (0.00 sec)
    
    mysql> truncate boys_2;
    Query OK, 0 rows affected (0.15 sec)
    
    mysql> select * from boys_2;
    Empty set (0.01 sec)
    
    mysql> desc boys_2;
    +---------+-------------+------+-----+---------+-------+
    | Field   | Type        | Null | Key | Default | Extra |
    +---------+-------------+------+-----+---------+-------+
    | id      | int(11)     | NO   |     | 0       |       |
    | boyName | varchar(20) | YES  |     | NULL    |       |
    | userCP  | int(11)     | YES  |     | NULL    |       |
    +---------+-------------+------+-----+---------+-------+
    3 rows in set (0.06 sec)
    
    
    
    ???我想知道竟然有delete from 表名了,为啥需要这种truncate 表名 的操作呢?他们都可以删除整个表的内容呀!!!
    ——> 欸,我好像发现一点不同了耶,一个删除有返回值,一个没有返回值.
    mysql> truncate boys_2;
    Query OK, 0 rows affected (0.15 sec)
    
    mysql> delete from boys_2;
    Query OK, 6 rows affected (0.15 sec)
    

    √ delete PK truncate(√√√)

     1.delete 可以加where条件,truncate 不可以。
     2.truncate 删除,效率高那么一丢丢.
     3.假如要删除的表中有自增长列,用delete删除后,再插入数据,自增长列的值从断点开始。而用truncate 删除后,再插入数据,自增长列的值从‘1’开始。
     4.truncate删除没有返回值,delete删除有返回值。
     5.truncate 删除不能回滚,delete 删除可以回滚。(事务那块会说到)
    
    突然觉得truncate删除有点神不知鬼不觉地删除你,更加彻底,不留痕迹,咳咳...

    注:这是本人的学习笔记及练习,如果有错误的地方望指出一起讨论,谢谢!

    相关文章

      网友评论

        本文标题:SQL-DML(12)数据操纵语言

        本文链接:https://www.haomeiwen.com/subject/foxrwftx.html