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號','[email protected]');
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改爲[email protected]
mysql> UPDATE `STUDENT1` SET `name`='亞索',`email`='[email protected]'  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的記錄也清空,並且刪除的數據是找不回的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章