通过一张表来说明什么是主键和外键
字段:也叫属性,是表的某一列
记录:也叫元组,是表的某一行
主键:用来唯一标示一条记录,就相当于我们的身份证号,每个人的都不一样
外键:用来和其他表建立联系,是另一个表的主键
下面介绍如何用SQL来建立dept和emp表,并用dept表中的dept_id设置为emp表的外键
create table dept --创建部门表dept
(
dept_name nvarchar(10) not null,--nvarchar(10):n表示为国际标准,即支持中文,var表示实际字符长度可以随着输入变化
dept_num int not null,
dept_address nchar(10) not null,
dept_id int constraint PK_detp primary key not null --dept表的主键,命名为PK_dept
)
create table emp --创建员工表emp
(
emp_name nvarchar(10) not null,
emp_sal int not null,
emp_sex nchar(1) not null,
emp_age int not null,
emp_id int primary key not null, --emp表的主键
dept_id int constraint FK_emp_dept foreign key references dept(dept_id) not null --外键,命名为FK_emp_dept,通过reference关联到表dept的dept_id属性
)
约束:对一个表中属性操作的限制叫做约束
约束的分类:
- 主键约束:不允许重复元素,避免的数据的冗余
- 外键约束:通过外键来体现事物与事物之间的关系
- check约束:约束属性的取值只能在规定范围之内
- default约束:指定属性的默认值
- 唯一约束:保证了属性的取值不允许重复
插入和约束的代码:
create table student
(
stu_id int constraint PK_stu primary key,
stu_name nvarchar(20) unique not null, --unique约束,stu_name的值不能重复
stu_sex nvarchar(1) not null default('男'), --stu_sex的默认值为:男
stu_sal int check (stu_sal>=1000 and stu_sal<=8000) --check约束,stu_sal的值只能在1000到8000之间
)
insert into student(stu_id,stu_name,stu_sal) values(1,'张三',6000); --没有给stu_sex赋值,默认为男
insert into student values(2,'李四','男',7000);
insert into student values(3,'小娟','女',5000);
得出的结果: