约束:
*约束是添加在列上的,用来约束列的;
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)
);
指定sid列为主键列,即为sid列添加主键约束。
*修改表时指定主键:ALTER TABLE stu ADO 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;
*测试主键自增长:
>INSERT INTO stu VALUES (NULL,'zhangSan',23,'male');
>INSERT INTO stu (sname,age,gender) VALUES ('zhangSan',23,'male');
3.非空约束:
*因为某些列不能设置为NULL值,所以可以对列添加非空约束。
*例如:
CREATE TABLE stu (
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20) MOT NULL,
age INT,
gender VARCHAR(10)
);
*对sname 列设置了非空约束
4.唯一约束
*数据库某些列不能设置重复值,所以可以对列添加唯一约束。
*例如:
CREATE TABLE stu(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20) NOTNULL UNIQUE,
age INT,
gender VARCHAR(10),
);
*对sname列设置了非空约束
5.概念模型:
对象模型:在JAVA中是domain.例如:User Student。
关系模型:在数据库中表。
当我们要完成一个软件系统时,需要把系统中的实体抽取处理,形成概念模型。
例如部门、员工都是系统中的实体,概念模型中的实体最终会成为JAVA中的类、数据库中的表。
实体之间还存在着关系,关系有三种:
*1对多:例如每个员工都从属一个部门,而一个部门可以有多个员工,其中员工是多方,而部门是一方。
*1对1:例如老公和老婆就是一对一的关系,一个老公只能有一个老婆,一个老婆也只能有一个老公。
*多对多:老师与学生的关系就多对多,一个老师可以有多个学生,一个学生可以有多个老师。
概念模型在JAVA中成为实体类(JAVABEAN)
类就使用成员变量来完成关系,一般都是双向关联!
多对一双向中关联,即员工关联部门,部门也关联员工!
6.外键约束:
*外键必须是另一个表的主键的值。
*外键可以重复
*外键可以为空
概念模型在数据库中成为表
数据库表中的多对一关系,只需要在多方使用一个独立的列来引用一方的主键即可。
emp表中的deptno列的值表示当前员工所从属的部门编号,也就是说emp.deptno必须在dept表中真是存在!
但是我们必须要去对它进行约束,不然可能会出现员工所属的部门编号是不存在的,这种约束就是外键的约束。我们需要给emp.deptno添加外键约束,约束它的值必须是在dept.detpno中存在。外键必须是另一个表的主键!
语法:CONSTRAINT 约束名称 FORIEGN KEY(外键列名) REFERENCES 关联表(关联表的主键)
创建表时 指定外键约束:
create table emp(
empno int primary key,
deptno int,
CONSTRAINT fk_emp FORIEGN KEY(mgr) REFERENCES emp(empno)
);
修改表时 添加外键约束:
ALTER TABLE emp
ADD CONSTRAINT fk_emp_deptno FOREIGN KEY(deptno) REFERENCES dept(deptno);
修改表时删除外键约束:
ALTER TABLE emp
DROP FORIEGN KEY fk_emp_deptno;
7.数据库一对一关系:
在表中建立一对一关系笔记特殊,需要让其中一张表的主键,既是主键又是外键。
create table husband(
hid int PRIMARY KEY,
);
CREATE TABLE wife(
wid INT PRIMARY KEY,
ADD CONSTRAINT fk_wife_fid FOREIGN KEY(wid) REFERENCES husband(hid)
);
其中wife表的wid既是主键又是相对husband表的外键;
husband.hid是主键,不能重复!
wife.wid是主键,不能重复,又是外键,必须来自husband.hid。
所以如果在wife表中有一条记录的wid为1,那么wife表中的其他记录的wid就不能再是1了,因为它是主键。
同时在husband.hid中必须存在1这个值,因为wid是外键,这就完成了一对一关系。
8.数据库多对多关系:
在表中建立多对多关系需要使用中间表,即需要三张表,在中间表中使用两个外键,分别引用其他两个表的主键。
CREATE TABLE student(
sid int PRIMARY KEY,
);
CREATE TABLE teacher(
tid int PRIMARY KEY,
);
CREATE TABLE stu_tea(
sid int,
tid int,
ADD CONSTRAINT fk_stu_tea_sid FOREIGN KEY(sid) REFERENCES student(sid),
ADD CONSTRAINT fk_stu_tea_tid FOREIGN KEY(sid) REFERENCES teacher(tid)
);
这时在stu_tea这个中间表中的每条记录都是来说明 student和teacher表的关系。
例如在stu_tea表中的记录:sid为101,tid为201,这说明编号为101的学生有一个编号为201的老师:
sid tid
101 201
101 202
101 203
102 201
102 204
*约束是添加在列上的,用来约束列的;
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)
);
指定sid列为主键列,即为sid列添加主键约束。
*修改表时指定主键:ALTER TABLE stu ADO 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;
*测试主键自增长:
>INSERT INTO stu VALUES (NULL,'zhangSan',23,'male');
>INSERT INTO stu (sname,age,gender) VALUES ('zhangSan',23,'male');
3.非空约束:
*因为某些列不能设置为NULL值,所以可以对列添加非空约束。
*例如:
CREATE TABLE stu (
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20) MOT NULL,
age INT,
gender VARCHAR(10)
);
*对sname 列设置了非空约束
4.唯一约束
*数据库某些列不能设置重复值,所以可以对列添加唯一约束。
*例如:
CREATE TABLE stu(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20) NOTNULL UNIQUE,
age INT,
gender VARCHAR(10),
);
*对sname列设置了非空约束
5.概念模型:
对象模型:在JAVA中是domain.例如:User Student。
关系模型:在数据库中表。
当我们要完成一个软件系统时,需要把系统中的实体抽取处理,形成概念模型。
例如部门、员工都是系统中的实体,概念模型中的实体最终会成为JAVA中的类、数据库中的表。
实体之间还存在着关系,关系有三种:
*1对多:例如每个员工都从属一个部门,而一个部门可以有多个员工,其中员工是多方,而部门是一方。
*1对1:例如老公和老婆就是一对一的关系,一个老公只能有一个老婆,一个老婆也只能有一个老公。
*多对多:老师与学生的关系就多对多,一个老师可以有多个学生,一个学生可以有多个老师。
概念模型在JAVA中成为实体类(JAVABEAN)
类就使用成员变量来完成关系,一般都是双向关联!
多对一双向中关联,即员工关联部门,部门也关联员工!
6.外键约束:
*外键必须是另一个表的主键的值。
*外键可以重复
*外键可以为空
概念模型在数据库中成为表
数据库表中的多对一关系,只需要在多方使用一个独立的列来引用一方的主键即可。
emp表中的deptno列的值表示当前员工所从属的部门编号,也就是说emp.deptno必须在dept表中真是存在!
但是我们必须要去对它进行约束,不然可能会出现员工所属的部门编号是不存在的,这种约束就是外键的约束。我们需要给emp.deptno添加外键约束,约束它的值必须是在dept.detpno中存在。外键必须是另一个表的主键!
语法:CONSTRAINT 约束名称 FORIEGN KEY(外键列名) REFERENCES 关联表(关联表的主键)
创建表时 指定外键约束:
create table emp(
empno int primary key,
deptno int,
CONSTRAINT fk_emp FORIEGN KEY(mgr) REFERENCES emp(empno)
);
修改表时 添加外键约束:
ALTER TABLE emp
ADD CONSTRAINT fk_emp_deptno FOREIGN KEY(deptno) REFERENCES dept(deptno);
修改表时删除外键约束:
ALTER TABLE emp
DROP FORIEGN KEY fk_emp_deptno;
7.数据库一对一关系:
在表中建立一对一关系笔记特殊,需要让其中一张表的主键,既是主键又是外键。
create table husband(
hid int PRIMARY KEY,
);
CREATE TABLE wife(
wid INT PRIMARY KEY,
ADD CONSTRAINT fk_wife_fid FOREIGN KEY(wid) REFERENCES husband(hid)
);
其中wife表的wid既是主键又是相对husband表的外键;
husband.hid是主键,不能重复!
wife.wid是主键,不能重复,又是外键,必须来自husband.hid。
所以如果在wife表中有一条记录的wid为1,那么wife表中的其他记录的wid就不能再是1了,因为它是主键。
同时在husband.hid中必须存在1这个值,因为wid是外键,这就完成了一对一关系。
8.数据库多对多关系:
在表中建立多对多关系需要使用中间表,即需要三张表,在中间表中使用两个外键,分别引用其他两个表的主键。
CREATE TABLE student(
sid int PRIMARY KEY,
);
CREATE TABLE teacher(
tid int PRIMARY KEY,
);
CREATE TABLE stu_tea(
sid int,
tid int,
ADD CONSTRAINT fk_stu_tea_sid FOREIGN KEY(sid) REFERENCES student(sid),
ADD CONSTRAINT fk_stu_tea_tid FOREIGN KEY(sid) REFERENCES teacher(tid)
);
这时在stu_tea这个中间表中的每条记录都是来说明 student和teacher表的关系。
例如在stu_tea表中的记录:sid为101,tid为201,这说明编号为101的学生有一个编号为201的老师:
sid tid
101 201
101 202
101 203
102 201
102 204