今天有一個需求,立了一個新項目,新項目初步定了使用了現有的框架,但數據庫要求由原來的mysql改成oracle,所以原來的基礎版本的數據庫腳本就需要修改成符合oracle的腳本,修改完成后,總結了一下,大致需要修改的地方如下:
建表:create table
1、mysql的ID自增長
2、所有的表名、字段名的引號去掉(包括建表“表名”、“字段名”、主鍵“字段名”,索引的索引名稱、字段名,外鍵的外鍵名稱、表名、字段名 )
3、驅動、字符集等去掉
4、字段注釋修改
5、索引修改
6、字段的類型修改,以下數據類型對應關系
mysql oracle
int(5) <--> number(5,0) #5為長度,0為小數點精確數
datetime <--> date
smallint(5) <--> number(5,0)
float(5,2)、double(5,2) <--> number(5,2) #5為長度,2為小數精確數
char(8)、varchar(8) <--> varchar2(8)
text <--> clob
示例一:
mysql:
CREATE TABLE `fq_permission` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`PID` int(11) DEFAULT NULL COMMENT '父節點名稱',
`NAME` varchar(50) NOT NULL COMMENT '名稱',
`TYPE` varchar(20) DEFAULT NULL COMMENT '類型:菜單or功能',
`SORT` int(11) DEFAULT NULL COMMENT '排序',
`URL` varchar(255) DEFAULT NULL,
`PERM_CODE` varchar(50) DEFAULT NULL COMMENT '菜單編碼',
`ICON` varchar(255) DEFAULT NULL,
`STATE` varchar(10) DEFAULT NULL,
`DESCRIPTION` text,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=107 DEFAULT CHARSET=utf8; #轉成oracle時,去除驅動、字符集等
oracle:
CREATE TABLE fq_permission ( #變化:去引號
ID NUMBER(11) NOT NULL, #變化:修改數據類型、去引號、去自增長
PID NUMBER(11) DEFAULT NULL , #變化:修改數據類型、去引號、去注釋
NAME varchar2(50) NOT NULL , #變化:同上
TYPE varchar2(20) DEFAULT NULL, #變化:同上
SORT NUMBER(11) DEFAULT NULL, #變化:同上
URL varchar2(255) DEFAULT NULL, #變化:修改數據類型、去引號
PERM_CODE varchar2(50) DEFAULT NULL, #變化:修改數據類型、去引號、去注釋
ICON varchar2(255) DEFAULT NULL, #變化:修改數據類型、去引號
STATE varchar2(10) DEFAULT NULL, #變化:修改數據類型、去引號
DESCRIPTION clob, #變化:修改參數類型、去引號
PRIMARY KEY (ID) #變化:去引號
);
COMMENT ON COLUMN fq_permission.PID is '父節點名稱'; #字段注釋
COMMENT ON COLUMN fq_permission.NAME is '名稱';
COMMENT ON COLUMN fq_permission.TYPE is '類型:菜單or功能';
COMMENT ON COLUMN fq_permission.SORT is '排序';
COMMENT ON COLUMN fq_permission.PERM_CODE is '菜單編碼';
示例二:
mysql:
CREATE TABLE `fq_user_role` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`USER_ID` int(11) NOT NULL,
`ROLE_ID` int(11) NOT NULL,
PRIMARY KEY (`ID`),
KEY `FK_USER_ROL_REFERENCE_ROLE` (`ROLE_ID`) USING BTREE,
KEY `FK_USER_ROL_REFERENCE_USERS` (`USER_ID`) USING BTREE,
CONSTRAINT `fq_user_role_ibfk_1` FOREIGN KEY (`ROLE_ID`) REFERENCES `fq_role` (`ROLE_ID`),
CONSTRAINT `fq_user_role_ibfk_2` FOREIGN KEY (`USER_ID`) REFERENCES `fq_user` (`USER_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
oracle:
drop table fq_user_role;
CREATE TABLE fq_user_role (
ID number(11) NOT NULL,
USER_ID number(11) NOT NULL,
ROLE_ID number(11) NOT NULL,
PRIMARY KEY (ID),
CONSTRAINT fq_user_role_ibfk_1 FOREIGN KEY (ROLE_ID) REFERENCES fq_role (ROLE_ID),
CONSTRAINT fq_user_role_ibfk_2 FOREIGN KEY (USER_ID) REFERENCES fq_user (USER_ID)
);
#索引另外創建
create index FK_USER_ROL_REFERENCE_ROLE on fq_user_role(ROLE_ID);
create index FK_USER_ROL_REFERENCE_USERS on fq_user_role(USER_ID);
插入數據:insert into
1、所有的表名、字段名的引號去掉
2、日期時間修改
3、字段對應參數由一對多改成一對一
示例一
#一對多改成一對一,去引號
mysql:
insert into 'fq_role_permission'('ID','ROLE_ID','PERMISSION_ID') values(1316,13,58),(1317,13,59);
oracle:
insert into fq_role_permission(ID,ROLE_ID,PERMISSION_ID) values(1316,13,58);
insert into fq_role_permission(ID,ROLE_ID,PERMISSION_ID) values(1317,13,59);
示例二:
#時間格式修改
mysql:
insert into 'fq_user'('USER_ID','LOGIN_NAME','PASSWORD','REG_DATE')
values (1,'admin','159ae5f48f14e89f3f9f54dc995f1f276d472b54','25-05-2017 10:32:02');
oracle:
insert into fq_user(USER_ID,LOGIN_NAME,PASSWORD,REG_DATE,EMAIL)
values (1,'admin','159ae5f48f14e89f3f9f54dc995f1f276d472b54',to_date('25-05-2017 10:32:02', 'dd-mm-yyyy hh24:mi:ss'));