【計算機本科補全計劃】Mysql 學(xué)習(xí)小計(4)

正文之前

昨天終于把我苦命的畢業(yè)設(shè)計審批表送出去了茅诱。結(jié)果暑假的生產(chǎn)實習(xí)開始對賬逗物,我這兒又開始忙活了,還要簽字瑟俭,我有時候都在想要不全班代簽一遍算了翎卓。不然真的揪心啊尔当!mmp莲祸,就學(xué)校這些東西破事多!椭迎!雖然合理锐帜,但是太忙活了!煩不勝煩畜号,不管了缴阎,我還是安心學(xué)我的小習(xí),偶爾寫寫文章尋尋樂子吧简软!今天寫了一篇與眾不同的文章(相對于我以往的文風(fēng)蛮拔,或者說我以往就沒有這玩意述暂?反正勞請看官老爺去看一眼?給個贊最棒建炫?)

成甲--《好好學(xué)習(xí)·個人知識管理精進指南》 讀書筆記

正文


MySQL 序列使用

Mysql教程里面的序列大概就是指能夠自增的列吧畦韭,也就是說只要你添加了一個行記錄,那么就算你沒有給定這個行的相應(yīng)列的值肛跌,它也會自動的給你添加相應(yīng)的自增后的值進去艺配。好比一個人員記錄,沒插入一個員工記錄衍慎,員工編號就可以自動加1转唉,而不需要你之前再去查看然后指定序號。想想我們新生入學(xué)的時候分配學(xué)號稳捆,如果還要一個個的去添加赠法,增加了多少的工作量,而且如果還不能保證精確性乔夯,好比如果U201710655 之后緊接著輸入一個U201710657 中間那么個人就沒了砖织。多尷尬? 所以自增列很有必要驯嘱,這個時候也就是Mysql序列展現(xiàn)效果的時候了镶苞。

你可以在一開始的時候就指定某一列是自增序列喳坠,如下:

create table auto_raise(id int unsigned not null auto_increment,primary key(id),···
name varchar(30) not null,date date not null) ···
engine=innodb auto_increment=201410600 charset=utf8;

你看鞠评,我指定的就是id這個主鍵是自增的,所以下面我要對這個表格進行操作壕鹉,是不需要對id這個列進行插入操作的剃幌, 系統(tǒng)自己會給我弄好,多省心晾浴?

另外负乡,不知道你看到?jīng)]有,我的id是從201410600開始增長的脊凰,怎么做到的呢抖棘?你去上看上面創(chuàng)建表格的時候是怎么做到的吧?聰明如你肯定一下子就看到了狸涌!

INSERT INTO auto_raise (id,name,date) VALUES ···
 (NULL,'housefly','2001-09-10'),(NULL,'millipede','2001-09-10');

在MySQL的客戶端中你可以使用 SQL中的LAST_INSERT_ID( ) 函數(shù)來獲取最后的插入表中的自增列的值切省。

這個估計是用來手動插入的吧?果然帕胆,親測手動插入會自導(dǎo)致自增起點變化朝捆,也就是說你完全可以在創(chuàng)建了自增之后,先插入一個想要的起點懒豹,然后再繼續(xù)進行自增達到指定自增起點的目的芙盘,與上面說到的創(chuàng)建table的時候的手段差不多驯用。

看我之后再插入的時候,就會從我上次插入的地方開始了儒老。


但是蝴乔,如果我繞道屁股后面去插呢?會怎么樣驮樊?讓我來試試

果然淘这,我大概知道自增的尿性了。就是逮住了最大的那個插巩剖,如果你指定那就不自增铝穷。美滋滋。有自增我指定個蛋凹涯АJ锬簟!

如果你刪除了數(shù)據(jù)表中的多條記錄鞠鲜,并希望對剩下數(shù)據(jù)的AUTO_INCREMENT列進行重新排列宁脊,那么你可以通過刪除自增的列,然后重新添加來實現(xiàn)贤姆。 不過該操作要非常小心榆苞,如果在刪除的同時又有新記錄添加,有可能會出現(xiàn)數(shù)據(jù)混亂霞捡。操作如下所示:

我們可以看到坐漏,如果不刪除原來的列,那么該表格已經(jīng)記住了上次的自增點碧信,所以你想找到原來的那個自增起點是找不到了赊琳。那么就刪除現(xiàn)在的行列 然后繼續(xù)自增咯~

alter table auto_raise drop id;···
alter table auto_rasie add id INT UNSIGNED NOT NULL ···
AUTO_INCREMENT FIRST,ADD PRIMARY KEY (id);

好像沒找到很好的辦法,讓所有的id記錄都從201410600開始砰碴。躏筏。之后還是得自己慢慢來改,麻煩呈枉,后面再說趁尼,現(xiàn)在不慌。

alter table auto_raise auto_increment=201410600;

MySQL 處理重復(fù)數(shù)據(jù)

你可以在MySQL數(shù)據(jù)表中設(shè)置指定的字段為 PRIMARY KEY(主鍵) 或者 UNIQUE(唯一) 索引來保證數(shù)據(jù)的唯一性猖辫。當(dāng)插入重復(fù)數(shù)據(jù)的時候酥泞,會導(dǎo)致報錯,當(dāng)然如果我們可以設(shè)置為ignore住册,那么插入重復(fù)數(shù)據(jù)也不會報錯婶博,但是會形成無效插入,也就是說這次插入操作被忽略了。

INSERT IGNORE INTO auto_raise (id,name) VALUES(2017, 'Thomas');

還有一種是設(shè)置為 replace 凡人,顧名思義名党,ignore是忽視本次插入,replace很明顯是覆蓋原本的重復(fù)的數(shù)據(jù):

replace INTO auto_raise (id,name,date) VALUES(2017, 'Zhang','2018-09-11');

統(tǒng)計重復(fù)數(shù)據(jù)(下圖根據(jù)name統(tǒng)計重復(fù)數(shù)據(jù)挠轴,group by語法)

select count(*) as repeations,name from auto_raise group by name ;

兩種過濾方式:

mysql> select distinct name from auto_raise ;
mysql> select name from auto_raise group by name;

如果要刪除重復(fù)的元素传睹,那么直接把表通過group by 進行唯一性復(fù)制 ,然后刪除原來的表岸晦,后把臨時表改個名字即可欧啤!

MySQL 導(dǎo)出數(shù)據(jù)

MySQL中你可以使用SELECT...INTO OUTFILE語句來簡單的導(dǎo)出數(shù)據(jù)到文本文件上。

select * from auto_raise into outfile '/Users/zhangzhaobo/Desktop/test.txt';

當(dāng)然启上,不出意外邢隧,你會有這個問題:

ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

上網(wǎng)找了不少的辦法,最后還是這個比較靠譜點:

#[/private/etc/my.cnf]
[mysqld]
secure-file-priv="Your Path"

當(dāng)然冈在,你可以先

show variables like '%secure%';

查看一波倒慧。一般會這樣,結(jié)果的第三行那個NULL就代表了限制導(dǎo)出包券,所以你需要改變系統(tǒng)配置纫谅。
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| require_secure_transport | OFF |
| secure_auth | ON |
| secure_file_priv | NULL |
+--------------------------+-------+

照著上面的辦法,直接懟就好了溅固。如果你的/private/etc/下已經(jīng)有了 my.cnf這個文件付秕,那么直接找到這個參數(shù),改一下就好侍郭, 沒有的話询吴,自己創(chuàng)建一個咯,內(nèi)容如下:

我甚至好心的励幼,可以讓你直接復(fù)制:

[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1
secure-file-priv='/Users/zhangzhaobo/Desktop/'

記得把路徑改了啊汰寓。不然你沒我這個用戶名,路徑報錯的苹粟。

弄好之后重啟mysql服務(wù)器就OK了

執(zhí)行完畢之后就這樣咯~

SELECT ... INTO OUTFILE 語句有以下屬性:

  • LOAD DATA INFILE是SELECT ... INTO OUTFILE的逆操作,SELECT句法跃闹。為了將一個數(shù)據(jù)庫的數(shù)據(jù)寫入一個文件嵌削,使用SELECT ... INTO OUTFILE,為了將文件讀回數(shù)據(jù)庫望艺,使用LOAD DATA INFILE苛秕。

  • SELECT...INTO OUTFILE 'file_name'形式的SELECT可以把被選擇的行寫入一個文件中。該文件被創(chuàng)建到服務(wù)器主機上找默,因此您必須擁有FILE權(quán)限艇劫,才能使用此語法。

  • 輸出不能是一個已存在的文件惩激。防止文件數(shù)據(jù)被篡改店煞。

  • 你需要有一個登陸服務(wù)器的賬號來檢索文件蟹演。否則 SELECT ... INTO OUTFILE 不會起任何作用。

  • 在UNIX中顷蟀,該文件被創(chuàng)建后是可讀的酒请,權(quán)限由MySQL服務(wù)器所擁有。這意味著鸣个,雖然你就可以讀取該文件羞反,但可能無法將其刪除。

導(dǎo)出SQL格式的數(shù)據(jù)囤萤,這個數(shù)據(jù)你可以直接用于復(fù)制后完全產(chǎn)生當(dāng)下的表格:

其中的命令也是很好使用的昼窗,我甚至懷疑,把擴展名改成sql 就可以直接在另一個服務(wù)器上重新生成一個新的數(shù)據(jù)庫表涛舍。

還有更狠的膏秫!

$ mysqldump -u root -p RUNOOB > database_dump.txt
password ******
$ mysqldump -u root -p --all-databases > database_dump.txt
password ******

將數(shù)據(jù)表及數(shù)據(jù)庫拷貝至其他主機,不然你以為導(dǎo)出的數(shù)據(jù)是直接給你看的啊做盅,當(dāng)然是用于數(shù)據(jù)庫之間的交流啦g拖鳌!

$ mysql -u root -p database_name < dump.txt
password *****

你也可以使用以下命令將導(dǎo)出的數(shù)據(jù)直接導(dǎo)入到遠程的服務(wù)器上吹榴,但請確保兩臺服務(wù)器是相通的亭敢,是可以相互訪問的:

$ mysqldump -u root -p database_name \ | mysql -h other-host.com database_name

MySQL 導(dǎo)入數(shù)據(jù)

使用 LOAD DATA 導(dǎo)入數(shù)據(jù)(報錯透心涼):

mysql> load data local infile '/Users/zhangzhaobo/Desktop/test1.txt' into table tableclone;
ERROR 1148 (42000): The used command is not allowed with this MySQL version

使用 mysqlimport 導(dǎo)入數(shù)據(jù):

HustWolf:~ zhangzhaobo$ mysqlimport -u root -p --local test '/Users/zhangzhaobo/Desktop/test1.txt'
Enter password: 

記得你的數(shù)據(jù)庫里面要有個跟你的txt文件同名的表,不然會報錯图筹。

運用如圖:

正文之后

無言帅刀,終于懟玩了Mysql 可以去玩別的了。這些知識目前還沒用得上远剩,后面等開始做畢設(shè)了扣溺,估計我就是被Mysql玩死的名。先快活吧9衔睢锥余!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市痢掠,隨后出現(xiàn)的幾起案子驱犹,更是在濱河造成了極大的恐慌,老刑警劉巖足画,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雄驹,死亡現(xiàn)場離奇詭異,居然都是意外死亡淹辞,警方通過查閱死者的電腦和手機医舆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蔬将,你說我怎么就攤上這事爷速。” “怎么了娃胆?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵遍希,是天一觀的道長。 經(jīng)常有香客問我里烦,道長凿蒜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任胁黑,我火速辦了婚禮废封,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘丧蘸。我一直安慰自己漂洋,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布力喷。 她就那樣靜靜地躺著刽漂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪弟孟。 梳的紋絲不亂的頭發(fā)上贝咙,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機與錄音拂募,去河邊找鬼庭猩。 笑死,一個胖子當(dāng)著我的面吹牛陈症,可吹牛的內(nèi)容都是我干的蔼水。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼录肯,長吁一口氣:“原來是場噩夢啊……” “哼趴腋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起嘁信,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤于样,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后潘靖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蚤蔓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年卦溢,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡单寂,死狀恐怖贬芥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宣决,我是刑警寧澤蘸劈,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站尊沸,受9級特大地震影響威沫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜洼专,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一棒掠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧屁商,春花似錦烟很、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至官还,卻和暖如春芹橡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背妻枕。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工僻族, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人屡谐。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓述么,卻偏偏與公主長得像,于是被迫代替她去往敵國和親愕掏。 傳聞我的和親對象是個殘疾皇子邢笙,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容