MYSQL基礎01(新增,修改,刪除)

來源:互聯網
上載者:User

標籤:

首先說明一下,本人之前一直都是用MSSQL,由於工作原因,每天寫上百條sql語句,並持續了幾年;由於換了工作目前主要接觸的MYSQL;所以現在開始學習MYSQL。

我的學習計劃很簡單,我在MSSQL使用或學習到的功能,都會嘗試在MYSQL實現,所以如果我都嘗試了一遍,我認為MYSQL的使用也學的差不多了,當然工作中遇到的問題和解決經驗也會總結下來。

剛開始工作中最首先使用的也是最常用的當然就是增刪改查了,所以第一遍就會介紹MYSQL的新增,修改,刪除;查詢是很大的一塊,所以會另外展開

INSERT

1.插入一條記錄 ,很簡單的標準sql

insert into mytable(col1,col2,col3) values(‘val1‘,‘val2‘,4);

說明:請留意最後的分號; 用慣了mssql ,最不適應的地方就是,mysql中每條sql語句必須用分號間開,否則如果想一次執行多條語句,就會報錯.

       另外,如果使用自增ID,插入時也可以設定自增ID的值,而不報錯; 這對於資料移轉是一大方便.

2.複製表的資料,這跟mssql是一樣的

insert into mytable(col1,col2,col3)select col1,col2,col3 from copytable;

3.新增表並同時複製資料,這個跟mssql不同 (ms:select * into newtable from copytable)

CREATE TABLE newtable SELECT * FROM copytable WHERE 1=2;

說明:跟mssql一樣,只是單純複製表結構,索引什麼的並不會複製過來; 去掉where 條件將會複製所有資料

4.批量插入,mysql的特點,有點似鏈式寫法 (相當好用!)

insert into mytable (col1,col2,col3) values (‘A‘,‘VAL1‘,1),(‘B‘,‘VAL2‘,2),(‘C‘,‘VAL3‘,3);

說明:執行效率相當高,同時插入數萬記錄也只是10秒以內;而且對於項目中的處理字元,實現批量插入相當輕鬆,我特別喜歡這個語句.

UPDATE

1.標準sql

UPDATE mytable SET col1=‘A‘,col2=‘val1‘,col3=1 where id=‘0001‘;

2.表串連更新,同時更新多列,部分跟mssql一致

UPDATE newtable a,oldtable b set a.col1=b.col1,a.col2=b.col2 where a.id=b.id;

說明:mssql的寫法更加靈活,支援該寫法: update newtable set col1=oldtabel.col1,col2=oldtabel.col2 from oldtabel where newtable.id=oldtabel.id

3.批次更新

REPLACE INTO mytable (id,name)VALUES (‘01‘,‘hello‘),(‘02‘,‘haha‘);

說明:跟批量插入的格式是一樣的, 當values後面的資料插入到mytable中不會引起主鍵衝突或唯一索引衝突時,那麼就會直接新增資料, 否則就會修改資料.簡單點說就是,如果記錄存在則更新,如果記錄不存在則插入; 上例中,如果執行插入操作,受影響行數為2, 如果執行修改操作,受影響行數為4; 所以執行修改操作的本質是先delete,然後再插入.所以如果更新的欄位不齊,其它欄位將變為預設值  下面是該功能的增強版

INSERT INTO mytable(id,name,col)VALUES (78,‘456‘,‘55‘),(88,‘456‘,‘d‘) ON DUPLICATE KEY UPDATE name=VALUES(name),col=VALUES(col);
INSERT INTO mytable(id,name,col)VALUES (78,‘456‘,‘55‘),(88,‘456‘,‘d‘) ON DUPLICATE KEY UPDATE name=VALUES(name); --只更新name

說明:跟replace 是一樣的,唯一不同的是可以選擇更新的列, 其它的列的值並不會受影響.

DELETE

1.標準sql

delete from mytable where id=‘001‘;

2.清空表, 跟mssql是一樣的

truncate table mytable;

說明:執行後,自增ID也會從1開始編號.

處理資料時注意事項

1.對日期類型的列插入資料時,如果插入的值不符合日期格式,mysql 並不會報錯,但是會儲存為‘0000-00-00 00:00:00‘的格式, 一般的程式並不會承認,所以你會發現後台讀取資料沒有問題,而應用程式讀取資料時會報錯. 這個我被坑慘了.

下面是網上找到的解決辦法,並沒有實際測試

給jdbc   url加上   zeroDateTimeBehavior參數:

datasource.url=jdbc:mysql://localhost:3306/testdbuseUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true

zeroDateTimeBehavior=round是為了指定MySql中的DateTime欄位預設值查詢時的處理方式;預設是拋出異常,

對於值為0000-00-00   00:00:00(預設值)的紀錄,如下兩種配置,會返回不同的結果:

zeroDateTimeBehavior=round   //結果: 0001-01-01   00:00:00.0

zeroDateTimeBehavior=convertToNull   //結果 null

 

目前關於mysql的新增更新刪除就是以上內容,遇到新情況再補充吧

MYSQL基礎01(新增,修改,刪除)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.