資料庫遇到的坑爹問題
資料庫資料遷移,涉及mysql、oracle資料庫;
問題如下:
1,oracle中不識別』』;空串必須在引號中間加空格』 『;另外不等於空串可寫成:!=』 』 或者 <>『 』;
2,oracle中select複雜的查詢語句帶的, 必須加表的別名,否則會報錯;很坑的,明明只有一張表,只是對查詢展示字段進行拓展新增兩個欄位就會報錯;
例:select * ,『0』 newstatus from usertable; 錯;
select t., 『0』 newstatus from usertable t ; 對;
3,oracle中查詢排序語句 order by 後面不能連續寫兩個字段【不知道是我寫的不對還是不知道怎麼寫,但是在mysql中卻完全ok,無語了!】;
4,oracle中建表語句加索引,不同表的索引欄位也不能相同,否則會報衝突;常出現在建立備份表,或臨時備份表中;
5,備份資料drop掉表之前,最好寫乙份備份表語句(表名隨時間動態拼接),以免造成資料丟失;
begin
execute immediate 『create table city_』||to_char(sysdate, 『yyyymmddhhmmss』)||』 as select * from wb_user』;
end;
6,mysql中再drop或者清除表資料之前,最好先備份乙份表資料,建立乙個隨時間動態生成表名的建表語句;
範例:set @pddl = concat(『select * from user』, @var);
prepare stmt from @pddl;/定義預處理語句/
execute stmt;/執行預處理語句/
deallocate prepare stmt;/釋放預處理語句/
例項:– 生成表名
set @sql_get_name = concat(「city_」, date_format(now(),』%y%m%d%h%i%s』));
– 建表
set @sql_create_table = concat(
'create table ',@sql_get_name,
「(city_id
bigint(30) not null comment 『城市id』,
city_name
varchar(30) not null comment 『城市名稱』,
province_id
varchar(8) not null comment 『省id』,
city_short_name
varchar(20) default null comment 『簡稱』,
order_id
bigint(10) default null comment 『排序(從1開始的正整數,null表示不排序,各level互不影響)』,
primary key (city_id
)
) engine=innodb default charset=utf-8 comment=『城市表』」);
prepare sql_create_table from @sql_create_table;
execute sql_create_table;
– 插入資料
set @sql_insert_data = concat(
「insert into 「,@sql_get_name,」(select * from city)」);
prepare sql_insert_data from @sql_insert_data;
execute sql_insert_data;
deallocate prepare sql_create_table;/釋放預處理語句/
deallocate prepare sql_insert_data;/釋放預處理語句/
或者寫成函式呼叫:
create procedure temptabledata(
in tablename varchar(1000),
in tablebuild varchar(300000),
in tabledata varchar(1000)
)begin
set @sql_get_name = concat(tablename, date_format(now(),』%y%m%d%h%i%s』));
set @sql_create_table = concat(
'create table ',@sql_get_name,tablebuild);
prepare sql_create_table from @sql_create_table;
execute sql_create_table;
– deallocate prepare sql_create_table;/釋放預處理語句/
set @sql_insert_data = concat(
"insert into ",@sql_get_name,tabledata);
prepare sql_insert_data from @sql_insert_data;
execute sql_insert_data;
– deallocate prepare sql_insert_data;/釋放預處理語句/
end;
call temptabledata(「city_」,"(
city_id
bigint(30) not null comment 『城市id』,
city_name
varchar(30) not null comment 『城市名稱』,
province_id
varchar(8) not null comment 『省id』,
city_short_name
varchar(20) default null comment 『簡稱』,
order_id
bigint(10) default null comment 『排序(從1開始的正整數,null表示不排序,各level互不影響)』,
primary key (city_id
)
) engine=innodb default charset=utf-8 comment=『城市表』","(select * from city)");
!!!這裡的函式temptabledata(v1,v2,v3)不能重複呼叫,只能重寫乙個重寫呼叫,包括begin/end語句;
7,oracle中引用指令碼語句,**現了begin和end操作,要在end;後面轉行加上\ 反斜槓進行提交操作;』
8,orcale中進行資料回滾操作時,會出現部分表無法正常被drop掉。可以先對要執行drop操作的表進行delete或者truncate操作清掉資料,然後進行commit操作,再進行drop操作即可正常;』
以上僅是個人總結,僅供參考!具體以實際操作驗證為準!!
記一次資料庫遷移遇到的坑
因為一開始專案中用的是oracle的資料庫,後來因為一些原因需要換成mysql的。由於oracle中所有庫表 欄位名都是大小不敏感的,所以專案中各種大寫小寫都有人用,但是遷移到mysql上面,他是區分的,然後就把mysql也設定成不區分大小寫了,並且字符集也設定成了utf8 general ci。後...
Oracle資料庫中遇到的坑
最近在幫別人忙寫程式,用的是oracle資料庫,寫一篇文章來說說在oracle中遇到的一些坑 1.pl sql develop的坑 由於在這裡工作環境是內網完全,無奈只能使用pl sql 工具,由於之前都是使用dbvisualizer連線。2.select 查詢的話,其sql視窗預設只顯示前幾行,並...
切換資料庫 如何在資料庫遷移中保證資料一致性?
當乙個系統存在很長一段時間後,經常會使用更新的技術來提高效能 可維護性或新增新特性。其中乙個變化可能會是使用哪個資料庫。這可能是最困難的改變。在遷移過程中,有兩個資料來源,這使得該系統成為乙個分布式系統。在分布式系統中,保持資料一致非常困難,而且很容易出錯。在本文中,我們將探索一種在遷移期間保持資料...