继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

oracle表约束的操作语法和实例

玄鉴
关注TA
已关注
手记 96
粉丝 237
获赞 4217

图片描述

图片描述

--oracl 数据库表约束操作的语法与实例
--操作素材学生表如下:
create table student
(
  stuno       CHAR(11) ,
  stuname     VARCHAR2(50),
  stuage      NUMBER(3),
  stusex      CHAR(2),
  stubir      DATE,
  stuid       VARCHAR2(18),
  stucid      NUMBER(3)
)

SELECT * FROM student
--1.建表是直接添加非空约束

--CREATE TABLE 表名(
--    字段名称    字段类型     NOT NULL)
--修改添加非空约束
--这个是最特殊的,不用关键字constrint
--实例:
--2.添加非空约束语法

--ALTER TABLE 表名
--MODIFY 列名 NOT NULL

--添加非空约束实例:

ALTER TABLE student
MODIFY stuno NOT NULL
--如果列值唯一,可以添加唯一约束。
--比如身份证号,学号,银行卡号等。

--添加唯一约束的语法:
--ALTER TABLE 表名  
-- ADD CONSTRAINT 约束名 
-- UNIQUE (列名)

--添加唯一约束的实例:

ALTER TABLE student 
ADD CONSTRAINT uq_stuid
UNIQUE(stuid)

--如果一个字段即要求唯一又不能为null,
--可使用主键约束,一般都是第一列

--添加主键约束语法:

--ALTER TABLE 表名  
--ADD CONSTRAINT 约束名  PRIMARY KEY(列名)

--添加主键约束实例:

ALTER TABLE student
ADD CONSTRAINT pk_stuno
PRIMARY KEY(stuno)

--添加检查约束,相当于条件约束,
--一般要符合常理与设定条件
--添加检查约束语法:

--ALTER TABLE 表名  
-- ADD CONSTRAINT 约束名 
--CHECK(具体的约束说明)

--添加检查约束实例1:
--性别只能是男或女或者女妖
--这个时候突然出现了问题,
--因为建表的时候sex的数据类型为char(2)
--两个字节,只能储存一个字符,女妖存不进去
--所以改为varchar2(10)
ALTER TABLE student
ADD CONSTRAINT ck_sex
CHECK(STUSEX IN('男','女','女妖'))

--添加检查约束实例2:
--年龄在15-40之间

ALTER TABLE student 
ADD CONSTRAINT ck_age
CHECK(STUAGE>=15 AND STUAGE<=40)
--或者
ALTER TABLE student
ADD CONSTRAINT ck_age2
CHECK(stuage BETWEEN 20 AND 50)

--这个时候发现同列的两个检查约束都添加进去了
--最好删除一个约束条件

--删除约束语法:
--ALTER TABLE 表名  
-- DROP CONSTRAINT 约束名 

--删除约束实例:
ALTER TABLE student 
DROP CONSTRAINT ck_age2

--添加检查约束实例3:
--省份证号码必须在18位
ALTER TABLE student 
ADD CONSTRAINT ck_stuid
CHECK(LENGTH(stuid)=18)
--出现提示,违反检查约束条件。
--stuid建过一个唯一约束条件,
--但不是检查约束啊?
--问题在哪里?
--于是只好在stucid建立约束了

ALTER TABLE student 
ADD CONSTRAINT ck_stucid
CHECK(LENGTH(stucid)=18)
--stucid的数据类型是number(3)
--所以必须修改

ALTER TABLE student
MODIFY stucid NUMBER(20)

--这个时候18位数字才能提交
--留待上面那个问题,请教大家

ALTER TABLE student 
DROP CONSTRAINT ck_stucid

----外键约束

--为了验证外键约束,创建第二份有关的表
CREATE TABLE myclass
(mid NUMBER(4),

mname VARCHAR2(20))
--并添加一个相关的列

ALTER TABLE student
ADD classNo NUMBER(4)

--student学生表和班级表
--一个班级有多个学生
--所以班级对学生是一对多的关系。
--学生表示子表,他的外键是班级的某列。
--学生(子表)   班级表(父表,被引用的表)
--被引用的表的列必须是主键
--子表和父表中的列的数据类型必须一致

--在父表中添加一些数据
SELECT * FROM myclass

INSERT INTO myclass(mid,mname)
VALUES(1001,'JAVA班') 
INSERT INTO myclass(mid,mname)
VALUES(1002,'php班') 
INSERT INTO myclass(mid,mname)
VALUES(1003,'pytion班') 

--添加外键约束语法:

--ALTER TABLE 子表名
--ADD CONSTRAINT 约束名  FOREIGN KEY(子表的列名)
--REFERENCES 父表名(父表的列名) 

--添加外键约束实例:

ALTER TABLE student
ADD CONSTRAINT fk_classNo
FOREIGN KEY(classno)
REFERENCES myCLASS(mid);
--唯一关键字或主键不匹配
--查找原因,原来是主表必须设置主键

ALTER TABLE myclass

ADD CONSTRAINT pk_mid
PRIMARY KEY(mid)
--这个时候在查看学生表的班级列,
--外键约束小三角就出现了

图片描述

--不过这样可能不符合约束条件的数据就被添加了进来,
--导致不安全与数据表奔溃。所以要慎用

--至此表的约束全部完成。

打开App,阅读手记
2人推荐
发表评论
随时随地看视频慕课网APP