同樣的,只會(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_oldVALUES (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 personTRUNCATE TABLE persona_old INSERT INTO person_oldVALUES (11,'Harry',20,'student'),(12,'Beckham',31,'police')##注意下面這條insert語(yǔ)句是沒(méi)有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; |

新聞熱點(diǎn)
疑難解答
圖片精選