zoukankan      html  css  js  c++  java
  • MySQL数据操作(DML)

    表结构准备:

    mysql> CREATE TABLE student(
        ->     sid INT PRIMARY KEY AUTO_INCREMENT,
        ->     sname VARCHAR(10),
        ->     age INT,
        ->     city VARCHAR(10)
        -> );
    Query OK, 0 rows affected (0.08 sec)

    一、数据插入操作

    1.1 向表中所有字段插入数据

    语法:insert into 表名  values (值列表);

    mysql> INSERT INTO student VALUES (NULL,"张三",20,"广州");
    Query OK, 1 row affected (0.03 sec)
    
    mysql> select * from student;
    +-----+--------+------+--------+
    | sid | sname  | age  | city   |
    +-----+--------+------+--------+
    |   1 | 张三   |   20 | 广州   |
    +-----+--------+------+--------+
    1 row in set (0.00 sec)

    注意:值列表必须与表结构中的字段相对应。

    1.2 向表中指定字段插入数据

    语法:insert into 表名 (字段1,字段2,...) values (字段1的值,字段2的值,...);

    mysql> INSERT INTO student(sname,age) VALUES ("李四",22);
    Query OK, 1 row affected (0.03 sec)
    
    mysql> select * from student;
    +-----+--------+------+--------+
    | sid | sname  | age  | city   |
    +-----+--------+------+--------+
    |   1 | 张三   |   20 | 广州   |
    |   2 | 李四   |   22 | NULL   |
    +-----+--------+------+--------+
    2 rows in set (0.00 sec)

    注意:1.values中的值列表需要与前面的字段列表相对应,字段列表的顺序可以与表结构字段的顺序不一致;

    2.如果要插入空值,可以不写字段,或者插入null。

    3.除了数值类型外,其它的字段类型的值必须使用引号引起。(单引号或双引号)

    1.3 向表中同时插入多条数据

    语法:insert into 表名 values (第一条记录的值), (第二条记录的值),...;

    mysql> INSERT INTO student VALUES (NULL,"王五",17,"佛山"),(NULL,"赵六",24,"广州");
    Query OK, 2 rows affected (0.00 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    mysql> select * from student;
    +-----+--------+------+--------+
    | sid | sname  | age  | city   |
    +-----+--------+------+--------+
    |   1 | 张三   |   20 | 广州   |
    |   2 | 李四   |   22 | NULL   |
    |   3 | 王五   |   17 | 佛山   |
    |   4 | 赵六   |   24 | 广州   |
    +-----+--------+------+--------+
    4 rows in set (0.00 sec)

    1.4 向表中插入其它表的查询结果数据

    语法:insert into 表名  select * from 其它表名 [where 条件];

    mysql> CREATE TABLE mystudent LIKE student;
    Query OK, 0 rows affected (2.12 sec)
    
    mysql> INSERT INTO mystudent SELECT * FROM student WHERE age < 20;
    Query OK, 1 row affected (0.09 sec)
    Records: 1  Duplicates: 0  Warnings: 0
    
    mysql> SELECT * FROM mystudent;
    +-----+--------+------+--------+
    | sid | sname  | age  | city   |
    +-----+--------+------+--------+
    |   3 | 王五   |   17 | 佛山   |
    +-----+--------+------+--------+
    1 row in set (0.00 sec)

    1.5 主键冲突替换插入数据

    语法:replace into 表名  values (对应表结构字段的值列表);

    mysql> REPLACE INTO student VALUES (2,"李小龙",22,"佛山");
    Query OK, 2 rows affected (0.00 sec)
    
    mysql> select * from student;
    +-----+-----------+------+--------+
    | sid | sname     | age  | city   |
    +-----+-----------+------+--------+
    |   1 | 张三      |   20 | 广州   |
    |   2 | 李小龙    |   22 | 佛山   |
    |   3 | 王五      |   17 | 佛山   |
    |   4 | 赵六      |   24 | 广州   |
    +-----+-----------+------+--------+
    4 rows in set (0.00 sec)

    注意:虽然replace功能比insert强大,但replace插入比insert的效率要低。

    二、数据更改操作

    语法:update 表名 set 字段名=新的值, 字段名=新的值... where 条件;

    mysql> UPDATE student SET sname = "李四" WHERE sid = 2;
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    mysql> select * from student;
    +-----+--------+------+--------+
    | sid | sname  | age  | city   |
    +-----+--------+------+--------+
    |   1 | 张三   |   20 | 广州   |
    |   2 | 李四   |   22 | 佛山   |
    |   3 | 王五   |   17 | 佛山   |
    |   4 | 赵六   |   24 | 广州   |
    +-----+--------+------+--------+
    4 rows in set (0.00 sec)

    注意:如果不写where条件,将会把所有记录指定的字段更改为相同的值!

    三、数据删除操作

    3.1 删除表中指定数据

    语法:delete from 表名 where 条件;

    PS:此方式为物理删除,知道就行了,不建议使用,实际上一般使用逻辑删除,即使用一个字段(例如is_delete)标记是否删除

    mysql> DELETE FROM student WHERE age > 20;
    Query OK, 2 rows affected (0.00 sec)
    
    mysql> select * from student;
    +-----+--------+------+--------+
    | sid | sname  | age  | city   |
    +-----+--------+------+--------+
    |   1 | 张三   |   20 | 广州   |
    |   3 | 王五   |   17 | 佛山   |
    +-----+--------+------+--------+
    2 rows in set (0.00 sec)

    3.2 删除表中所有数据

    语法:delete from 表名; 

    truncate table 表名;

    mysql> DELETE FROM student;
    Query OK, 2 rows affected (0.00 sec)
    
    mysql> select * from student;
    Empty set (0.00 sec)

    注意:delete方式只删除表中所有数据,不清空auto_increment记录数,

    truncate方式删除表中所有数据,并清空auto_increment记录数。

  • 相关阅读:
    awk 字符串连接操作(字符串转数字,数字转字符串)
    Jenkins配置自动发送邮件,成功!
    可嵌入到网页的实用查询代码
    Windows中打开和关闭FSO文件读写权限的方法
    网站项目模型及业务流程分析
    2个JS版的MD5加密脚本
    申请@msn.com的邮箱最新网址
    成功激励格言精选
    随机切换广告图片
    译自MSDN非常详细的IMG,IFRAME的属性参考手册
  • 原文地址:https://www.cnblogs.com/heqiuyong/p/9302567.html
Copyright © 2011-2022 走看看