摘要:舉個例子星空幻穎這條語句向用戶表插入一條用戶數據。在插入數據行時候,將會使用的值填入對應字段名,例如星空幻穎將會被插入到字段。
本篇文章介紹如何使用Insert語句將數據插入到數據庫。
數據插入增刪改查是數據庫最常用的4個命令,插入算是第二常用,第一是SELECT。插入數據的方式大概有4種
插入完整的行
插入行的一部分
插入多行數據(批量插入)
插入來自查詢的數據
插入完整的行使用Insert將一條數據插入數據庫是最簡單也是最基本的操作。插入操作有兩種寫法。
順序插入順序插入指的是:給出數據庫名和需要插入數據,按照數據庫字段排列順序將數據插入數據庫。
舉個例子:
INSERT INTO `test`.`br_user` (`user_id`, `name`, `password`, `email`) VALUES (NULL, "星空幻穎", "123456", "123@xyz.com");
這條語句向用戶表插入一條用戶數據。給出了姓名、密碼和郵箱3個字段,其中user_id設為NULL,這樣Mysql就會為我們自動創建一個自增長ID
這種順序插入方式,必須和數據庫字段一一對應的給出每個值,如果不想給值,可以設為NULL(在數據允許的情況下)。由于位置匹配有要求,所以十分不安全。假設我們需要調增數據庫結構時候,此語句插入數據將會發生錯誤。所以一般情況下我們不采用這種方式。
字段名+值插入首先給個例子:
INSERT INTO `test`.`br_user` (`user_id`, `name`, `password`, `email`) VALUES (NULL, "星空幻穎", "123456", "123@xyz.com");
上面這條語句可以實現和順序插入一樣的功能,但我們發現它相比于順序插入多給出了字段名,這種方式稍微復雜點兒,但是更為安全。
在插入數據行時候,Mysql將會使用VALUES的值填入對應字段名,例如星空幻穎將會被插入到name字段。因為提供了字段名,所以字段的順序也不一定需要按照數據庫字段排序。
比方我們可以改寫上面的SQL語句:
INSERT INTO `test`.`br_user` (`user_id`, `password`, `email`, `name`) VALUES (NULL, "123456", "123@xyz.com", "星空幻穎");
我們將name調增到了最后一個,但是這并不影響插入的結果。
甚至我們可以省去不寫某些字段的值。(前提是字段允許為空或給出默認值的情況下)
INSERT INTO `test`.`br_user` (`password`, `name`) VALUES ("123456", "星空幻穎");
這樣就安全了很多,即使我們調整數據庫結構,新增一個字段,只要我們給出默認值就沒有任何問題。
插入多行(批量插入)Mysql可以一次插入一條記錄到數據庫,也支持一次插入多條記錄。只需要給出多個VALUES使用逗號分隔(使用圓括號括起來),就可以一次插入多條記錄。
INSERT INTO `test`.`br_user` (`user_id`, `password`, `email`, `name`) VALUES (NULL, "123456", "1234@xyz.com", "星空幻穎"), (NULL, "123456", "456@xyz.com", "星空幻穎2"), (NULL, "123456", "789@xyz.com", "星空幻穎3"), (NULL, "123456", "222@xyz.com", "星空幻穎4");
注意每條插入值的順序要和你給出的字段順序一致。
建議:在實際開發中,如果需要插入多條數據盡量使用批量插入。因為速度比一條一條插入塊,性能更好。
插入檢索出的數據 相同表結構假設一個場景,我們有兩張用戶表,現在需要將其用戶進行合并。首先我們可能會想到,將一張表數據查出,在放入到另外一張表合并。
但是有了插入檢索出數據這個功能,就不需要這么麻煩了。Mysql可以一次幫我們處理好。
給出兩張表br_user和br_user2。為作區分,我把br_user2姓名都改為了數字
INSERT INTO br_user(`password`, `email`, `name`) SELECT `password`, `email`, `name` FROM br_user2;
這條語句看上去好像是兩個語句,但是他執行的是一個功能:將br_user2的數據挪到了br_user,一次性完成。
這里的插入多少記錄到br_user決定了你的SELECT檢索出來多少記錄,如果一條也沒有檢索到,也不會報錯,畢竟是合法的。當然,你也可以在SELECT語句后面使用where條件篩選數據。
提醒:這里復制數據到另外一個表,最好不要使用原來的表id,防止和需要合并的表沖突,除非你確定不會沖突。還有字段類型,如果檢索出來為字符串,而插入的為整型,Mysql會幫你轉換了
不同表結構上面的例子我們為了簡單明了,使用了兩張完全相同結構的表。其實Mysql根本不關心你兩個表結構是否相同,也不關心你檢索的字段是否相同,只關心你檢索出來的字段順序。簡單來說,就是你檢索出來的第一個字段就會被插入到第一個字段,(上方的password會被插入到password字段),以此類推。
為了演示這個效果,我們給出一個驢唇不對馬嘴的兩張表,來展示強烈對比:
還是那張br_user,另外我們再給出一張br_region地區表,完全不一樣。
INSERT INTO br_user(`password`, `email`, `name`) SELECT `region_py`, `region_type`, `region_name` FROM br_region where region_id <10;
由于br_region表數據量太大,我們只選取了region_id < 10的,剛好說了一下上面的附帶where篩選。
這里region_py被放入了password;region_type被放入了email;region_name被放入了name。他們有啥關系?啥關系都沒有。
這個為我們以后不同表之間轉移數據提供了方便。你可以幫老板造假數據,來個10萬用戶。
星空幻穎,嚴穎
個人主頁:segmentfault
天天找資料找不到,噗噗噗,分享一個資源合集網站:筆點資源
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/22230.html
摘要:編程語言中經常使用函數來處理一些字符串,數字或者其他內容。所以如果需要移植要慎重使用函數。該函數有兩個參數,第一個參數為字符串,第二個參數為字符串長度。還有另外兩個相似函數去除字符串左側空格去除字符串右側空格字符串截取函數。 編程語言中經常使用函數來處理一些字符串,數字或者其他內容。MySQL也是一樣,可以使用函數來快速達到一系列的目的。 在上一篇文章《計算字段的使用》中,我們提前使用...
閱讀 1059·2021-11-24 09:39
閱讀 3594·2021-11-22 13:54
閱讀 2552·2021-10-11 10:59
閱讀 788·2021-09-02 15:40
閱讀 1034·2019-08-30 15:55
閱讀 1053·2019-08-30 13:57
閱讀 2311·2019-08-30 13:17
閱讀 3031·2019-08-29 18:32