约束
约束 *约束是添加在列上的,用来约束列的! 1.主键约束(唯一标识) ***非空*** ***唯一*** ***被引用*** *当表的某一列被指定为主键后,该列就不能为空,不能有重复值出现。 *创建表时指定主键的两种方式: >CREATE TABLE stu( sid CHAR(6) PRIMARY KEY, sname VARCHAR(20), age INT, gender VARCHAR(10) ); 指定sid列为主键列,即为sid列添加主键约束 >CREATE TABLE stu( sid CHAR(6), sname VARCHAR(20), age INT, gender VARCHAR(10), PRIMARY KEY(sid) ); *修改表时指定主键:ALTER TABLE stu ADD PRIMARY KEY(sid); *删除主键:ALTER TABLE stu DROP PRIMARY KEY; 2.主键自增长 *因为主键列的特性是:必须唯一、不能为空,所以我们通常会指定主键列为整型,然后设置其自动增长,这样可以保证在插入数据时主键列的唯一和非空特性。 *创建表时指定主键自增长 >CREATE TABLE stu( sid INT PRIMARY KEY AUTO_INCREMENT, sname VARCHAR(20), age INT, gender VARCHAR(10) ); *修改表时设置主键自增长:ALTER TABLE stu CHANGE sid sid INT AUTO_INCREMENT; *修改表时删除主键自增长:ALTER TABLE stu CHANGE sid sid INT; 3.非空约束 *因为某些列不能设置为NULL值,所以可以对列添加非空约束。 *例如: >CREATE TABLE stu( sid INT PRIMARY KEY AUTO_INCREMENT, sname VARCHAR(20) NOT NULL, age INT, gender VARCHAR(10) ); *NOT NULL是对sname列设置了非空约束 4.唯一约束 *数据库中的某些列不能设置重复的值,所以可以对列添加唯一约束。 *例如: >CREATE TABLE stu( sid INT PRIMARY KEY AUTO_INCREMENT, sname VARCHAR(20) NOT NULL UNIQUE, age INT, gender VARCHAR(10) ); *UNIQUE是对sname列设置了唯一约束 5.概念模型 当我们要完成一个软件系统时,需要把系统中的实体抽取出来,形成概念模型。 例如部门、员工都是系统中的实体,概念模型中的实体最终会成为Java中的类、数据库中的表。 实体之间还存在着关系,关系有三种: *1对多:例如每个员工都从属一个部门,而一个部门可以有多个员工,其中员工是多,部门是1。 *1对1:例如老公和老婆是一对一的关系,一个老公和只能有一个老婆,一个老婆只能有一个老公。 *多对多:老师和学生的关系就是多对多,一个老师可以有多个学生,一个学生可以有多个老师。 6.外键约束 *外键必须是另一个表的主键的值 *外键可以重复 *外键可以为空 *一张表可以有多个外键! >CREATE TABLE emp( empno INT PRIMARY KEY AUTO_INCREMENT, ename VARCHAR(50), dno INT, CONSTRAINT id_fk FOREIGN KEY(dno) REFERENCES dept(deptno) ); id_fk是外键约束名,FOREIGN KEY(dno)表示这张表的外键是dno,REFERENCES dept(deptno)表示dept表中deptno是主键。 也可以在创建好两张表后再添加外键约束 ALTER TABLE emp ADD CONSTRAINT id_fk FOREIGN KEY(dno) REFERENCES dept(deptno); 7.数据库一对一关系 在表中建立一对一关系比较特殊,需要让其中一张表的主键,既是主键又是外键。 CREATE TABLE husband( hid INT PRIMARY KEY, ... ); CREATE TABLE wife( wid INT PRIMARY KEY, ... CONSTRAINT fk_wife_wid FOREIGN KEY(wid) REFERENCES husband(hid) ); 其中wife表wid既是主键,又是相对husband表的外键。 所以如果在wife表中有一条记录wid为1,那么wife表中的其他记录的wid就不能再是1了,因为wid是主键。 同时husband.hid中必须存在1这个值,因为wid是外键,这样就完成了1对1的关系了。 8.数据库多对多关系 在表中建立多对多关系需要使用中间表,即需要三张表,在中间表中使用两个外键,分别引用两个表的主键。 >CREATE TABLE student( sid int PRIMARY KEY, ... ); CREATE TABLE teacher( tid int PRIMARY KEY, ... ); CREATE TABLE stu_tea( sid INT, tid INT, CONSTRAINT fk_stu_tea_sid FOREIGN KEY(sid) REFERENCES student(sid), CONSTRAINT fk_stu_tea_tid FOREIGN KEY(tid) REFERENCES student(tid) ); 这时在stu_tea这个中间表中的每条记录都是来说明student和teacher表的关系的。