Mysql 使用或不使用约束

Mysql 使用或不使用约束,mysql,oracle,syntax,Mysql,Oracle,Syntax,以下语法之间有什么区别: CONSTRAINT user_roles_id_pk PRIMARY KEY(role_id), CONSTRAINT students_role_id_fk FOREIGN KEY(student_id) REFERENCES students(student_id), CONSTRAINT ratings_institute_id_fk FOREIGN KEY(institute_id) REFERENCES institutes(institute_id) ON

以下语法之间有什么区别:

CONSTRAINT user_roles_id_pk PRIMARY KEY(role_id),
CONSTRAINT students_role_id_fk FOREIGN KEY(student_id) REFERENCES students(student_id),
CONSTRAINT ratings_institute_id_fk FOREIGN KEY(institute_id) REFERENCES institutes(institute_id) ON DELETE CASCADE,
CONSTRAINT ratings_ip_uq UNIQUE(ip) 


我在oracle sql developer中编写create语句时使用了第一组代码。不幸的是,我必须将oracle代码转换成mysql才能在xampp上运行。

除了第二个索引(外键引用不同的字段)之外,4个约束是相同的。但是,即使在mysql中,您也可以遵循类似约束的语法,请参见以下内容的mysql文档:


此外,您可以将oracle与apache和php一起使用,这样您就不必仅仅因为预打包的安装程序在默认情况下没有配置oracle而替换oracle。

MySQL中的
约束是可选的,oracle中的(如果内存可用)关键字是可选的。其目的是允许您显式命名约束,这有助于提供自我文档,并且在以后需要禁用约束或删除或重建关联索引时也很有用。

在Oracle中,您可以使用
CONSTRAINT-containt\u-name…
语法指定名称,也可以省去它,Oracle将约束命名为类似
SYS\u C123456
的名称。自己命名约束可以更容易地调试代码,因为会出现以下错误:

ORA-02291: integrity constraint (TEST.SYS_C009329) violated - parent key not found
并没有告诉你很多关于你在哪个专栏中出错的信息-但是:

ORA-02291: integrity constraint (TEST.ROLES__INSTITUTE_ID__FK) violated - parent key not found
准确地告诉您发生错误的表和列(如果您用足够详细的信息命名约束)

您可以在此处看到约束名称的差异:

Oracle安装程序

CREATE TABLE students ( id INT CONSTRAINT students__id__pk PRIMARY KEY );
CREATE TABLE institutes( id INT CONSTRAINT institutes__id__pk PRIMARY KEY );

CREATE TABLE roles(
  role_id      INT,
  student_id   INT,
  institute_id INT,
  ip           VARCHAR2(15),
  CONSTRAINT roles__role_id__pk PRIMARY KEY(role_id),
  CONSTRAINT roles__student_id__fk
    FOREIGN KEY(student_id) REFERENCES students(id),
  CONSTRAINT roles__institute_id__fk
    FOREIGN KEY(institute_id) REFERENCES institutes(id),
  CONSTRAINT roles__ip__u UNIQUE(ip) 
);


CREATE TABLE roles1(
  role_id      INT,
  student_id   INT,
  institute_id INT,
  ip           VARCHAR2(15),
  PRIMARY KEY(role_id),
  FOREIGN KEY(student_id) REFERENCES students(id),
  FOREIGN KEY(institute_id) REFERENCES institutes(id),
  UNIQUE(ip) 
);
CONSTRAINT_NAME                CONSTRAINT_TYPE INDEX_NAME                     R_CONSTRAINT_NAME            
------------------------------ --------------- ------------------------------ ------------------------------
ROLES__ROLE_ID__PK             P               ROLES__ROLE_ID__PK                                            
ROLES__IP__U                   U               ROLES__IP__U                                                  
ROLES__STUDENT_ID__FK          R                                              STUDENTS__ID__PK               
ROLES__INSTITUTE_ID__FK        R                                              INSTITUTES__ID__PK             
SELECT constraint_name,
       constraint_type,
       index_name,
       r_constraint_name
FROM   USER_CONSTRAINTS
WHERE  table_name = 'ROLES1';
CONSTRAINT_NAME                CONSTRAINT_TYPE INDEX_NAME                     R_CONSTRAINT_NAME            
------------------------------ --------------- ------------------------------ ------------------------------
SYS_C009326                    P               SYS_C009326                                                   
SYS_C009327                    U               SYS_C009327                                                   
SYS_C009328                    R                                              STUDENTS__ID__PK               
SYS_C009329                    R                                              INSTITUTES__ID__PK             
查询-命名约束

SELECT constraint_name,
       constraint_type,
       index_name,
       r_constraint_name
FROM   USER_CONSTRAINTS
WHERE  table_name = 'ROLES';
输出

CREATE TABLE students ( id INT CONSTRAINT students__id__pk PRIMARY KEY );
CREATE TABLE institutes( id INT CONSTRAINT institutes__id__pk PRIMARY KEY );

CREATE TABLE roles(
  role_id      INT,
  student_id   INT,
  institute_id INT,
  ip           VARCHAR2(15),
  CONSTRAINT roles__role_id__pk PRIMARY KEY(role_id),
  CONSTRAINT roles__student_id__fk
    FOREIGN KEY(student_id) REFERENCES students(id),
  CONSTRAINT roles__institute_id__fk
    FOREIGN KEY(institute_id) REFERENCES institutes(id),
  CONSTRAINT roles__ip__u UNIQUE(ip) 
);


CREATE TABLE roles1(
  role_id      INT,
  student_id   INT,
  institute_id INT,
  ip           VARCHAR2(15),
  PRIMARY KEY(role_id),
  FOREIGN KEY(student_id) REFERENCES students(id),
  FOREIGN KEY(institute_id) REFERENCES institutes(id),
  UNIQUE(ip) 
);
CONSTRAINT_NAME                CONSTRAINT_TYPE INDEX_NAME                     R_CONSTRAINT_NAME            
------------------------------ --------------- ------------------------------ ------------------------------
ROLES__ROLE_ID__PK             P               ROLES__ROLE_ID__PK                                            
ROLES__IP__U                   U               ROLES__IP__U                                                  
ROLES__STUDENT_ID__FK          R                                              STUDENTS__ID__PK               
ROLES__INSTITUTE_ID__FK        R                                              INSTITUTES__ID__PK             
SELECT constraint_name,
       constraint_type,
       index_name,
       r_constraint_name
FROM   USER_CONSTRAINTS
WHERE  table_name = 'ROLES1';
CONSTRAINT_NAME                CONSTRAINT_TYPE INDEX_NAME                     R_CONSTRAINT_NAME            
------------------------------ --------------- ------------------------------ ------------------------------
SYS_C009326                    P               SYS_C009326                                                   
SYS_C009327                    U               SYS_C009327                                                   
SYS_C009328                    R                                              STUDENTS__ID__PK               
SYS_C009329                    R                                              INSTITUTES__ID__PK             
查询2-未命名约束

CREATE TABLE students ( id INT CONSTRAINT students__id__pk PRIMARY KEY );
CREATE TABLE institutes( id INT CONSTRAINT institutes__id__pk PRIMARY KEY );

CREATE TABLE roles(
  role_id      INT,
  student_id   INT,
  institute_id INT,
  ip           VARCHAR2(15),
  CONSTRAINT roles__role_id__pk PRIMARY KEY(role_id),
  CONSTRAINT roles__student_id__fk
    FOREIGN KEY(student_id) REFERENCES students(id),
  CONSTRAINT roles__institute_id__fk
    FOREIGN KEY(institute_id) REFERENCES institutes(id),
  CONSTRAINT roles__ip__u UNIQUE(ip) 
);


CREATE TABLE roles1(
  role_id      INT,
  student_id   INT,
  institute_id INT,
  ip           VARCHAR2(15),
  PRIMARY KEY(role_id),
  FOREIGN KEY(student_id) REFERENCES students(id),
  FOREIGN KEY(institute_id) REFERENCES institutes(id),
  UNIQUE(ip) 
);
CONSTRAINT_NAME                CONSTRAINT_TYPE INDEX_NAME                     R_CONSTRAINT_NAME            
------------------------------ --------------- ------------------------------ ------------------------------
ROLES__ROLE_ID__PK             P               ROLES__ROLE_ID__PK                                            
ROLES__IP__U                   U               ROLES__IP__U                                                  
ROLES__STUDENT_ID__FK          R                                              STUDENTS__ID__PK               
ROLES__INSTITUTE_ID__FK        R                                              INSTITUTES__ID__PK             
SELECT constraint_name,
       constraint_type,
       index_name,
       r_constraint_name
FROM   USER_CONSTRAINTS
WHERE  table_name = 'ROLES1';
CONSTRAINT_NAME                CONSTRAINT_TYPE INDEX_NAME                     R_CONSTRAINT_NAME            
------------------------------ --------------- ------------------------------ ------------------------------
SYS_C009326                    P               SYS_C009326                                                   
SYS_C009327                    U               SYS_C009327                                                   
SYS_C009328                    R                                              STUDENTS__ID__PK               
SYS_C009329                    R                                              INSTITUTES__ID__PK             
输出

CREATE TABLE students ( id INT CONSTRAINT students__id__pk PRIMARY KEY );
CREATE TABLE institutes( id INT CONSTRAINT institutes__id__pk PRIMARY KEY );

CREATE TABLE roles(
  role_id      INT,
  student_id   INT,
  institute_id INT,
  ip           VARCHAR2(15),
  CONSTRAINT roles__role_id__pk PRIMARY KEY(role_id),
  CONSTRAINT roles__student_id__fk
    FOREIGN KEY(student_id) REFERENCES students(id),
  CONSTRAINT roles__institute_id__fk
    FOREIGN KEY(institute_id) REFERENCES institutes(id),
  CONSTRAINT roles__ip__u UNIQUE(ip) 
);


CREATE TABLE roles1(
  role_id      INT,
  student_id   INT,
  institute_id INT,
  ip           VARCHAR2(15),
  PRIMARY KEY(role_id),
  FOREIGN KEY(student_id) REFERENCES students(id),
  FOREIGN KEY(institute_id) REFERENCES institutes(id),
  UNIQUE(ip) 
);
CONSTRAINT_NAME                CONSTRAINT_TYPE INDEX_NAME                     R_CONSTRAINT_NAME            
------------------------------ --------------- ------------------------------ ------------------------------
ROLES__ROLE_ID__PK             P               ROLES__ROLE_ID__PK                                            
ROLES__IP__U                   U               ROLES__IP__U                                                  
ROLES__STUDENT_ID__FK          R                                              STUDENTS__ID__PK               
ROLES__INSTITUTE_ID__FK        R                                              INSTITUTES__ID__PK             
SELECT constraint_name,
       constraint_type,
       index_name,
       r_constraint_name
FROM   USER_CONSTRAINTS
WHERE  table_name = 'ROLES1';
CONSTRAINT_NAME                CONSTRAINT_TYPE INDEX_NAME                     R_CONSTRAINT_NAME            
------------------------------ --------------- ------------------------------ ------------------------------
SYS_C009326                    P               SYS_C009326                                                   
SYS_C009327                    U               SYS_C009327                                                   
SYS_C009328                    R                                              STUDENTS__ID__PK               
SYS_C009329                    R                                              INSTITUTES__ID__PK             

第一组为约束指定了一个特定的名称,而第二组则没有,并由系统决定。