天天看點

七、MySQL插入、更新與删除資料

 存儲在系統中的資料是資料庫管理系統(DBMS)的核心,資料庫被設計用來管理資料的存儲、通路和維護資料的完整性。MySQL中提供豐富的資料管理語句,包括插入資料的INSERT、更新資料的UPDATE以及删除資料的DELETE語句。

7.1、插入資料

為表的所有字段插入資料

 使用基本的INSERT語句插入資料,要求指定表名稱和插入到新紀錄中的值,其基本文法為:

1

<code>INSERT</code> <code>INTO</code> <code>tbl_name (column_list) </code><code>VALUES</code> <code>(value_list)</code>

在插入資料前,首先建立一張表:

2

3

4

5

6

7

8

9

<code>mysql&gt; </code><code>CREATE</code> <code>TABLE</code> <code>person</code>

<code>    </code><code>-&gt; (</code>

<code>    </code><code>-&gt; id     </code><code>INT</code> <code>UNSIGNED </code><code>NOT</code> <code>NULL</code> <code>AUTO_INCREMENT,</code>

<code>    </code><code>-&gt; </code><code>name</code>   <code>CHAR</code><code>(40) </code><code>NOT</code> <code>NULL</code> <code>DEFAULT</code> <code>''</code><code>,</code>

<code>    </code><code>-&gt; age    </code><code>INT</code> <code>NOT</code> <code>NULL</code> <code>DEFAULT</code> <code>0,</code>

<code>    </code><code>-&gt; info   </code><code>CHAR</code><code>(50) </code><code>NULL</code><code>,</code>

<code>    </code><code>-&gt; </code><code>PRIMARY</code> <code>KEY</code> <code>(id)</code>

<code>    </code><code>-&gt; );</code>

<code>Query OK, 0 </code><code>rows</code> <code>affected (0.03 sec)</code>

在person表中,插入一條新記錄,id值為1,name值為Green,age值為21,info值為Lawyer

10

11

<code>mysql&gt;  </code><code>INSERT</code> <code>INTO</code> <code>person (id ,</code><code>name</code><code>, age , info)</code>

<code>    </code><code>-&gt;       </code><code>VALUES</code> <code>(1,</code><code>'Green'</code><code>, 21, </code><code>'Lawyer'</code><code>);</code>

<code>Query OK, 1 row affected (0.02 sec)</code>

<code>mysql&gt; </code><code>SELECT</code> <code>* </code><code>FROM</code> <code>person;</code>

<code>+</code><code>----+-------+-----+--------+</code>

<code>| id | </code><code>name</code>  <code>| age | info   |</code>

<code>|  1 | Green |  21 | Lawyer |</code>

<code>1 row </code><code>in</code> <code>set</code> <code>(0.00 sec)</code>

在person表中,插入一條新記錄,id值為2,name值為Suse,age值為22,info值為dancer

12

<code>mysql&gt;  </code><code>INSERT</code> <code>INTO</code> <code>person (age ,</code><code>name</code><code>, id , info)</code>

<code>    </code><code>-&gt;       </code><code>VALUES</code> <code>(22, </code><code>'Suse'</code><code>, 2, </code><code>'dancer'</code><code>);</code>

<code>|  2 | Suse  |  22 | dancer |</code>

<code>2 </code><code>rows</code> <code>in</code> <code>set</code> <code>(0.00 sec)</code>

為表的指定字段插入資料

在person表中,插入一條新記錄,name值為Willam,age值為20,info值為sports man

13

<code>mysql&gt;  </code><code>INSERT</code> <code>INTO</code> <code>person (</code><code>name</code><code>, age,info)</code>

<code>    </code><code>-&gt;      </code><code>VALUES</code><code>(</code><code>'Willam'</code><code>, 20, </code><code>'sports man'</code><code>);</code>

<code>mysql&gt; </code><code>SELECT</code> <code>* </code><code>FROM</code> <code>person;                                                       </code>

<code>+</code><code>----+--------+-----+------------+</code>

<code>| id | </code><code>name</code>   <code>| age | info       |</code>

<code>|  1 | Green  |  21 | Lawyer     |</code>

<code>|  2 | Suse   |  22 | dancer     |</code>

<code>|  3 | Willam |  20 | sports man |</code>

<code>3 </code><code>rows</code> <code>in</code> <code>set</code> <code>(0.00 sec)</code>

在person表中,插入一條新記錄,name值為laura,age值為25

<code>mysql&gt;  </code><code>INSERT</code> <code>INTO</code> <code>person (</code><code>name</code><code>, age ) </code><code>VALUES</code> <code>(</code><code>'Laura'</code><code>, 25);</code>

<code>Query OK, 1 row affected (0.01 sec)</code>

<code>mysql&gt; </code><code>SELECT</code> <code>* </code><code>FROM</code> <code>person;                                 </code>

<code>|  4 | Laura  |  25 | </code><code>NULL</code>       <code>|</code>

<code>4 </code><code>rows</code> <code>in</code> <code>set</code> <code>(0.00 sec)</code>

  可以發現id字段在插入資料後,沒有指派時自動增加,在這裡id字段為表的主鍵,不能為空,紫銅會自動為字段插入自增的序列值。

同時插入多條記錄

  INSERT語句可以同時相資料表中插入多條記錄,插入時指定多個值清單,每個值清單之間用逗号分隔開,基本文法為:

<code>INSERT</code> <code>INTO</code> <code>tbl_name (column_list) </code>

<code>  </code><code>VALUES</code> <code>(value_list1), (value_list2),(value_list3);</code>

在person表中,在name、age和info字段指定插入值,同時插入3條新記錄

14

15

16

17

18

19

20

<code>mysql&gt;  </code><code>INSERT</code> <code>INTO</code> <code>person(</code><code>name</code><code>, age, info)</code>

<code>    </code><code>-&gt;      </code><code>VALUES</code> <code>(</code><code>'Evans'</code><code>,27, </code><code>'secretary'</code><code>),</code>

<code>    </code><code>-&gt;      (</code><code>'Dale'</code><code>,22, </code><code>'cook'</code><code>),</code>

<code>    </code><code>-&gt;      (</code><code>'Edison'</code><code>,28, </code><code>'singer'</code><code>);</code>

<code>Query OK, 3 </code><code>rows</code> <code>affected (0.02 sec)</code>

<code>Records: 3  Duplicates: 0  Warnings: 0</code>

<code>mysql&gt; </code><code>SELECT</code> <code>* </code><code>FROM</code> <code>person;                                                              </code>

<code>|  5 | Evans  |  27 | secretary  |</code>

<code>|  6 | Dale   |  22 | cook       |</code>

<code>|  7 | Edison |  28 | singer     |</code>

<code>7 </code><code>rows</code> <code>in</code> <code>set</code> <code>(0.00 sec)</code>

在person表中,不指定插入清單,同時插入2條新記錄

21

<code>mysql&gt;  </code><code>INSERT</code> <code>INTO</code> <code>person</code>

<code>    </code><code>-&gt;      </code><code>VALUES</code> <code>(9,</code><code>'Harry'</code><code>,21, </code><code>'magician'</code><code>),</code>

<code>    </code><code>-&gt;      (</code><code>NULL</code><code>,</code><code>'Harriet'</code><code>,19, </code><code>'pianist'</code><code>);</code>

<code>Query OK, 2 </code><code>rows</code> <code>affected (0.02 sec)</code>

<code>Records: 2  Duplicates: 0  Warnings: 0</code>

<code>+</code><code>----+---------+-----+------------+</code>

<code>| id | </code><code>name</code>    <code>| age | info       |</code>

<code>|  1 | Green   |  21 | Lawyer     |</code>

<code>|  2 | Suse    |  22 | dancer     |</code>

<code>|  3 | Willam  |  20 | sports man |</code>

<code>|  4 | Laura   |  25 | </code><code>NULL</code>       <code>|</code>

<code>|  5 | Evans   |  27 | secretary  |</code>

<code>|  6 | Dale    |  22 | cook       |</code>

<code>|  7 | Edison  |  28 | singer     |</code>

<code>|  9 | Harry   |  21 | magician   |</code>

<code>| 10 | Harriet |  19 | pianist    |</code>

<code>9 </code><code>rows</code> <code>in</code> <code>set</code> <code>(0.00 sec)</code>

将查詢結果插入資料

 INSERT語句用來給資料表插入記錄時,指定插入記錄的列值。INSERT還可以将SELECT語句查詢的結果插入到清單中,其基本文法為:

<code>INSERT</code> <code>INTO</code> <code>tbl_name1 (column_list1) </code>

<code>  </code><code>SELECT</code> <code>(column_list2) </code><code>FROM</code> <code>table_name2 </code><code>WHERE</code> <code>(condition)</code>

從person_old表中查詢所有的記錄,并将其插入到person表中

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

<code>首先,建立一個名為person_old的資料表,其表結構與person結構相同</code>

<code>mysql&gt; </code><code>CREATE</code> <code>TABLE</code> <code>person_old</code>

<code>Query OK, 0 </code><code>rows</code> <code>affected (0.11 sec)</code>

<code>向person_old表中添加兩條記錄</code>

<code>mysql&gt;  </code><code>INSERT</code> <code>INTO</code> <code>person_old</code>

<code>    </code><code>-&gt;      </code><code>VALUES</code> <code>(11,</code><code>'Harry'</code><code>,20, </code><code>'student'</code><code>), (12,</code><code>'Beckham'</code><code>,31, </code><code>'police'</code><code>);</code>

<code>Query OK, 2 </code><code>rows</code> <code>affected (0.20 sec)</code>

<code>mysql&gt; </code><code>SELECT</code> <code>* </code><code>FROM</code> <code>person_old;</code>

<code>+</code><code>----+---------+-----+---------+</code>

<code>| id | </code><code>name</code>    <code>| age | info    |</code>

<code>| 11 | Harry   |  20 | student |</code>

<code>| 12 | Beckham |  31 | police  |</code>

<code>插入資料到person表中</code>

<code>mysql&gt; </code><code>INSERT</code> <code>INTO</code> <code>person(id, </code><code>name</code><code>, age, info)</code>

<code>    </code><code>-&gt;      </code><code>SELECT</code> <code>id, </code><code>name</code><code>, age, info </code><code>FROM</code> <code>person_old;</code>

<code>Query OK, 2 </code><code>rows</code> <code>affected (0.01 sec)</code>

<code>| 11 | Harry   |  20 | student    |</code>

<code>| 12 | Beckham |  31 | police     |</code>

<code>11 </code><code>rows</code> <code>in</code> <code>set</code> <code>(0.00 sec)</code>

7.2、更新資料

  表中有資料之後,可以對資料進行更新,其基本文法為:

<code>UPDATE</code> <code>table_name</code>

<code>    </code><code>SET</code> <code>col_name1=value1,col_name2=value2,...,</code>

<code>    </code><code>WHERE</code> <code>where_condition</code>

在person表中,更新id值為11的記錄,将age字段值改為15,将name字段值改為LiMing

<code>mysql&gt; </code><code>UPDATE</code> <code>person </code><code>SET</code> <code>age = 15, </code><code>name</code><code>=</code><code>'LiMing'</code> <code>WHERE</code> <code>id = 11;</code>

<code>Rows</code> <code>matched: 1  Changed: 1  Warnings: 0</code>

<code>mysql&gt; </code><code>SELECT</code> <code>* </code><code>FROM</code> <code>person </code><code>WHERE</code> <code>id=11;</code>

<code>+</code><code>----+--------+-----+---------+</code>

<code>| id | </code><code>name</code>   <code>| age | info    |</code>

<code>| 11 | LiMing |  15 | student |</code>

在person表中,更新age值為19~22的記錄,将info字段值都改為student

<code>mysql&gt; </code><code>UPDATE</code> <code>person </code><code>SET</code> <code>info=</code><code>'student'</code>  <code>WHERE</code> <code>age  </code><code>BETWEEN</code> <code>19 </code><code>AND</code> <code>22;  </code>

<code>Query OK, 6 </code><code>rows</code> <code>affected (0.02 sec)</code>

<code>Rows</code> <code>matched: 6  Changed: 6  Warnings: 0</code>

<code>mysql&gt; </code><code>SELECT</code> <code>* </code><code>FROM</code> <code>person </code><code>WHERE</code> <code>age </code><code>BETWEEN</code> <code>19 </code><code>AND</code> <code>22;                 </code>

<code>|  1 | Green   |  21 | student |</code>

<code>|  2 | Suse    |  22 | student |</code>

<code>|  3 | Willam  |  20 | student |</code>

<code>|  6 | Dale    |  22 | student |</code>

<code>|  9 | Harry   |  21 | student |</code>

<code>| 10 | Harriet |  19 | student |</code>

<code>6 </code><code>rows</code> <code>in</code> <code>set</code> <code>(0.00 sec)</code>

7.3、删除資料

  從資料表中删除資料使用DELETE語句,其基本文法為:

<code>DELETE</code> <code>FROMN table_name [</code><code>WHERE</code> <code>&lt;condition&gt;]</code>

在person表中,删除id等于11的記錄

<code>執行删除操作前,使用</code><code>SELECT</code><code>語句檢視目前id=11的記錄</code>

<code>mysql&gt;  </code><code>SELECT</code> <code>* </code><code>FROM</code> <code>person </code><code>WHERE</code> <code>id=11;</code>

<code>使用</code><code>DELETE</code><code>語句删除該記錄</code>

<code>mysql&gt;  </code><code>DELETE</code> <code>FROM</code> <code>person </code><code>WHERE</code> <code>id = 11;</code>

<code>語句執行完畢,檢視執行結果:</code>

<code>Empty </code><code>set</code> <code>(0.00 sec)</code>

在person表中,使用DELETE語句同時删除多條記錄,删除age字段在19-22的記錄

<code>執行删除操作前,使用</code><code>SELECT</code><code>語句檢視目前的資料</code>

<code>mysql&gt;  </code><code>SELECT</code> <code>* </code><code>FROM</code> <code>person </code><code>WHERE</code> <code>age </code><code>BETWEEN</code> <code>19 </code><code>AND</code> <code>22;</code>

<code>DELETE</code><code>删除這些記錄</code>

<code>mysql&gt;  </code><code>DELETE</code> <code>FROM</code> <code>person </code><code>WHERE</code> <code>age </code><code>BETWEEN</code> <code>19 </code><code>AND</code> <code>22;</code>

<code>Query OK, 6 </code><code>rows</code> <code>affected (0.01 sec)</code>

<code>檢視執行結果</code>

删除person表中所有記錄,SQL語句如下

<code>執行删除操作前,使用</code><code>SELECT</code><code>語句檢視目前的資料:</code>

<code> </code><code>mysql&gt; </code><code>SELECT</code> <code>* </code><code>FROM</code> <code>person;</code>

<code>+</code><code>----+---------+-----+-----------+</code>

<code>| id | </code><code>name</code>    <code>| age | info      |</code>

<code>|  4 | Laura   |  25 | </code><code>NULL</code>      <code>|</code>

<code>|  5 | Evans   |  27 | secretary |</code>

<code>|  7 | Edison  |  28 | singer    |</code>

<code>| 12 | Beckham |  31 | police    |</code>

<code>執行</code><code>DELETE</code><code>語句删除這4條記錄</code>

<code>mysql&gt;  </code><code>DELETE</code> <code>FROM</code> <code>person;</code>

<code>Query OK, 4 </code><code>rows</code> <code>affected (0.01 sec)</code>

<code>檢視執行結果:</code>

<code>mysql&gt;  </code><code>SELECT</code> <code>* </code><code>FROM</code> <code>person;</code>

  如果想删除表中的所有記錄,還可以使用TRUNCATE TABLE語句,TRUNCATE将直接删除原來的表并重新建立一個表,其文法結構為TRUNCATE TABLE table_name。TRUNCATE直接删除表而不是删除記錄,是以執行速度比DELETE快。

本文轉自 夢想成大牛 51CTO部落格,原文連結:http://blog.51cto.com/yinsuifeng/1953245,如需轉載請自行聯系原作者

繼續閱讀