您的位置:首页 > 数据库 > Oracle

MySql 和 Oracle 差异 如何建立数据库脚本,序列,自增长

2012-10-24 23:20 726 查看
  如何在不同数据库编写数据库脚本。  

需求如下:建立3张表,用户表,用户部门表(中间表),部门表。中间表有2个外键。  



  首先用mysql 建表

-- 创建库mydb,并进入库
CREATE database mydb ;
USE mydb ;

-- 清除所有外键
SET FOREIGN_KEY_CHECKS=0;

-- 如果存在删除表 ,这里要注意标识的是 ` (键盘1 左边的键) 而不是单引号
DROP TABLE IF EXISTS `YH` ;
DROP TABLE IF EXISTS `YH_DEPT` ;
DROP TABLE IF EXISTS `DEPT` ;

-- 创建用户表,设置主键自增长
CREATE TABLE YH(
YH_id        int    not null auto_increment ,
YH_name        varchar(50)  ,
YH_photo    varchar(100) ,
YH_sex        bit ,
YH_AGE        int ,constraint PK_YH primary key (YH_id)
);

-- 创建用户部门,设置主键自增长 ,此表为中间表
CREATE TABLE YH_DEPT(
YD_id        int    not null auto_increment ,
YH_id        int ,
DEPT_id        int ,constraint PK_YD_id primary key (YD_id)

);

-- 创建部门,设置主键自增长
CREATE TABLE DEPT (
DEPT_id        int        not null auto_increment,
DEPT_name    varchar(50)    ,
DEPT_photo    varchar(100)    ,
DEPT_postal_code  varchar(50)    ,
constraint PK_DEPT_id primary key (DEPT_id)
);

-- 中间表外键设置
alter table YH_DEPT add constraint FK_YH_id foreign key (YH_id) references YH (YH_id);
alter table YH_DEPT add constraint FK_DEPT_id foreign key (DEPT_id) references DEPT (DEPT_id);


  MYSQL 建表注意事项:

    1. 一定要先清除所有外键,这样删表就不会报错了。

    2. 删表语句不要忘记 IF EXISTS DROP TABLE IF EXISTS `YH`

    3. 尽量放到所有表的最后。

    4. mysql 没有向oracle有序列的概念,只要在主键上加 auto_increment 自增长即可。

 那在oracle中要如何建表呢?

  如下

-- 忽略外键直接删除表,purge的意思是不把表放到回收站中,直接删除
drop table YH cascade constraints purge;
drop table YH_DEPT cascade constraints purge;
drop table DEPTMENT cascade constraints purge;

-- 删除序列
drop sequence YH_seq ;
drop sequence YH_DEPT_seq ;
drop sequence DEPT_seq ;

-- 创建序列
create sequence YH_seq ;
create sequence YH_DEPT_seq ;
create sequence DEPT_seq ;

-- 创建用户表, oracle没有boolean的表示也就是mysql的bit 类型, 所以使用number(1)来表示性别
CREATE TABLE YH(
YH_id        number        not null ,
YH_name        varchar2(50)  ,
YH_photo    varchar2(100) ,
YH_sex        number(1) ,
YH_AGE        number ,
constraint PK_YH primary key (YH_id)
);

-- 创建用户部门表。
CREATE TABLE YH_DEPT(
YD_id        number        not null ,
YH_id        number ,
DEPT_id        number ,
constraint PK_YD_id primary key (YD_id)
);

-- 创建部门表
CREATE TABLE DEPTMENT (
DEPT_id        number        not null ,
DEPT_name    varchar2(50)    ,
DEPT_photo    varchar2(100)    ,
DEPT_postal_code  varchar2(50)    ,
constraint PK_DEPT_id primary key (DEPT_id)
);

-- 中间表加入加入外键
alter table YH_DEPT add constraint FK_YH_id foreign key (YH_id) references YH (YH_id);
alter table YH_DEPT add constraint FK_DEPT_id foreign key (DEPT_id) references DEPTMENT (DEPT_id);

-- 测试数据
INSERT INTO DEPTMENT(dept_id , dept_name , dept_photo ,dept_postal_code) VALUES(1,'开发部',null,'010');

COMMIT ;

   oracle数据库脚本要注意的几点:

      1. 字段中没有boolean类型也就是mysql 表中的bit 字段。

      2. 建表前要为表加入序列,自增长列。在表中不体现。

      3. 别忘记commit 提交,mysql中是不需要的

      4. 删除时没有加 PURGE ,表不会真正删除而是放到回收站中,

        清空回收站的命令是 purge recyclebin ;

  

   附加:

  Orcale 和Mysql的建库方式不一样,oracle需要先建立表空间(就好像新建文件夹一下,把你想保存的文件放进去),先进入system 用户下或dba用户下 ,输入以下命令如下:

  第一步:建立表空间

CREATE TABLESPACE users
LOGGING
DATAFILE 'D:\users.dbf' SIZE 10M
EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;


  第二步:创建使用者帐号,并分配权限
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: