最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

與MSSQL對(duì)比學(xué)習(xí)MYSQL的心得(八)--插入 更新 刪除

 更新時(shí)間:2014年08月04日 17:42:19   投稿:hebedich  
這一篇《與MSSQL對(duì)比學(xué)習(xí)MYSQL的心得(八)》將會(huì)講解MYSQL的插入、更新和刪除語(yǔ)句

同樣的,只會(huì)講解跟SQLSERVER不同的地方

插入

將多行查詢結(jié)果插入到表中

語(yǔ)法

INSERT INTO table_name1(column_list1) SELECT (column_list2) FROM table_name2 WHERE (condition)

INSERT INTO SELECT 在SQLSERVER里也是支持的

table_name1指定待插入數(shù)據(jù)的表;column_list1指定待插入表中要插入數(shù)據(jù)的哪些列;table_name2指定插入數(shù)據(jù)是從

哪個(gè)表中查詢出來(lái)的;column_list2指定數(shù)據(jù)來(lái)源表的查詢列,該列表必須和column_list1列表中的字段個(gè)數(shù)相同,數(shù)據(jù)類型相同;

condition指定SELECT語(yǔ)句的查詢條件

從person_old表中查詢所有的記錄,并將其插入到person表

CREATE TABLE person (
 id INT UNSIGNED NOT NULL AUTO_INCREMENT,
 NAME CHAR(40) NOT NULL DEFAULT '',
 age INT NOT NULL DEFAULT 0,
 info CHAR(50) NULL,
 PRIMARY KEY (id)
)

CREATE TABLE person_old (
 id INT UNSIGNED NOT NULL AUTO_INCREMENT,
 NAME CHAR(40) NOT NULL DEFAULT '',
 age INT NOT NULL DEFAULT 0,
 info CHAR(50) NULL,
 PRIMARY KEY (id)
)

INSERT INTO person_old
VALUES (11,'Harry',20,'student'),(12,'Beckham',31,'police')

SELECT * FROM person_old

 可以看到,插入記錄成功,person_old表現(xiàn)在有兩條記錄。接下來(lái)將person_oldperson_old表中的所有記錄插入到person表

INSERT INTO person(id,NAME,age,info)
SELECT id,NAME,age,info FROM person_old;

SELECT * FROM person 

可以看到數(shù)據(jù)轉(zhuǎn)移成功,這里的id字段為自增的主鍵,在插入時(shí)要保證該字段值的唯一性,如果不能確定,可以插入的時(shí)候忽略該字段,

只插入其他字段的值

如果再執(zhí)行一次就會(huì)出錯(cuò)

MYSQL和SQLSERVER的區(qū)別:

區(qū)別一

當(dāng)要導(dǎo)入的數(shù)據(jù)中有重復(fù)值的時(shí)候,MYSQL會(huì)有三種方案

方案一:使用 ignore 關(guān)鍵字
方案二:使用 replace into
方案三:ON DUPLICATE KEY UPDATE

第二和第三種方案這里不作介紹,因?yàn)楸容^復(fù)雜,而且不符合要求,這里只講第一種方案

TRUNCATE TABLE person

TRUNCATE TABLE persona_old 

INSERT INTO person_old
VALUES (11,'Harry',20,'student'),(12,'Beckham',31,'police')

##注意下面這條insert語(yǔ)句是沒有ignore關(guān)鍵字的
INSERT INTO person(id,NAME,age,info)
SELECT id,NAME,age,info FROM person_old;

INSERT INTO person_old 
VALUES (13,'kay',26,'student')

##注意下面這條insert語(yǔ)句是有ignore關(guān)鍵字的
INSERT IGNORE INTO person(id,NAME,age,info)
SELECT id,NAME,age,info FROM person_old;

 

可以看到插入成功

SQLSERVER

在SQLSERVER這邊,如果要忽略重復(fù)鍵,需要在建表的時(shí)候指定 WITH (IGNORE_DUP_KEY = ON) ON [PRIMARY]

這樣在插入重復(fù)值的時(shí)候,SQLSERVER第一次會(huì)保留值,第二次發(fā)現(xiàn)有重復(fù)值的時(shí)候,SQLSERVER就會(huì)忽略掉

區(qū)別二

插入自增列時(shí)的區(qū)別

SQLSERVER需要使用 SET IDENTITY_INSERT 表名 ON 才能把自增字段的值插入到表中,如果不加 SET IDENTITY_INSERT 表名 ON

則在插入數(shù)據(jù)到表中時(shí),不能指定自增字段的值,則id字段不能指定值,SQLSERVER會(huì)自動(dòng)幫你自動(dòng)增加一

INSERTINTO person(NAME,age,info) VALUES ('feicy',33,'student')

而MYSQL則不需要,而且自由度非常大

你可以將id字段的值指定為NULL,MYSQL會(huì)自動(dòng)幫你增一

INSERTINTO person(id,NAME,age,info) VALUES (NULL,'feicy',33,'student')

 


也可以指定值

INSERT IGNORE INTO person(id,NAME,age,info) VALUES (16,'tom',88,'student')

也可以不寫id的值,MYSQL會(huì)自動(dòng)幫你增一

INSERT IGNORE INTO person(NAME,age,info) VALUES ('amy',12,'bb')

你可以指定id字段的值也可以不指定,指定的時(shí)候只要當(dāng)前id字段列沒有你正在插入的那個(gè)值就可以,即沒有重復(fù)值就可以

自由度非常大,而且無(wú)須指定 SET IDENTITY_INSERT 表名 ON 選項(xiàng)

區(qū)別三

唯一索引的NULL值重復(fù)問題

MYSQL

在MYSQL中UNIQUE 索引將會(huì)對(duì)null字段失效

insert into test(a) values(null)
 
insert into test(a) values(null)

 
上面的插入語(yǔ)句是可以重復(fù)插入的(聯(lián)合唯一索引也一樣)

SQLSERVER

SQLSERVER則不行

CREATE TABLE person (
 id INT NOT NULL IDENTITY(1,1),
 NAME CHAR(40) NULL DEFAULT '',
 age INT NOT NULL DEFAULT 0,
 info CHAR(50) NULL,
 PRIMARY KEY (id)
)

CREATE UNIQUE INDEX IX_person_unique ON [dbo].[person](name)

INSERT INTO [dbo].[person]
    ( [NAME], [age], [info] )
VALUES ( NULL, -- NAME - char(40)
     1, -- age - int
     'aa' -- info - char(50)
     ),
     ( NULL, -- NAME - char(40)
     2, -- age - int
     'bb' -- info - char(50)
     )

消息 2601,級(jí)別 14,狀態(tài) 1,第 1 行
不能在具有唯一索引“IX_person_unique”的對(duì)象“dbo.person”中插入重復(fù)鍵的行。重復(fù)鍵值為 (<NULL>)。
語(yǔ)句已終止。

 
更新

更新比較簡(jiǎn)單,就不多說了

UPDATE person SET info ='police' WHERE id BETWEEN 14 AND 17

SELECT * FROM person

刪除

刪除person表中一定范圍的數(shù)據(jù)

DELETE FROM person WHERE id BETWEEN 14 AND 17

SELECT * FROM person

如果要?jiǎng)h除表的所有記錄可以使用下面的兩種方法

##方法一
DELETE     FROM person

##方法二
TRUNCATE TABLE  person
跟SQLSERVER一樣,TRUNCATE TABLE會(huì)比DELETE FROM TABLE 快

MYISAM引擎下的測(cè)試結(jié)果,30行記錄

 
跟SQLSERVER一樣,執(zhí)行完TRUNCATE TABLE后,自增字段重新從一開始。

################################
INSERT IGNORE INTO person(id,NAME,age,info)
SELECT id,NAME,age,info FROM person_old;

SELECT * FROM person

TRUNCATE TABLE person

INSERT IGNORE INTO person(NAME,age,info) VALUES ('amy',12,'bb')

SELECT * FROM person

當(dāng)你剛剛truncate了表之后執(zhí)行下面語(yǔ)句就會(huì)看到重新從一開始

SHOW TABLE STATUS LIKE 'person'

總結(jié)

這一節(jié)介紹了MYSQL里的的插入、更新和刪除,并且比較了與SQLSERVER的區(qū)別,特別是MYSQL里插入語(yǔ)句的靈活性

剛剛開始從SQLSERVER轉(zhuǎn)過來(lái)可能會(huì)有一些不適應(yīng)

如有不對(duì)的地方,歡迎大家拍磚o(∩_∩)o

相關(guān)文章

  • MySQL: mysql is not running but lock exists 的解決方法

    MySQL: mysql is not running but lock exists 的解決方法

    下面可以參考下面的方法步驟解決。最后查到一個(gè)網(wǎng)友說可能和log文件有關(guān),于是將log文件給移除了,再重啟MySQL終于OK了
    2009-06-06
  • InnoDb 體系架構(gòu)和特性詳解 (Innodb存儲(chǔ)引擎讀書筆記總結(jié))

    InnoDb 體系架構(gòu)和特性詳解 (Innodb存儲(chǔ)引擎讀書筆記總結(jié))

    下面小編就為大家?guī)?lái)一篇InnoDb 體系架構(gòu)和特性詳解 (Innodb存儲(chǔ)引擎讀書筆記總結(jié))。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2017-03-03
  • MySQL過濾重復(fù)數(shù)據(jù)的兩種方法示例

    MySQL過濾重復(fù)數(shù)據(jù)的兩種方法示例

    數(shù)據(jù)庫(kù)生成環(huán)境中經(jīng)常會(huì)遇到表中有重復(fù)的數(shù)據(jù),或者進(jìn)行關(guān)聯(lián)過程中產(chǎn)生重復(fù)數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于MySQL過濾重復(fù)數(shù)據(jù)的兩種方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • mysql-5.7.21-winx64免安裝版安裝--Windows 教程詳解

    mysql-5.7.21-winx64免安裝版安裝--Windows 教程詳解

    這篇文章主要介紹了mysql-5.7.21-winx64免安裝版安裝--Windows 教程詳解,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-09-09
  • MySQL中join語(yǔ)句怎么優(yōu)化

    MySQL中join語(yǔ)句怎么優(yōu)化

    本文主要介紹了MySQL中join語(yǔ)句怎么優(yōu)化,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • mysql5.1.26安裝配置方法詳解

    mysql5.1.26安裝配置方法詳解

    這篇文章主要為大家詳細(xì)介紹了mysql安裝配置方法,圖文詳解MySQL5.1.26安裝步驟,感興趣的小伙伴們可以參考一下
    2016-06-06
  • mysql5.7.21.zip安裝教程

    mysql5.7.21.zip安裝教程

    這篇文章主要為大家詳細(xì)介紹了mysql5.7.21.zip安裝教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • MySQL 4G內(nèi)存服務(wù)器配置優(yōu)化

    MySQL 4G內(nèi)存服務(wù)器配置優(yōu)化

    MySQL對(duì)于web架構(gòu)性能的影響最大,也是關(guān)鍵的核心部分。下面我們了解一下MySQL優(yōu)化的一些基礎(chǔ),MySQL自身(my.cnf)的優(yōu)化
    2017-07-07
  • mysql日志文件之undo?log和redo?log

    mysql日志文件之undo?log和redo?log

    MySQL日志記錄了MySQL數(shù)據(jù)庫(kù)日常操作和錯(cuò)誤信息,MySQL有不同類型的日志文件,下面這篇文章主要給大家介紹了關(guān)于mysql日志文件之undo?log和redo?log的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • MySQL筆記之索引的使用

    MySQL筆記之索引的使用

    索引是創(chuàng)建在表上的,對(duì)數(shù)據(jù)庫(kù)表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu)其作用主要在于提高查詢的速度,降低數(shù)據(jù)庫(kù)系統(tǒng)的性能開銷
    2013-05-05

最新評(píng)論

赣榆县| 三都| 区。| 宜君县| 庆云县| 江达县| 沁源县| 光泽县| 塔河县| 临城县| 岳普湖县| 盐山县| 克东县| 临漳县| 石河子市| 迁安市| 铜陵市| 巴彦县| 崇信县| 道孚县| 东光县| 措勤县| 同江市| 慈利县| 任丘市| 贵德县| 宿松县| 河南省| 宣威市| 大连市| 曲松县| 远安县| 观塘区| 桃园县| 祥云县| 吉木乃县| 论坛| 赤城县| 杨浦区| 九台市| 新丰县|