表中數據的基本操作
首先,先介紹一個從數據表中查詢數據的一個語法
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