Oracle数据库---------------------------约束的创建与管理(唯一约束)

关于Oracle数据库的学习记录:

三十七、约束的创建与管理(唯一约束)
唯一约束(UNIQUE,NK)
如果说现在数据表的某一个列的内容不允许重复,例如:每一个用户都有自己的email地址,email地址不允许重复,那么就使用UNIQUE进行声明

范例:编写数据库脚本
DROP TABLE member PURGE;
CREATE TABLE member(
    mid       NUMBER,
    name      VARCHAR2(20)   NOT NULL,
    email     VARCHAR2(30)   UNIQUE
);
此时就表示在email字段上不允许保存重复的数据内容

范例:增加正确数据
INSERT INTO member(mid,name) VALUES(10,'张三');
INSERT INTO member(mid,name) VALUES(60,'张三');
INSERT INTO member(mid,name,email) VALUES(20,'李四','[email protected]');
虽然具备有唯一约束,但是null并不会受到唯一约束的限制,即:默认情况下唯一约束可以设置null数据

范例:增加错误数据
INSERT INTO member(mid,name,email) VALUES(40,'王五','[email protected]');
此时由于邮箱信息重复了,所以执行后会出现错误提示信息:“ORA-00001:违反唯一约束条件(SCOTT.SYS_C0011064)”
实际上这个时候已经返回了错误信息,并且返回了错误的对象内容,在Oracle里面所有的约束也是对象,也就是说,现在设置的唯一约束就是一个对象,而返回的"SYS_C0011064"是约束对象的名字,如果要想知道这个含义,可以通过数据字典查看,使用"user_constraints"

范例:查看约束对象
COL owner FOR A10;
COL constraint_name FOR A20;
COL table_name FOR A20;
SELECT owner,constraint_name,table_name FROM user_constraints;
这个数据字典只是告诉用户哪个表上有约束,但是并不知道这个约束对象对应的是哪个列,如果要想知道约束对应的是哪个列,则可以使用"user_cons_columns"

范例:继续查看约束对象
COL owner FOR A10;
COL constraint_name FOR A20;
COL table_name FOR A20;
COL column_name FOR A20;
SELECT * FROM user_cons_columns;
以上的确是查找到了约束对象对应的数据列,但是如果所有的错误信息都这样查,那基本上开发就疯了。最好的做法绝对不是查询数据字典,所以可以在建立约束的时候为约束设置一个对象名字。可以采用“约束类型简写_字段”的形式完成,例如:UNIQUE表示唯一约束,那么可以简写UK_EMAIL为约束名称

范例:为约束设置名称
DROP TABLE member PURGE;
CREATE TABLE member(
    mid       NUMBER,
    name      VARCHAR2(20)   NOT NULL,
    email     VARCHAR2(30),
    CONSTRAINT uk_email UNIQUE(email)
);
设置完约束名称之后,如果执行错误后会出现这样的提示信息:“ORA-00001:违反唯一约束条件(SCOTT.UK_EAMIL)”,信息很明确

猜你喜欢

转载自blog.csdn.net/amuist_ting/article/details/80694280
今日推荐