程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MYSQL基礎01(新增,修改,刪除),mysql01

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

編輯:MySQL綜合教程

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


首先說明一下,本人之前一直都是用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的新增更新刪除就是以上內容,遇到新情況再補充吧

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved