MySQL(第三篇)—表中數據的基本操作

表中數據的基本操作

首先,先介紹一個從數據表中查詢數據的一個語法
select 語句的 select * from 表名;
用來查詢表中所有數據。
* ”是MySQL提供的通配符,可以代替所有的字段名。

爲了檢驗每一次的操作是否成功,我多次使用了select * from 表名;

1、插入數據

(1)爲所有列插入數據

- 指定所有字段名

語法格式

insert into 表名 (字段1,字段2,...) values (1,2,...);

需要注意的是,在這個格式中,字段1、字段2等等都是數據庫中的字段名 稱,值1、值2等等是對應字段需要添加的數據,每個值的順序、類型必須與字段名對應。於是說,insert語句字段的順序可以和數據庫中表字段的順序不一致,但是values中的值一定要與insert語句中字段的順序對應。

示例

mysql> insert into stu(id,name,age)values(101,'baixiaobai',10);
Query OK, 1 row affected (0.01 sec)

查看一下

mysql> select * from stu;
+------+------------+------+
| id   | name       | age  |
+------+------------+------+
|  101 | baixiaobai |   10 |
+------+------------+------+
1 row in set (0.00 sec)

成功插入了

  • 不指定字段名

語法格式

insert into 表名 values (值1,2,...;

使用這種格式,值1、值2等等表示每個字段需要添加的數據,每個值的順序和類型都必須和表中字段的順序和類型都對應。
示例

mysql> insert into stu values (102,'lilei',18);
Query OK, 1 row affected (0.00 sec)

查看一下,同樣,插入成功了

mysql> select * from stu;
+------+-------+------+
| id   | name  | age  |
+------+-------+------+
|  102 | lilei |   18 |
+------+-------+------+
1 row in set (0.00 sec)

(2)爲指定列插入數據

在使用的時候,大多數情況不需要全部字段添加數據,在表中可能只需要添加某幾個字段的數據,其他字段使用默認值

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

字段1、字段2等等表示數據表中的字段名稱,也是你要插入數據的字段名稱,值1、值2等等表示每個字段需要添加的數據,每個值的順序和類型必須和字段名對應

mysql> insert into stu (name,age) values ('hanmeimei',19);
Query OK, 1 row affected (0.00 sec)

查看一下,在下表,可以看到,我在字段“name”“age”插入的數據成功輸出了,沒有插入的字段“id”輸出了默認值

mysql> select * from stu;
+------+-----------+------+
| id   | name      | age  |
+------+-----------+------+
|  102 | lilei     |   18 |
| NULL | hanmeimei |   19 |
+------+-----------+------+
2 rows in set (0.00 sec)

(3)批量插入數據

  • 爲所有列批量插入數據
insert into stu (字段名1,字段名2,...) values (1,2,...),(1,2,...);
mysql> insert into stu(id,name,age) values (103,'lihua',19),(104,'xiaohong',18);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

查看一下

mysql> select * from stu;
+------+-----------+------+
| id   | name      | age  |
+------+-----------+------+
|  102 | lilei     |   18 |
| NULL | hanmeimei |   19 |
|  103 | lihua     |   19 |
|  104 | xiaohong  |   18 |
+------+-----------+------+
4 rows in set (0.00 sec)

可以看到成功了,另外呢,在語法中字段名是可以省略的

insert into stu values (1,2,...),(1,2,...);

示例

mysql> insert into stu values (113,'liming',19),(114,'xiaolan',18);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

查看一下,依然成功了,

mysql> select * from stu;
+------+-----------+------+
| id   | name      | age  |
+------+-----------+------+
|  102 | lilei     |   18 |
| NULL | hanmeimei |   19 |
|  103 | lihua     |   19 |
|  104 | xiaohong  |   18 |
|  113 | liming    |   19 |
|  114 | xiaolan   |   18 |
+------+-----------+------+
6 rows in set (0.00 sec)
  • 爲指定列批量插入數據
insert into stu (字段名1,字段名2) values (1,2),(1,2);

2、更新(修改)數據

插入數據後,可能會遇到需要更改的情況,就需要更新數據表中的數據。
我們使用update語句來實現

語法格式

update 表名 set 字段名1=1 [,字段名2=2,...] [where 條件表達式]; 

寫的有點複雜了,咱來一句一句的來看

(1)更新全部數據

在update語句中,不使用where條件語句,會把表中指定字段的所有數據全部更新。

update 表名 set 字段名1=1 [,字段名2=2,...]

這個格式呢,可以修改一個指定字段名的所有數據,或者修改多個指定字段名的所有數據。

修改一個指定字段名的所有數據,

update 表名 set 字段名1=1;

示例

mysql> update stu set age=20;
Query OK, 6 rows affected (0.00 sec)
Rows matched: 6  Changed: 6  Warnings: 0

mysql> select * from stu;
+------+-----------+------+
| id   | name      | age  |
+------+-----------+------+
|  102 | lilei     |   20 |
| NULL | hanmeimei |   20 |
|  103 | lihua     |   20 |
|  104 | xiaohong  |   20 |
|  113 | liming    |   20 |
|  114 | xiaolan   |   20 |
+------+-----------+------+
6 rows in set (0.00 sec)

修改多個指定字段名的所有數據

update 表名 set 字段名1=1,字段名2=2;

示例

mysql> update stu set age=19,sex='nan';
Query OK, 6 rows affected (0.00 sec)
Rows matched: 6  Changed: 6  Warnings: 0

mysql> select * from stu;
+------+-----------+------+------+
| id   | name      | age  | sex  |
+------+-----------+------+------+
|  102 | lilei     |   19 | nan  |
| NULL | hanmeimei |   19 | nan  |
|  103 | lihua     |   19 | nan  |
|  104 | xiaohong  |   19 | nan  |
|  113 | liming    |   19 | nan  |
|  114 | xiaolan   |   19 | nan  |
+------+-----------+------+------+
6 rows in set (0.00 sec)

可以看到,修改成功了

ps:因爲用來展示的字段數量不夠,所以這個示例我先添加了一個‘sex’的字段

mysql> alter table stu add sex varchar(10);
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> select * from stu;
+------+-----------+------+------+
| id   | name      | age  | sex  |
+------+-----------+------+------+
|  102 | lilei     |   20 | NULL |
| NULL | hanmeimei |   20 | NULL |
|  103 | lihua     |   20 | NULL |
|  104 | xiaohong  |   20 | NULL |
|  113 | liming    |   20 | NULL |
|  114 | xiaolan   |   20 | NULL |
+------+-----------+------+------+
6 rows in set (0.00 sec)

(2)更新部分數據

使用where子句指定更新數據的條件

update 表名 set 字段名1=1  where 條件表達式; 

示例,在name=‘xiaohong’ 的條件下成功更新age=20,如下圖

mysql> update stu set age=20 where name='xiaohong';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from stu;
+------+-----------+------+------+
| id   | name      | age  | sex  |
+------+-----------+------+------+
|  102 | lilei     |   19 | nan  |
| NULL | hanmeimei |   19 | nan  |
|  103 | lihua     |   19 | nan  |
|  104 | xiaohong  |   20 | nan  |
|  113 | liming    |   19 | nan  |
|  114 | xiaolan   |   19 | nan  |
+------+-----------+------+------+
6 rows in set (0.00 sec)

當然都可以修改表中多個字符段的數據,比如說,我想讓id=114的age字符段數據改爲21,sex字符段數據改爲nv,如下圖

mysql> update stu set age=21,sex='nv' where id=114;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from stu;
+------+-----------+------+------+
| id   | name      | age  | sex  |
+------+-----------+------+------+
|  102 | lilei     |   19 | nan  |
| NULL | hanmeimei |   19 | nan  |
|  103 | lihua     |   19 | nan  |
|  104 | xiaohong  |   20 | nan  |
|  113 | liming    |   19 | nan  |
|  114 | xiaolan   |   21 | nv   |
+------+-----------+------+------+
6 rows in set (0.00 sec)

(3)使用簡單的運算對數據進行修改

我們還可以通過一些簡單的運算對數據進行修改
比如我們可以把所有人的年齡加1

mysql> update stu set age=age+1;
Query OK, 6 rows affected (0.00 sec)
Rows matched: 6  Changed: 6  Warnings: 0

mysql> select * from stu;
+------+-----------+------+------+
| id   | name      | age  | sex  |
+------+-----------+------+------+
|  102 | lilei     |   20 | nan  |
| NULL | hanmeimei |   20 | nan  |
|  103 | lihua     |   20 | nan  |
|  104 | xiaohong  |   21 | nan  |
|  113 | liming    |   20 | nan  |
|  114 | xiaolan   |   22 | nv   |
+------+-----------+------+------+
6 rows in set (0.00 sec)

所有人age加1
我突然發現xiaohong還沒有過生日,他的年齡仍然是20歲
我就可以通過where子句指定條件,把xiaohong的年齡減去1

mysql> update stu set age=age-1 where name='xiaohong';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

再來看

mysql> select * from stu;
+------+-----------+------+------+
| id   | name      | age  | sex  |
+------+-----------+------+------+
|  102 | lilei     |   20 | nan  |
| NULL | hanmeimei |   20 | nan  |
|  103 | lihua     |   20 | nan  |
|  104 | xiaohong  |   20 | nan  |
|  113 | liming    |   20 | nan  |
|  114 | xiaolan   |   22 | nv   |
+------+-----------+------+------+
6 rows in set (0.00 sec)

‘xiaohong’的年齡成功減1

3、刪除數據

(1)使用delete刪除數據

delete from 表名 [where 條件表達式];

1.刪除全部數據

語法結構

delete from 表名;

示例

mysql> delete from stu;
Query OK, 5 rows affected (0.00 sec)

以上結果說明刪除成功

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

以上結果說明,stu表中已經沒有數據

2.刪除部分數據

使用where子句指定刪除數據的條件

語法結構

mysql> delete from stu where name='xiaolan';
Query OK, 1 row affected (0.00 sec)

可以看到,‘xiaolan’已經被排異了(戰術傷心)

mysql> select * from stu;
+------+-----------+------+------+
| id   | name      | age  | sex  |
+------+-----------+------+------+
|  102 | lilei     |   20 | nan  |
| NULL | hanmeimei |   20 | nan  |
|  103 | lihua     |   20 | nan  |
|  104 | xiaohong  |   20 | nan  |
|  113 | liming    |   20 | nan  |
+------+-----------+------+------+
5 rows in set (0.00 sec)

(2)使用truncate刪除數據

truncate table 表名;

示例

mysql> truncate table stu;
Query OK, 0 rows affected (0.05 sec)
mysql> select * from stu;
Empty set (0.00 sec)

可以看到,stu表的全部數據被成功刪除

(3)delete語句和truncate語句的區別

  • delete既可以用於刪除全部數據,也可以用於刪除部分數據,truncate只能用於刪除表中的全部數據
  • delete逐條刪除,truncate整體刪除,truncate效率高於delete
  • delete可以將刪除的數據找回,truncate刪除的數據無法找回
  • 使用truncate語句刪除表中數據後,再次向表中添加記錄時,自增字段默認值重置爲1,而使用delete語句,自增字段的值爲刪除時該字段的最大值加1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章