DML 数据操纵语言
目录
插入数据(INSERT)
# 查看表结构
mysql> desc student;
+----------+---------------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(12) | NO | | NULL | |
| age | tinyint(3) unsigned | NO | | NULL | |
| gender | enum('m','f') | YES | | f | |
| cometime | datetime | YES | | CURRENT_TIMESTAMP | |
| birthday | datetime | YES | | NULL | |
+----------+---------------------+------+-----+-------------------+----------------+
6 rows in set (0.00 sec)
插入数据(不规范)
mysql> insert into student values(1,'小王',78,'f',now(),'1942-07-14');
Query OK, 1 row affected (0.00 sec)
mysql> select * from student;
+----+--------+-----+--------+---------------------+---------------------+
| id | name | age | gender | cometime | birthday |
+----+--------+-----+--------+---------------------+---------------------+
| 1 | 小王 | 78 | f | 2020-07-15 09:21:12 | 1942-07-14 00:00:00 |
+----+--------+-----+--------+---------------------+---------------------+
1 row in set (0.00 sec)
插入数据(规范)
# 1.插入指定列数据
mysql> insert into student(name,age) values('小张','84');
Query OK, 1 row affected (0.00 sec)
mysql> select * from student;
+----+--------+-----+--------+---------------------+---------------------+
| id | name | age | gender | cometime | birthday |
+----+--------+-----+--------+---------------------+---------------------+
| 1 | 小王 | 78 | f | 2020-07-15 09:21:12 | 1942-07-14 00:00:00 |
| 2 | 小王 | 78 | f | 2020-07-15 09:22:27 | 1942-07-14 00:00:00 |
| 3 | 小张 | 84 | f | 2020-07-15 09:24:17 | NULL |
+----+--------+-----+--------+---------------------+---------------------+
3 rows in set (0.00 sec)
# 2.插入指定列数据
mysql> insert into student(name,age,birthday) values('小张','84','1936-02-20');
Query OK, 1 row affected (0.00 sec)
mysql> select * from student;
+----+--------+-----+--------+---------------------+---------------------+
| id | name | age | gender | cometime | birthday |
+----+--------+-----+--------+---------------------+---------------------+
| 1 | 小王 | 78 | f | 2020-07-15 09:21:12 | 1942-07-14 00:00:00 |
| 2 | 小王 | 78 | f | 2020-07-15 09:22:27 | 1942-07-14 00:00:00 |
| 3 | 小张 | 84 | f | 2020-07-15 09:24:17 | NULL |
| 4 | 小张 | 84 | f | 2020-07-15 09:25:22 | 1936-02-20 00:00:00 |
+----+--------+-----+--------+---------------------+---------------------+
4 rows in set (0.00 sec)
插入多条数据(规范)
mysql> insert into student(name,age,birthday) values('小李','18',1936-02-21),('小六','28','1992-01-01');
Query OK, 2 rows affected, 1 warning (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 1
mysql> select * from student;
+----+--------+-----+--------+---------------------+---------------------+
| id | name | age | gender | cometime | birthday |
+----+--------+-----+--------+---------------------+---------------------+
| 1 | 小王 | 78 | f | 2020-07-15 09:21:12 | 1942-07-14 00:00:00 |
| 2 | 小王 | 78 | f | 2020-07-15 09:22:27 | 1942-07-14 00:00:00 |
| 3 | 小张 | 84 | f | 2020-07-15 09:24:17 | NULL |
| 4 | 小张 | 84 | f | 2020-07-15 09:25:22 | 1936-02-20 00:00:00 |
| 5 | 小张 | 84 | f | 2020-07-15 09:28:11 | 1936-02-21 00:00:00 |
| 6 | 小李 | 18 | f | 2020-07-15 09:29:18 | 0000-00-00 00:00:00 |
| 7 | 小李 | 18 | f | 2020-07-15 09:31:07 | 0000-00-00 00:00:00 |
| 8 | 小六 | 28 | f | 2020-07-15 09:31:07 | 1992-01-01 00:00:00 |
+----+--------+-----+--------+---------------------+---------------------+
8 rows in set (0.00 sec)
修改数据(UPDATE)
# 查看表数据
mysql> select * from student;
+----+--------+-----+--------+---------------------+---------------------+
| id | name | age | gender | cometime | birthday |
+----+--------+-----+--------+---------------------+---------------------+
| 1 | 小王 | 78 | f | 2020-07-15 09:21:12 | 1942-07-14 00:00:00 |
| 2 | 小王 | 78 | f | 2020-07-15 09:22:27 | 1942-07-14 00:00:00 |
| 3 | 小张 | 84 | f | 2020-07-15 09:24:17 | NULL |
| 4 | 小张 | 84 | f | 2020-07-15 09:25:22 | 1936-02-20 00:00:00 |
| 5 | 小张 | 84 | f | 2020-07-15 09:28:11 | 1936-02-21 00:00:00 |
| 6 | 小李 | 18 | f | 2020-07-15 09:29:18 | 0000-00-00 00:00:00 |
| 7 | 小李 | 18 | f | 2020-07-15 09:31:07 | 0000-00-00 00:00:00 |
| 8 | 小六 | 28 | f | 2020-07-15 09:31:07 | 1992-01-01 00:00:00 |
+----+--------+-----+--------+---------------------+---------------------+
8 rows in set (0.00 sec)
修改数据
# 使用update语句必须要加where条件
mysql> update student set age=18 where name='小王';
Query OK, 2 rows affected (0.01 sec)
Rows matched: 2 Changed: 2 Warnings: 0
mysql> select * from student;
+----+--------+-----+--------+---------------------+---------------------+
| id | name | age | gender | cometime | birthday |
+----+--------+-----+--------+---------------------+---------------------+
| 1 | 小王 | 18 | f | 2020-07-15 09:21:12 | 1942-07-14 00:00:00 |
| 2 | 小王 | 18 | f | 2020-07-15 09:22:27 | 1942-07-14 00:00:00 |
| 3 | 小张 | 84 | f | 2020-07-15 09:24:17 | NULL |
| 4 | 小张 | 84 | f | 2020-07-15 09:25:22 | 1936-02-20 00:00:00 |
| 5 | 小张 | 84 | f | 2020-07-15 09:28:11 | 1936-02-21 00:00:00 |
| 6 | 小李 | 18 | f | 2020-07-15 09:29:18 | 0000-00-00 00:00:00 |
| 7 | 小李 | 18 | f | 2020-07-15 09:31:07 | 0000-00-00 00:00:00 |
| 8 | 小六 | 28 | f | 2020-07-15 09:31:07 | 1992-01-01 00:00:00 |
+----+--------+-----+--------+---------------------+---------------------+
8 rows in set (0.00 sec)
指定修改数据
# 如果数据库有主键,一定使用主键
mysql> update student set age=88 where name='小王' and cometime='2020-07-15 09:21:12';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> update student set age=88 where id=2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from student;
+----+--------+-----+--------+---------------------+---------------------+
| id | name | age | gender | cometime | birthday |
+----+--------+-----+--------+---------------------+---------------------+
| 1 | 小王 | 88 | f | 2020-07-15 09:21:12 | 1942-07-14 00:00:00 |
| 2 | 小王 | 88 | f | 2020-07-15 09:22:27 | 1942-07-14 00:00:00 |
| 3 | 小张 | 84 | f | 2020-07-15 09:24:17 | NULL |
| 4 | 小张 | 84 | f | 2020-07-15 09:25:22 | 1936-02-20 00:00:00 |
| 5 | 小张 | 84 | f | 2020-07-15 09:28:11 | 1936-02-21 00:00:00 |
| 6 | 小李 | 18 | f | 2020-07-15 09:29:18 | 0000-00-00 00:00:00 |
| 7 | 小李 | 18 | f | 2020-07-15 09:31:07 | 0000-00-00 00:00:00 |
| 8 | 小六 | 28 | f | 2020-07-15 09:31:07 | 1992-01-01 00:00:00 |
+----+--------+-----+--------+---------------------+---------------------+
8 rows in set (0.00 sec)
删除数据(DELETE)
# 1.先查看数据,确认要删除的数据,怎么确定唯一
# 2.使用delete语句也一定要加where条件
mysql> delete from student where id=8;
Query OK, 1 row affected (0.01 sec)
mysql> select * from student;
+----+--------+-----+--------+---------------------+---------------------+
| id | name | age | gender | cometime | birthday |
+----+--------+-----+--------+---------------------+---------------------+
| 1 | 小王 | 88 | f | 2020-07-15 09:21:12 | 1942-07-14 00:00:00 |
| 2 | 小王 | 88 | f | 2020-07-15 09:22:27 | 1942-07-14 00:00:00 |
| 3 | 小张 | 84 | f | 2020-07-15 09:24:17 | NULL |
| 4 | 小张 | 84 | f | 2020-07-15 09:25:22 | 1936-02-20 00:00:00 |
| 5 | 小张 | 84 | f | 2020-07-15 09:28:11 | 1936-02-21 00:00:00 |
| 6 | 小李 | 18 | f | 2020-07-15 09:29:18 | 0000-00-00 00:00:00 |
| 7 | 小李 | 18 | f | 2020-07-15 09:31:07 | 0000-00-00 00:00:00 |
+----+--------+-----+--------+---------------------+---------------------+
7 rows in set (0.00 sec)
# 3.如果就是要清空表
mysql> delete from student where 1=1;
Query OK, 1 row affected (0.01 sec)
# (危险)
truncate table student;
drop table student
案例:UPDATE 代替 DELETE
如果某个学生辍学,数据库中不会真正的删除这个学生的记录,一般通过一个字段判断某个学生是否退学,如下案例,通过 status 的值判断该学生是否在学校上课,如果是 1 则表示在读,是 0 则表示辍学,那么使用 UPDATE 即可实现 “删除” 此学生记录的功能 。
添加状态字段 STATUS
mysql> alter table student add status enum('1','0') default 1;
Query OK, 0 rows affected (0.08 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> select * from student;
+----+--------+-----+--------+---------------------+---------------------+--------+
| id | name | age | gender | cometime | birthday | status |
+----+--------+-----+--------+---------------------+---------------------+--------+
| 1 | 小王 | 88 | f | 2020-07-15 09:21:12 | 1942-07-14 00:00:00 | 1 |
| 2 | 小王 | 88 | f | 2020-07-15 09:22:27 | 1942-07-14 00:00:00 | 1 |
| 3 | 小张 | 84 | f | 2020-07-15 09:24:17 | NULL | 1 |
| 4 | 小张 | 84 | f | 2020-07-15 09:25:22 | 1936-02-20 00:00:00 | 1 |
| 5 | 小张 | 84 | f | 2020-07-15 09:28:11 | 1936-02-21 00:00:00 | 1 |
| 6 | 小李 | 18 | f | 2020-07-15 09:29:18 | 0000-00-00 00:00:00 | 1 |
| 7 | 小李 | 18 | f | 2020-07-15 09:31:07 | 0000-00-00 00:00:00 | 1 |
+----+--------+-----+--------+---------------------+---------------------+--------+
7 rows in set (0.00 sec)
UPDATE 代替 DELETE
# 相当于删除学生
mysql> update student set status='0' where id =2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from student;
+----+--------+-----+--------+---------------------+---------------------+--------+
| id | name | age | gender | cometime | birthday | status |
+----+--------+-----+--------+---------------------+---------------------+--------+
| 2 | 小王 | 88 | f | 2020-07-15 09:22:27 | 1942-07-14 00:00:00 | 0 |
| 3 | 小张 | 84 | f | 2020-07-15 09:24:17 | NULL | 1 |
| 4 | 小张 | 84 | f | 2020-07-15 09:25:22 | 1936-02-20 00:00:00 | 1 |
| 5 | 小张 | 84 | f | 2020-07-15 09:28:11 | 1936-02-21 00:00:00 | 1 |
| 6 | 小李 | 18 | f | 2020-07-15 09:29:18 | 0000-00-00 00:00:00 | 1 |
| 7 | 小李 | 18 | f | 2020-07-15 09:31:07 | 0000-00-00 00:00:00 | 1 |
+----+--------+-----+--------+---------------------+---------------------+--------+
6 rows in set (0.00 sec)
# 相当于学生返校继续读书
mysql> update student set status='1' where id =2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from student;
+----+--------+-----+--------+---------------------+---------------------+--------+
| id | name | age | gender | cometime | birthday | status |
+----+--------+-----+--------+---------------------+---------------------+--------+
| 2 | 小王 | 88 | f | 2020-07-15 09:22:27 | 1942-07-14 00:00:00 | 1 |
| 3 | 小张 | 84 | f | 2020-07-15 09:24:17 | NULL | 1 |
| 4 | 小张 | 84 | f | 2020-07-15 09:25:22 | 1936-02-20 00:00:00 | 1 |
| 5 | 小张 | 84 | f | 2020-07-15 09:28:11 | 1936-02-21 00:00:00 | 1 |
| 6 | 小李 | 18 | f | 2020-07-15 09:29:18 | 0000-00-00 00:00:00 | 1 |
| 7 | 小李 | 18 | f | 2020-07-15 09:31:07 | 0000-00-00 00:00:00 | 1 |
+----+--------+-----+--------+---------------------+---------------------+--------+
6 rows in set (0.00 sec)
记录成长过程