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
第一组为约束指定了一个特定的名称,而第二组则没有,并由系统决定。