因為資料庫SQL語句在各大產品中帶有“方言性”,即SQLSERVER SYBASE都是用了T-SQL,Mysql是用的標準SQL,Oracle有有自己的PL/SQL。由於這種“方言性”的差異導致很多SQL語句在移植的時候產生困難,在異構資料庫的時候顯得很尷尬。當然對於DBA來說,無非是查查文法而已的事。但是終究是不方便。這裡就跟大家分享下我自己實驗整理的,複製表結構即資料的各資料庫中的文法分析。
先來說說SQLSERVER大家最熟悉的。
--當資料庫中沒有新表的情況,比如有了A,沒有B表。
select * into B from A --複製表及資料
select * into B from A where 1>1 --只複製表結構
--當資料中已經有了B表的情況,上面就不適用了。
insert into B select * from A --複製表資料,為了避免。B表理論上應該沒有資料,如果有,可能會造成違反主鍵。
insert into B select * from A where id>10 --加上where條件可以指定複製資料,上面沒有表的情況也可以這樣做。
這裡要說的是,sybase和SQLSERVER是一樣的。因為從某種角度來說,SYBASE就是SQL的原型。
接下來是Mysql。稍微文法有不同。
--資料庫中沒有B表的情況
create table B select * from A
create table B select * from A where 1<>1 --只複製表結構
--有B表的情況和sqlserver基本相同
insert into B select * from A
oracle 基本上合MYSQL是一樣的,不過文法要求更嚴謹。當然Mysql也可以這樣寫。
--資料庫中沒有B表的情況
create table B as select * from A
create table B as select * from A where 1<>1 --只複製表結構
create table B like A--複製表結構
--有B表的情況基本相同
insert into B select * from A
這些都是較為初級的SQL語句,但是也比較適用,以後會分析一些其他的常用SQL語句。