主键约束(Primay Key Coustraint) 唯一性,非空性,实体完整性约束主键不能为空
在一张表中,用来唯一标识一条记录的字段集,叫做主关键字或者主关键码,简称主键(或主码),这里说"字段集"是因为主键可能用一个字段或者多个字段来表示。
唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个检查约束 (Check Counstraint) 对该列数据的范围、格式的限制(如:年龄、性别等)默认约束 (Default Counstraint) 该数据的默认值外键约束 (Foreign Key Counstraint) 需要建立两表间的关系并引用主表的列
添加主键约束
alter table stuInfo
add constraint PK_stuNo primary key (stuNo)
添加唯一约束
alter table stuInfo
add constraint UQ_stuID unique(stuID)
添加默认约束
alter table stuInfo
add constraint DF_stuAddress default (‘地址不详’) for stuAddress
添加检查约束
alter table stuInfo
add constraint CK_stuAge check (stuAge between 15 and 40)
添加外键约束
alter table stuInfo
add constraint FK_stuNo foreign key(stuNo)references stuinfo(stuNo)
注:外键
一张表的非主属性是另一个表的主属性就是这个表的外键。(例:学生表中主键是学号,专业信息表中主键是专业编号。学生表中的非主属性专业编号恰好是专业信息表中的主键。我们就称这个专业编号是学生表的外键。)
有两张表A表和B表,表A中的一个字段id是外键,表B中的一个字段id是主键,那么称B为父表,A为子表。就是说一个表中外键字段(相当于这里的A表)是另一个表中(相当于这里的B表)的主键。(例:学生表(学号, 姓名, 性别,专业编号),专业信息表(专业编号,专业名称,专业备注信息)。这里学生表是子表,专业信息表是父表)
例子:
/*数据约束*/
CREATE TABLE user01 (
uid INT NOT NULL,/*非空约束*/
PRIMARY KEY /*主键约束*/ AUTO_INCREMENT /*自增长*/
uname VARCHAR(10) UNIQUE,/*唯一约束*/
address VARCHAR(20) DEFAULT'张店'/*默认值约束*/
);
INSERT INTO user01 VALUES(1,'小红帽','博山');
INSERT INTO user01(uname) VALUES('大灰狼');
SELECT * FROM user01;
DROP TABLE user01;
/*外键约束*/
CREATE TABLE emp1( /*副表*/
eid INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(10),
deptid INT,
CONSTRAINT emp1_dept_fk FOREIGN KEY(deptid) REFERENCES
dept(id)/*添加外键约束*/
);
INSERT INTO emp1(ename,deptid) VALUES('张三',5);
INSERT INTO emp1(ename,deptid) VALUES('李四',4);
INSERT INTO emp1(ename,deptid) VALUES('王五',3);
INSERT INTO emp1(ename,deptid) VALUES('张五',2);
SELECT * FROM emp1;
DROP TABLE emp1;
CREATE TABLE dept( /*主表*/
id INT PRIMARY KEY AUTO_INCREMENT,
dname VARCHAR(15)
);
INSERT INTO dept(dname) VALUES('研发部');
INSERT INTO dept(dname) VALUES('产品部');
INSERT INTO dept(dname) VALUES('销售部');
SELECT * FROM dept;
DROP TABLE dept;
/*修改数据(先改副表再改主表)*/
UPDATE emp SET deptid=1 WHERE eid=2;
UPDATE dept SET id=5 WHERE id=2;
/*删除数据(先删副表再删主表)*/
DELETE FROM emp WHERE eid=1;
DELETE FROM dept WHERE id=3;
/*两种全表删除的区别*/
CREATE TABLE test(
id INT PRIMARY KEY AUTO_INCREMENT,
tname VARCHAR(10)
);
INSERT INTO test(tname) VALUES('小红');
INSERT INTO test(tname) VALUES('小蓝');
INSERT INTO test(tname) VALUES('小绿');
SELECT * FROM test;
DELETE FROM test; /*不会删除约束*/
TRUNCATE TABLE test;/*会删除约束*/
DROP TABLE test;
/*先建表后添加外键约束*/
CREATE TABLE test(
id INT PRIMARY KEY AUTO_INCREMENT,
tname VARCHAR(10),
empid INT
);
ALTER TABLE test
ADD CONSTRAINT test_emp1_fk FOREIGN KEY(empid)
REFERENCES emp1(eid);