MySQL基础回顾(五):数据的插入,修改和删除

插入insert,修改update和删除delete都属于数据操纵语言DML。

建表

mysql> CREATE TABLE IF NOT EXISTS `student1` (
    -> `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
    -> `name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
    -> `password` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
    -> `sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
    -> `birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
    -> `address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
    -> `email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
    ->  PRIMARY KEY (`id`)
    -> )ENGINE=INNODB DEFAULT CHARSET=utf8
    -> ;
Query OK, 0 rows affected (0.04 sec)
mysql> desc student1;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(4)       | NO   | PRI | NULL    | auto_increment |
| name     | varchar(30)  | NO   |     | 匿名    |                |
| password | varchar(20)  | NO   |     | 123456  |                |
| sex      | varchar(2)   | NO   |     ||                |
| birthday | datetime     | YES  |     | NULL    |                |
| address  | varchar(100) | YES  |     | NULL    |                |
| email    | varchar(50)  | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)
mysql> select * from student1;
Empty set (0.00 sec)        -- 可以看到目前为止是一个空表

一、插入insert

1.基本语法

 insert into 表名(字段名1,字段名2,字段名3) values(1,值2,值3)

2.示例1:单行数据,全列插入

这种方式插入时,可以不写字段名,但是后面插入的值要写全,每个字段要赋的值都要写。

mysql> insert into `student1` values(1,'张三','123456','男','1998-1-1','北京海淀区中关村大街1号','123@qq.com');
Query OK, 1 row affected (0.00 sec)

插完之后查询一下:

mysql> select * from student1;
+----+--------+----------+-----+---------------------+------------------------------------+------------+
| id | name   | password | sex | birthday            | address                            | email      |
+----+--------+----------+-----+---------------------+------------------------------------+------------+
|  1 | 张三   | 123456   || 1998-01-01 00:00:00 | 北京海淀区中关村大街1| 123@qq.com |
+----+--------+----------+-----+---------------------+------------------------------------+------------+
1 row in set (0.00 sec)

3.示例2:单行数据,指定列插入

插入的数据要与指定的字段相匹配

mysql> insert into `student1`(name,password) values('李四','123456');
Query OK, 1 row affected (0.01 sec)

插完查询一下:

mysql> select * from student1;
+----+--------+----------+-----+---------------------+------------------------------------+------------+
| id | name   | password | sex | birthday            | address                            | email      |
+----+--------+----------+-----+---------------------+------------------------------------+------------+
|  1 | 张三   | 123456   || 1998-01-01 00:00:00 | 北京海淀区中关村大街1| 123@qq.com |
|  2 | 李四   | 123456   || NULL                | NULL                               | NULL       |
+----+--------+----------+-----+---------------------+------------------------------------+------------+
2 rows in set (0.00 sec)

4.示例3:多行数据,指定列插入

同样,插入的数据要与指定的字段相匹配。

mysql> insert into `student1`(name,password) values('王五','123456'),('faker','123456');
Query OK, 2 rows affected (0.00 sec)

插完查询一下:

mysql> select * from student1;
+----+--------+----------+-----+---------------------+------------------------------------+------------+
| id | name   | password | sex | birthday            | address                            | email      |
+----+--------+----------+-----+---------------------+------------------------------------+------------+
|  1 | 张三   | 123456   || 1998-01-01 00:00:00 | 北京海淀区中关村大街1| 123@qq.com |
|  2 | 李四   | 123456   || NULL                | NULL                               | NULL       |
|  3 | 王五   | 123456   || NULL                | NULL                               | NULL       |
|  4 | faker  | 123456   || NULL                | NULL                               | NULL       |
+----+--------+----------+-----+---------------------+------------------------------------+------------+
4 rows in set (0.00 sec)

5.insert小结
insert插入上面说了三种方法,其实都一样,记住一个点就行了:数据和字段一定要一一对应。多行插入时values后面的值要用逗号隔开,values(…),(…)。

二、修改update

1.基本语法:

 update 表名 set 列字段=values[列字段=values...]  where 条件

2.示例1
将id为1的同学,姓名改为阿卡丽。

mysql> UPDATE `STUDENT1` SET `name`='阿卡丽' WHERE id=1;
Query OK, 1 row affected (0.01 sec)

改完查询:

mysql> select * from student1;
+----+-----------+----------+-----+---------------------+------------------------------------+------------+
| id | name      | password | sex | birthday            | address                            | email      |
+----+-----------+----------+-----+---------------------+------------------------------------+------------+
|  1 | 阿卡丽    | 123456   || 1998-01-01 00:00:00 | 北京海淀区中关村大街1| 123@qq.com |
|  2 | 李四      | 123456   || NULL                | NULL                               | NULL       |
|  3 | 王五      | 123456   || NULL                | NULL                               | NULL       |
|  4 | faker     | 123456   || NULL                | NULL                               | NULL       |
+----+-----------+----------+-----+---------------------+------------------------------------+------------+
4 rows in set (0.00 sec)

3.在示例1的基础上不加where会怎么样呢?

mysql> UPDATE `STUDENT1` SET `name`='阿卡丽';
Query OK, 3 rows affected (0.00 sec)
mysql> select * from student1;
+----+-----------+----------+-----+---------------------+------------------------------------+------------+
| id | name      | password | sex | birthday            | address                            | email      |
+----+-----------+----------+-----+---------------------+------------------------------------+------------+
|  1 | 阿卡丽    | 123456   || 1998-01-01 00:00:00 | 北京海淀区中关村大街1| 123@qq.com |
|  2 | 阿卡丽    | 123456   || NULL                | NULL                               | NULL       |
|  3 | 阿卡丽    | 123456   || NULL                | NULL                               | NULL       |
|  4 | 阿卡丽    | 123456   || NULL                | NULL                               | NULL       |
+----+-----------+----------+-----+---------------------+------------------------------------+------------+
4 rows in set (0.00 sec)

查完发现不加限制条件,所有人的姓名都被改成阿卡丽了。

不用where指定条件的情况下会修改所有数据,所以平常一定要避免这样操作。

4.示例2

  • 修改多个字段属性。将学号为1的同学的姓名改为亚索,email改为555353@qq.com。
mysql> UPDATE `STUDENT1` SET `name`='亚索',`email`='555353@qq.com'  WHERE id=1;
Query OK, 1 row affected (0.00 sec)

查询一下,可以看到修改成功

mysql> select * from student1;
+----+-----------+----------+-----+---------------------+------------------------------------+---------------+
| id | name      | password | sex | birthday            | address                            | email         |
+----+-----------+----------+-----+---------------------+------------------------------------+---------------+
|  1 | 亚索      | 123456   || 1998-01-01 00:00:00 | 北京海淀区中关村大街1| 555353@qq.com |
|  2 | 阿卡丽    | 123456   || NULL                | NULL                               | NULL          |
|  3 | 阿卡丽    | 123456   || NULL                | NULL                               | NULL          |
|  4 | 阿卡丽    | 123456   || NULL                | NULL                               | NULL          |
+----+-----------+----------+-----+---------------------+------------------------------------+---------------+
4 rows in set (0.00 sec)

5.update小结

  • 1.where条件为筛选条件,如果没有指定行,则会修改所有行,应尽量避免;
  • 2.value可以是一个具体的值,也可以是一个变量,如birthday就可不给具体的值,直接用datetime函数;
  • 3.多个设置的属性之间使用英文逗号隔开。

三、删除delete

1.基本语法

DELETE FROM <表名> [WHERE 子句] [ORDER BY 子句] [LIMIT 子句]

2.示例1
删除id为4的同学的数据

mysql> DELETE FROM `student1` WHERE id=4;
Query OK, 1 row affected (0.00 sec)

查询一下:

mysql> select * from student1;
+----+-----------+----------+-----+---------------------+------------------------------------+---------------+
| id | name      | password | sex | birthday            | address                            | email         |
+----+-----------+----------+-----+---------------------+------------------------------------+---------------+
|  1 | 亚索      | 123456   || 1998-01-01 00:00:00 | 北京海淀区中关村大街1| 555353@qq.com |
|  2 | 阿卡丽    | 123456   || NULL                | NULL                               | NULL          |
|  3 | 阿卡丽    | 123456   || NULL                | NULL                               | NULL          |
+----+-----------+----------+-----+---------------------+------------------------------------+---------------+
3 rows in set (0.00 sec)

3.在示例1的基础上,不加where条件会怎么样呢?

mysql> DELETE FROM `student1` ;
Query OK, 3 rows affected (0.00 sec)

查询一下:

mysql> select * from student1;
Empty set (0.00 sec)

可以看到不加where,然后删除,表就为空了。

4.关于delete和truncate区别

清空一张表,除了用不加where的delete外,还可以用truncate。那么二者有什么区别呢?

先看两段代码

  • delete
mysql>  insert into `student1`(id,name,password) values(1,'李四','123456');
Query OK, 1 row affected (0.00 sec)
mysql> select * from student1;
+----+--------+----------+-----+----------+---------+-------+
| id | name   | password | sex | birthday | address | email |
+----+--------+----------+-----+----------+---------+-------+
|  5 | 李四   | 123456   || NULL     | NULL    | NULL  |
+----+--------+----------+-----+----------+---------+-------+
1 row in set (0.00 sec)

可以看到,依旧是接着被删除的最近的那一条记录ID加1后进行记录。也就是说删除表而id并没有被重置。

  • truncate
mysql> truncate table `student1`;
Query OK, 0 rows affected (0.03 sec)   --使用truncate方法清空一张表

mysql> select * from student1;
Empty set (0.00 sec)

mysql>  insert into `student1`(id,name,password) values(1,'李四','123456');
Query OK, 1 row affected (0.01 sec)

mysql> select * from student1;
+----+--------+----------+-----+----------+---------+-------+
| id | name   | password | sex | birthday | address | email |
+----+--------+----------+-----+----------+---------+-------+
|  1 | 李四   | 123456   || NULL     | NULL    | NULL  |
+----+--------+----------+-----+----------+---------+-------+
1 row in set (0.00 sec)

可以看到在用truncate清空一张表后,再插入语句,id这个自增项被重置了。

小结:
二者主要区别为以下两点:

  • 1.delete删除的时候是一条一条的删除记录,对于auto_increment(自增)的记录不清空,并且配合事务(在同一个事务中),还可以将数据恢复。
  • 2.而truncate是直接将表摧毁,相当于再建一张一模一样的新表,对于auto_increment的记录也清空,并且删除的数据是找不回的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值