Oracle和MySQL之间的代码差异形式

时间:2019-02-21 23:47:48

标签: mysql sql oracle

我正在通过http://www.sqlines.com/online将Oracle中的代码转换为MYSQL。该代码在Oracle中是完全正确的(创建的表和数据没有任何错误消息),但是当我复制代码并将其粘贴到MYSQL时,会出现错误消息:

  

SQL错误[1005] [HY000]:无法创建表PS> '* foo' -like '`* *' True universityddl(错误号:150“外键约束格式不正确”)。

我不知道是什么原因,因为我是DBMS的新手。如果有人可以帮助,我将不胜感激。

Oracle中的代码:

faculty

转换后的代码(转换为MY SQL):

CREATE TABLE Faculty ( 
    FacNo         CHAR(11)      NOT NULL, 
    FacFirstName  VARCHAR(30)   NOT NULL, 
    FacLastName   VARCHAR(30)   NOT NULL, 
    FacCity       VARCHAR(30)   NOT NULL, 
    FacState      CHAR(2)       NOT NULL, 
    FacDept       CHAR(6)       NULL, 
    FacRank       CHAR(4)       NULL, 
    FacSalary     DECIMAL(10,2) NULL, 
    FacSupervisor CHAR(11)      NULL, 
    FacHireDate   DATE      NULL, 
    FacZipCode    CHAR(10)      NOT NULL, 
    CONSTRAINT FacultyPK PRIMARY KEY (FacNo),  
    CONSTRAINT SupervisorFK FOREIGN KEY (FacSupervisor) REFERENCES Faculty
);

CREATE TABLE Course ( 
    CourseNo      CHAR(6)       NOT NULL, 
    CrsDesc       VARCHAR(50)   NOT NULL, 
    CrsUnits      INTEGER       NULL, 
    CONSTRAINT CoursePK PRIMARY KEY (CourseNo) 
);

CREATE TABLE Offering ( 
    OfferNo       INTEGER       NOT NULL, 
    CourseNo      CHAR(6)       NOT NULL, 
    OffTerm       CHAR(6)       NOT NULL, 
    OffYear       INTEGER       NOT NULL, 
    OffLocation   VARCHAR(30)   NULL, 
    OffTime       VARCHAR(10)   NULL, 
    FacNo         CHAR(11)      NULL, 
    OffDays       CHAR(4)       NULL, 
    CONSTRAINT OfferingPK PRIMARY KEY (OfferNo), 
    CONSTRAINT CourseFK FOREIGN KEY (CourseNo) REFERENCES Course, 
    CONSTRAINT FacultyFK FOREIGN KEY (FacNo) REFERENCES Faculty
);

CREATE TABLE Student ( 
    StdNo         CHAR(11)      NOT NULL, 
    StdFirstName  VARCHAR(30)   NOT NULL, 
    StdLastName   VARCHAR(30)   NOT NULL, 
    StdCity       VARCHAR(30)   NOT NULL, 
    StdState      CHAR(2)       NOT NULL, 
    StdZip        CHAR(10)      NOT NULL, 
    StdMajor      CHAR(6)       NULL, 
    StdClass      CHAR(2)       NULL, 
    StdGPA        DECIMAL(3,2)  NULL, 
    CONSTRAINT StudentPk PRIMARY KEY (StdNo) 
);

CREATE TABLE Enrollment( 
    OfferNo       INTEGER       NOT NULL, 
    StdNo         CHAR(11)      NOT NULL, 
    EnrGrade      DECIMAL(3,2)  NULL, 
    CONSTRAINT EnrollmentPK PRIMARY KEY (OfferNo,StdNo), 
    CONSTRAINT OfferingFK FOREIGN KEY (OfferNo) REFERENCES Offering 
                      ON DELETE CASCADE,
    CONSTRAINT StudentFK FOREIGN KEY (StdNo) REFERENCES Student 
                      ON DELETE CASCADE
);

INSERT INTO Faculty VALUES ('543210987','VICTORIA','EMMANUEL','BOTHELL','WA','MS','PROF',120000.0,NULL,'15/Apr/1998','98011-2242');

INSERT INTO Faculty VALUES ('654321098','LEONARD','FIBON','SEATTLE','WA','MS','ASSC',70000.00,'543210987','1/May/1996','98121-0094');

INSERT INTO Faculty VALUES ('098765432','LEONARD','VINCE','SEATTLE','WA','MS','ASST',35000.00,'654321098','10/Apr/1997','98111-9921');

INSERT INTO Faculty VALUES ('765432109','NICKI','MACON','BELLEVUE','WA','FIN','PROF',65000.00,NULL,'11/Apr/1999','98015-9945');

INSERT INTO Faculty VALUES ('876543210','CRISTOPHER','COLAN','SEATTLE','WA','MS','ASST',40000.00,'654321098','1/Mar/2001','98114-1332');

INSERT INTO Faculty VALUES ('987654321','JULIA','MILLS','SEATTLE','WA','FIN','ASSC',75000.00,'765432109','15/Mar/2002','98114-9954');

INSERT INTO Course VALUES ('FIN300','FUNDAMENTALS OF FINANCE',4);

INSERT INTO Course VALUES ('FIN450','PRINCIPLES OF INVESTMENTS',4);

INSERT INTO Course VALUES ('FIN480','CORPORATE FINANCE',4);

INSERT INTO Course VALUES ('IS320','FUNDAMENTALS OF BUSINESS PROGRAMMING',4);

INSERT INTO Course VALUES ('IS460','SYSTEMS ANALYSIS',4);

INSERT INTO Course VALUES ('IS470','BUSINESS DATA COMMUNICATIONS',4);

INSERT INTO Course VALUES ('IS480','FUNDAMENTALS OF DATABASE MANAGEMENT',4);

INSERT INTO Offering VALUES (1111,'IS320','SUMMER',2010,'BLM302','10:30:00',NULL,'MW');

INSERT INTO Offering VALUES (1234,'IS320','FALL',2009,'BLM302','10:30:00','098765432','MW');

INSERT INTO Offering VALUES (2222,'IS460','SUMMER',2009,'BLM412','13:30:00',NULL,'TTH');

INSERT INTO Offering VALUES (3333,'IS320','SPRING',2010,'BLM214','8:30:00','098765432','MW');

INSERT INTO Offering VALUES (4321,'IS320','FALL',2009,'BLM214','15:30:00','098765432','TTH');

INSERT INTO Offering VALUES (4444,'IS320','WINTER',2010,'BLM302','15:30:00','543210987','TTH');

INSERT INTO Offering VALUES (5555,'FIN300','WINTER',2010,'BLM207','8:30:00','765432109','MW');

INSERT INTO Offering VALUES (5678,'IS480','WINTER',2010,'BLM302','10:30:00','987654321','MW');

INSERT INTO Offering VALUES (5679,'IS480','SPRING',2010,'BLM412','15:30:00','876543210','TTH');

INSERT INTO Offering VALUES (6666,'FIN450','WINTER',2010,'BLM212','10:30:00','987654321','TTH');

INSERT INTO Offering VALUES (7777,'FIN480','SPRING',2010,'BLM305','13:30:00','765432109','MW');

INSERT INTO Offering VALUES (8888,'IS320','SUMMER',2010,'BLM405','13:30:00','654321098','MW');

INSERT INTO Offering VALUES (9876,'IS460','SPRING',2010,'BLM307','13:30:00','654321098','TTH');

INSERT INTO Student VALUES ('123456789','HOMER','WELLS','SEATTLE','WA','98121-1111','IS','FR',3.00);

INSERT INTO Student VALUES ('124567890','BOB','NORBERT','BOTHELL','WA','98011-2121','FIN','JR',2.70);

INSERT INTO Student VALUES ('234567890','CANDY','KENDALL','TACOMA','WA','99042-3321','ACCT','JR',3.50);

INSERT INTO Student VALUES ('345678901','WALLY','KENDALL','SEATTLE','WA','98123-1141','IS','SR',2.80);

INSERT INTO Student VALUES ('456789012','JOE','ESTRADA','SEATTLE','WA','98121-2333','FIN','SR',3.20);

INSERT INTO Student VALUES ('567890123','MARIAH','DODGE','SEATTLE','WA','98114-0021','IS','JR',3.60);

INSERT INTO Student VALUES ('678901234','TESS','DODGE','REDMOND','WA','98116-2344','ACCT','SO',3.30);

INSERT INTO Student VALUES ('789012345','ROBERTO','MORALES','SEATTLE','WA','98121-2212','FIN','JR',2.50);

INSERT INTO Student VALUES ('876543210','CRISTOPHER','COLAN','SEATTLE','WA','98114-1332','IS','SR',4.00);

INSERT INTO Student VALUES ('890123456','LUKE','BRAZZI','SEATTLE','WA','98116-0021','IS','SR',2.20);

INSERT INTO Student VALUES ('901234567','WILLIAM','PILGRIM','BOTHELL','WA','98113-1885','IS','SO',3.80);

INSERT INTO Enrollment VALUES (1234,'123456789',3.30);

INSERT INTO Enrollment VALUES (1234,'234567890',3.50);

INSERT INTO Enrollment VALUES (1234,'345678901',3.20);

INSERT INTO Enrollment VALUES (1234,'456789012',3.10);

INSERT INTO Enrollment VALUES (1234,'567890123',3.80);

INSERT INTO Enrollment VALUES (1234,'678901234',3.40);

INSERT INTO Enrollment VALUES (4321,'123456789',3.50);

INSERT INTO Enrollment VALUES (4321,'124567890',3.20);

INSERT INTO Enrollment VALUES (4321,'789012345',3.50);

INSERT INTO Enrollment VALUES (4321,'876543210',3.10);

INSERT INTO Enrollment VALUES (4321,'890123456',3.40);

INSERT INTO Enrollment VALUES (4321,'901234567',3.10);

INSERT INTO Enrollment VALUES (5555,'123456789',3.20);

INSERT INTO Enrollment VALUES (5555,'124567890',2.70);

INSERT INTO Enrollment VALUES (5678,'123456789',3.20);

INSERT INTO Enrollment VALUES (5678,'234567890',2.80);

INSERT INTO Enrollment VALUES (5678,'345678901',3.30);

INSERT INTO Enrollment VALUES (5678,'456789012',3.40);

INSERT INTO Enrollment VALUES (5678,'567890123',2.60);

INSERT INTO Enrollment VALUES (5679,'123456789',2.00);

INSERT INTO Enrollment VALUES (5679,'124567890',3.70);

INSERT INTO Enrollment VALUES (5679,'678901234',3.30);

INSERT INTO Enrollment VALUES (5679,'789012345',3.80);

INSERT INTO Enrollment VALUES (5679,'890123456',2.90);

INSERT INTO Enrollment VALUES (5679,'901234567',3.10);

INSERT INTO Enrollment VALUES (6666,'234567890',3.10);

INSERT INTO Enrollment VALUES (6666,'567890123',3.60);

INSERT INTO Enrollment VALUES (7777,'876543210',3.40);

INSERT INTO Enrollment VALUES (7777,'890123456',3.70);

INSERT INTO Enrollment VALUES (7777,'901234567',3.40);

INSERT INTO Enrollment VALUES (9876,'124567890',3.50);

INSERT INTO Enrollment VALUES (9876,'234567890',3.20);

INSERT INTO Enrollment VALUES (9876,'345678901',3.20);

INSERT INTO Enrollment VALUES (9876,'456789012',3.40);

INSERT INTO Enrollment VALUES (9876,'567890123',2.60);

INSERT INTO Enrollment VALUES (9876,'678901234',3.30);

INSERT INTO Enrollment VALUES (9876,'901234567',4.00);

2 个答案:

答案 0 :(得分:1)

在MySQL中,外键约束的定义必须包括列名和表名(请参见manual)。因此,例如,您需要更改

CONSTRAINT CourseFK FOREIGN KEY (CourseNo) REFERENCES Course

CONSTRAINT CourseFK FOREIGN KEY (CourseNo) REFERENCES Course(CourseNo)

答案 1 :(得分:1)

1)正如尼克的回答,外键语法需要固定。有5个外键声明可以更改:

CREATE TABLE Faculty ( 
    ...
    CONSTRAINT SupervisorFK FOREIGN KEY (FacSupervisor) REFERENCES Faculty(FacNo)
);

CREATE TABLE Offering ( 
    ...
    CONSTRAINT CourseFK FOREIGN KEY (CourseNo) REFERENCES Course(CourseNo),
    CONSTRAINT FacultyFK FOREIGN KEY (FacNo) REFERENCES Faculty(FacNo)
);

CREATE TABLE Enrollment( 
    ....
    CONSTRAINT OfferingFK FOREIGN KEY (OfferNo) REFERENCES Offering(OfferNo) 
        ON DELETE CASCADE,
    CONSTRAINT StudentFK FOREIGN KEY (StdNo) REFERENCES Student(StdNo) 
        ON DELETE CASCADE
);

CONSTRAINT CourseFK FOREIGN KEY (CourseNo) REFERENCES Course(CourseNo)

代替:

CONSTRAINT CourseFK FOREIGN KEY (CourseNo) REFERENCES Course

2)在插入数据时,在处理日期时应该会遇到问题。您为数据类型为'1/Mar/2001'(即date)的列提供了类似Faculty.FacHireDate的MySQL值:它将不接受它。日期的默认格式为yyyy-mm-dd

一种解决方案是使用TO_CHAR(FacHireDate, 'yyyy-mm-dd')或通过更改NLS parameter NLS_DATE_FORMAT从Oracle提取数据时转换格式。另外,您可以使用MySQL function STR_TO_DATE()将字符串转换为日期:

INSERT INTO Faculty VALUES (
    '543210987',
    'VICTORIA',
    'EMMANUEL',
    'BOTHELL',
    'WA',
    'MS',
    'PROF',
    120000.0,
    NULL,
    STR_TO_DATE('15/Apr/1998', '%d/%b/%Y'),
    '98011-2242'
);

通过这些修复程序,脚本可以在 this MySQL DB Fiddle 中正常运行。