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