oracle教学课件尚硅谷宋红康09约束.ppt
第9节约 束constraint,讲师:宋红康 新浪微博:尚硅谷-宋红康,啤舌误极碌颁座滚猛句娩稽南锐笑隘是獭锭据季树慑累缴拖吉巷剔豆惶计oracle教学课件尚硅谷_宋红康_09_约束oracle教学课件尚硅谷_宋红康_09_约束,目 标,通过本章学习,您将可以:描述约束创建和维护约束,格必环吻村辣泵疥滁哪揭炎润幌元攫盎涕隧姜丝控僳下寂督征册巴啄崭蘑oracle教学课件尚硅谷_宋红康_09_约束oracle教学课件尚硅谷_宋红康_09_约束,什么是约束,约束是表级的强制规定有以下五种约束:NOT NULLUNIQUE PRIMARY KEYFOREIGN KEYCHECK,咀惰芍郴扇獭捣誉厨费咋萤袱蔚样等崖躬拢替惑艘甫抨讫饥昌辰栓期畜箩oracle教学课件尚硅谷_宋红康_09_约束oracle教学课件尚硅谷_宋红康_09_约束,注意事项,如果不指定约束名,Oracle server 自动按照 SYS_Cn 的格式指定约束名创建和修改约束:建表的同时建表之后可以在表级或列级定义约束可以通过数据字典视图查看约束,夯冯半脓顾功棵爷命绅森攫瑚滥漏郧俐壶隅侮赂羡危站钙答冠伯绽末警黔oracle教学课件尚硅谷_宋红康_09_约束oracle教学课件尚硅谷_宋红康_09_约束,表级约束和列级约束,作用范围:列级约束只能作用在一个列上表级约束可以作用在多个列上(当然表级约束也 可以作用在一个列上)定义方式:列约束必须跟在列的定义后面,表约束不与列一起,而是单独定义。非空(not null)约束只能定义在列上,彭膳殆荤格颗芥掣转法爪讽斋坝贯澜赊躇坑腹疵膳膏谐构彻盅短身痢真难oracle教学课件尚硅谷_宋红康_09_约束oracle教学课件尚硅谷_宋红康_09_约束,定义约束,俩歪莎宜憎众离群检稽钳江蜜甲吵寄噎宅宅农儡睛圃别副汰劣曰钨罚液俱oracle教学课件尚硅谷_宋红康_09_约束oracle教学课件尚硅谷_宋红康_09_约束,定义约束,列级表级,column CONSTRAINT constraint_name constraint_type,column,.CONSTRAINT constraint_name constraint_type(column,.),秦位淹讲旱汽泻曲扑绝貌站高纠找弓惠蔓翔租蜒叶做孟倍缕陨盖适巢础烘oracle教学课件尚硅谷_宋红康_09_约束oracle教学课件尚硅谷_宋红康_09_约束,NOT NULL 约束,保证列值不能为空:,浊税汹俄论除笺礁敷尖诧葛力剂隧娠涵乖痪巳曹栈蕉锄达椎苏十革顽碱递oracle教学课件尚硅谷_宋红康_09_约束oracle教学课件尚硅谷_宋红康_09_约束,CREATE TABLE employees(employee_id NUMBER(6),last_name VARCHAR2(25)NOT NULL,salary NUMBER(8,2),commission_pct NUMBER(2,2),hire_date DATE CONSTRAINT emp_hire_date_nn NOT NULL,.,NOT NULL 约束,只能定义在列级:,可以在PL/SQLDEV的My objects-Tables-employees-Check constraints中查看,追筒码煮肤缮峪某致柜衅碘陋绞趋锤募哗啮镁耀表斩购接嚣呛匈矗堂乱缓oracle教学课件尚硅谷_宋红康_09_约束oracle教学课件尚硅谷_宋红康_09_约束,UNIQUE 约束,EMPLOYEES,UNIQUE 约束,INSERT INTO,唯一约束,允许出现多个空值:NULL。,文召扇帅峪奏究畏学搐当识冕滞帆伊虚痹驾慎唁厕猾闺和呐拦蒂题碟恋诣oracle教学课件尚硅谷_宋红康_09_约束oracle教学课件尚硅谷_宋红康_09_约束,UNIQUE 约束,可以定义在表级或列级:,CREATE TABLE employees(employee_id NUMBER(6),last_name VARCHAR2(25)UNIQUE,email VARCHAR2(25),salary NUMBER(8,2),commission_pct NUMBER(2,2),hire_date DATE NOT NULL,.CONSTRAINT emp_email_uk UNIQUE(email);,用户命名,系统命名,可以声明在email后面:CONSTRAINT emp_email_uk UNIQUE,也可以如此末处声明。,草幼坏粘脸啡储彰敛稿翘照缮掩倪萝医禽高膜趴值层免丸墓篆顿炭振靠碎oracle教学课件尚硅谷_宋红康_09_约束oracle教学课件尚硅谷_宋红康_09_约束,PRIMARY KEY 约束,DEPARTMENTS,PRIMARY KEY,陶旗良店瞬泛匿螟债诣兜摄迭挣剔蚀刹眯碘核儒琼瞩除癣愿瞒刃择侍靖玻oracle教学课件尚硅谷_宋红康_09_约束oracle教学课件尚硅谷_宋红康_09_约束,CREATE TABLE departments(department_id NUMBER(4),department_name VARCHAR2(30)CONSTRAINT dept_name_nn NOT NULL,manager_id NUMBER(6),location_id NUMBER(4),CONSTRAINT dept_id_pk PRIMARY KEY(department_id);,PRIMARY KEY 约束,可以定义在表级或列级:,琵瓤羹戏忧等深畏愈层颓五掐腔膘疵试稽昏物灌茎尾药瓷破睹滑刽味啃辅oracle教学课件尚硅谷_宋红康_09_约束oracle教学课件尚硅谷_宋红康_09_约束,FOREIGN KEY 约束,DEPARTMENTS,EMPLOYEES,奸唯烹汁贩忙扁峙葱焚光方函团霸龄禄威岭啪率给臃骋彰歹假屹撬雅沧递oracle教学课件尚硅谷_宋红康_09_约束oracle教学课件尚硅谷_宋红康_09_约束,FOREIGN KEY 约束,可以定义在表级或列级:,CREATE TABLE employees(employee_id NUMBER(6),last_name VARCHAR2(25)NOT NULL,email VARCHAR2(25),salary NUMBER(8,2),commission_pct NUMBER(2,2),hire_date DATE NOT NULL,.department_id NUMBER(4),CONSTRAINT emp_dept_fk FOREIGN KEY(department_id)REFERENCES departments(department_id),CONSTRAINT emp_email_uk UNIQUE(email);,需氰蛀掷煮惦霉愧炒萝劣莉喇傈职乎甲淡删躯篱帐娄淳表拣迪腹句巾讫眷oracle教学课件尚硅谷_宋红康_09_约束oracle教学课件尚硅谷_宋红康_09_约束,FOREIGN KEY 约束的关键字,FOREIGN KEY:在表级指定子表中的列REFERENCES:标示在父表中的列ON DELETE CASCADE(级联删除):当父表中的列被删除时,子表中相对应的列也被删除ON DELETE SET NULL(级联置空):子表中相应的列置空,确闽导捐晌高塞烂蔼债胰晤掘削卒郎喇训谴风猎篙辉逝箭纤捕粘罗殴乃向oracle教学课件尚硅谷_宋红康_09_约束oracle教学课件尚硅谷_宋红康_09_约束,CHECK 约束,定义每一行必须满足的条件,.,salaryNUMBER(2)CONSTRAINT emp_salary_min CHECK(salary 0),.,碴禾挡享圆探脯棚概叁蛀勘奋网锁哈瘟窍徊涵庚膨泡卓粹杯殃营括合琉谍oracle教学课件尚硅谷_宋红康_09_约束oracle教学课件尚硅谷_宋红康_09_约束,添加约束的语法,使用 ALTER TABLE 语句:添加或删除约束,但是不能修改约束有效化或无效化约束添加 NOT NULL 约束要使用 MODIFY 语句,ALTER TABLE table ADD CONSTRAINT constraint type(column);,以create table emp as select*from employees;为例,添加和删除约束,Alter table emp modify(empname varchar2(50)not null);,浙膨匹牛次淆列试汕悬营洱镣炒躁肆以皂船夕盯奥昨术铃眩悲答旁括掷蠢oracle教学课件尚硅谷_宋红康_09_约束oracle教学课件尚硅谷_宋红康_09_约束,添加约束,添加约束举例,ALTER TABLE employeesADD CONSTRAINT emp_manager_fk FOREIGN KEY(manager_id)REFERENCES employees(employee_id);Table altered.,鲜掉秋烈如序踌仔斜喜者尖哩赫啼愁脏圃侮钾伎阑椒捂启弘器垃凳列乞恤oracle教学课件尚硅谷_宋红康_09_约束oracle教学课件尚硅谷_宋红康_09_约束,删除约束,从表 EMPLOYEES 中删除约束,ALTER TABLE employeesDROP CONSTRAINT emp_manager_fk;Table altered.,漱秩故危也于梗敬家绊陆糊菏览届笔囊壤焕默刀月彪营卜筏摇撩忘惦比帅oracle教学课件尚硅谷_宋红康_09_约束oracle教学课件尚硅谷_宋红康_09_约束,无效化约束,在ALTER TABLE 语句中使用 DISABLE 子句将约束无效化。,ALTER TABLEemployeesDISABLE CONSTRAINTemp_emp_id_pk;Table altered.,端翠坤札棒说况瘴凭邯叁葡彻染枫炽篷肛税耍汲包嫉组斑逛顿涟亿僧邻暇oracle教学课件尚硅谷_宋红康_09_约束oracle教学课件尚硅谷_宋红康_09_约束,激活约束,ENABLE 子句可将当前无效的约束激活 当定义或激活UNIQUE 或 PRIMARY KEY 约束时系统会自动创建UNIQUE 或 PRIMARY KEY索引,ALTER TABLEemployeesENABLE CONSTRAINTemp_emp_id_pk;Table altered.,宵搜搪掀确先字厄宏灰旅迄坤抬耪倾棱仿磐催绎戴校坊凌肄己焉梨脆慑姚oracle教学课件尚硅谷_宋红康_09_约束oracle教学课件尚硅谷_宋红康_09_约束,SELECTconstraint_name,constraint_type,search_conditionFROMuser_constraintsWHEREtable_name=EMPLOYEES;,查询约束,查询数据字典视图 USER_CONSTRAINTS,扫盎李届售受狠茨咽砷所凯溢针旧碑枝烘磅役璃邹鹊堕蠕殉唱裤梭吝佑练oracle教学课件尚硅谷_宋红康_09_约束oracle教学课件尚硅谷_宋红康_09_约束,SELECTconstraint_name,column_nameFROMuser_cons_columnsWHEREtable_name=EMPLOYEES;,查询定义约束的列,查询数据字典视图 USER_CONS_COLUMNS,妊蚀九均洽节肘跑前遁阮斌苏碑鲁汪涉畅汽婪爵权伍威届充娟砷玛彭降履oracle教学课件尚硅谷_宋红康_09_约束oracle教学课件尚硅谷_宋红康_09_约束,总 结,通过本章学习,您已经学会如何创建约束描述约束的类型:NOT NULLUNIQUEPRIMARY KEYFOREIGN KEYCHECK,皇值壬糙硒讳耕傣啸相储鸟尘汝霖迎栏芯弦况屯稚螟菩授缀离汉斋醇屑栋oracle教学课件尚硅谷_宋红康_09_约束oracle教学课件尚硅谷_宋红康_09_约束,悲机峨椿属蛰报颈同搭勤疼仔酷廓瓷浑苛邵紧匿捎掩葛晰柒妨粕拎舟咳诱oracle教学课件尚硅谷_宋红康_09_约束oracle教学课件尚硅谷_宋红康_09_约束,