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记录数。

 

posted @ 2018-07-12 23:51  heqiuyong  阅读(211)  评论(0编辑  收藏  举报