在数据库设计中,主键和外键都是非常重要的概念,它们不仅可以保证数据的一致性和完整性,还可以优化数据库的性能。本文将简单介绍主键和外键的概念、作用和应用。
为金坛等地区用户提供了全套网页设计制作服务,及金坛网站建设行业解决方案。主营业务为做网站、成都网站设计、金坛网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
一、 主键
主键是一种用于唯一标识数据库表中每一行记录的列或列,它的作用是保证每一行记录的唯一性和完整性。主键列(或列)不能包含空值(NULL),也不能重复。通常在建表时就应该指定主键,如果没有指定,则可以通过ALTER TABLE语句添加。
主键的设计需要遵循一些规则:
1.唯一性:主键列中的值必须唯一。
2.非空性:主键列中的值不能为NULL。
3.简洁性:主键应尽量简短,因为主键在一个表的所有索引中都会出现。
4.不变性:主键列的值不应该经常或根本不改变,否则会影响数据库性能。
二、 外键
外键是一种将两个表联系起来的约束,是一种引用另一个表的主键的列或列。外键用于保持数据的一致性,是关系数据库的基础。具体来说,外键定义了一个表与其他表之间的关系,这种关系方式可以是一对一、一对多或多对多,也可以是自引用。
外键有以下作用:
1.确保数据的完整性:外键约束保证了在一个表中引用另一个表时,其中的每个引用都是有效的。如果尝试插入一个无效值,则会引发异常或报错。
2.维护数据的准确性:外键可以在不同表之间自动保持数据的一致性。
3.提供查询速度:外键可以提高查询效率,因为它使得可以使用相关联的表中的索引。
4.提供安全性:外键约束可以保护数据库不受攻击者的劫持,并限制更改表中的数据。
三、使用主键和外键的注意事项
1.应该始终尝试使用主键和外键,因为它们可以保证数据完整性和一致性,是数据库设计中的核心概念。
2.在设计数据库表时,应该考虑主键和外键的类型、长度、数据类型、数据范围等因素。
3.在查询数据时,应该尽可能地避免使用联合查询,可以通过使用主键和外键来加速查询过程。
4.当需要修改主键或外键时,应该考虑到这样的修改对其他表和应用程序的影响,并谨慎操作。
四、
本文简述了数据库主键和外键的概念、作用和应用注意事项。主键用于保证数据的唯一性和完整性,外键用于维护数据的一致性和准确性。在设计数据库时,应该尽可能地使用主键和外键,并考虑它们的类型、长度、数据类型、数据范围等因素。在查询数据和修改主键或外键时,需要谨慎操作。
相关问题拓展阅读:
为了保证两个表某些数据的一致性。
作为外键,它里面的数据必须是在主建中所存在的。
举个例子:
有两个关系:
student(s#,sname,d#),即学生这个汪没袜关系有三个属性:学号,姓名,所在系别
dep(d#,dname),即院系有两个察槐属性:系号、系名
则s#、d#是主键,也是各自所在关系的唯一候困激选键,d#是student的外键。
1,主键约束 (table的唯一标识)
能够激含作为主键列的特点:该列不能为空,不能有重复值出现
创建表时指定主键的两种方式:
CREATE TABLE stu(
sid CHAR(6) PRIMATY KEY,
sname VARCHAR(20),
age INT,
gender VARCHER(10)
);
指定sid列为主键列
CREATE TABLE stu(
sid CHAR(6),
sname VARCHAR(20),
age INT,
gender VARCHER(10),
PRIMARY KEY(sid)
);
指定sid列为主明禅笑键列
修改表时指定主键:ALTER TABLE stu ADD PRIMATY 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
3,非空约束
CREATE TABLE stu(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20) NOT NULL,
age INT,
gender VARCHAR(10)
);
对sname列设置了非空约束
4,唯一约束
某些列不能设置重复的值,所以可以对列添加唯一约束
CREATE TABLE stu(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20) NOT NULL UNIQUE,
age INT,
gender VARCHAR(10)
);
6,外键约束
外键特点:外键必须是另一个表的主键的值(外键要引用袭如主键!),外键可以重复,外键可以为空,一张表可以有多个外键!
CREATE TABLE dept( //部门表
deptno INT PRIMARY KEY AUTO_INCREMENT,
deptname CHAR(20)
);
INSERT INTO dept VALUES(10,‘研发部’);
INSERT INTO dept VALUES(20,‘人力部’);
INSERT INTO dept VALUES(30,‘财务部’);
CREATE TABLE emp( //员工表
empno INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(50),
dno INT, //员工所属部门(外键),
CONSTRAINT fk_emp_dept FOREIGN KEY(dno) REFERENCES dept(deptno)
);
INSERT INTO emp(empno,ename) VALUES(NULL,‘张三’),//外键可以不传入值
INSERT INTO emp(empno,ename) VALUES(NULL,‘李四’,10),//外键可以重复
INSERT INTO emp(empno,ename) VALUES(NULL,‘王五’,10),
INSERT INTO emp(empno,ename) VALUES(NULL,‘赵六’,80),//dept表没有主键值为80的记录,sql客户端编译报错
7,一对一关系模型
创建老公表
CREATE TABLE hashand(
hid INT PRIMARY KEY AUTO_INCREMENT,
hname VARCHAR(50),
);
INSERT INTO hashand VALUES(NULL,‘刘备’);
INSERT INTO hashand VALUES(NULL,‘关羽’);
INSERT INTO hashand VALUES(NULL,‘张飞’);
SELECT * FROM hashand
//创建老婆表
CREATE TABLE wife(
wid INT PRIMARY KEY AUTO_INCREMENT,
wname VARCHAR(50),
CONSTRAINT fk_wife_hashand FOREIGN KEY(wid) REFERENCES hashand(hid)
)
/**
wid:
1,非空
2,唯一
3,引用hid
*/
INSERT INTO wife VALUES(1,‘杨贵妃’);
INSERT INTO wife VALUES(2,‘妲己’);
INSERT INTO wife VALUES(3,‘褒姒’);
SELECT * FROM wife;
对于一对一关系模型从表的主键即是外键,例如老公和老婆的关系模型,一个老公只能有一个老婆,一个老婆只能有一个老公
对于一对多关系模型主表的主键即是从表的外键,例如订单和用户的关系模型,一个用户可以下单多次,对应多个订单,而一个订单只能属于一个用户
对于多对多关系模型没有主表和从表之分,需要建立第三张表来记录这两张表的外键,建立两个外键,分别引用这两张表的主键
8,多对多关系模型
在表中简历多对多关系需要使用中间表,即需要三张表,在中间表中使用两个外键,分别引用其他两个表的主键,例如学生和老师的关系模型,一个老师可以有多个学生,一个学生可以有多个老师
CREATE TABLE student(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname CHAR(40)
);
CREATE TABLE teacher(
tid INT PRIMARY KEY AUTO_INCREMENT,
tname CHAR(40)
);
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(tid) REFERENCES teacher(tid)
);
INSERT INTO student VALUES(NULL,‘刘德华’);
INSERT INTO student VALUES(NULL,‘梁朝伟’);
INSERT INTO student VALUES(NULL,‘黄日华’);
INSERT INTO student VALUES(NULL,‘苗侨伟’);
INSERT INTO student VALUES(NULL,‘汤镇业’);
INSERT INTO teacher VALUES(NULL,‘崔老师’);
INSERT INTO teacher VALUES(NULL,‘刘老师’);
INSERT INTO teacher VALUES(NULL,‘石老师’);
SELECT * FROM student;
SELECT * FROM teacher;
INSERT INTO stu_tea VALUES(1,1); //刘德华是崔老师的学生
INSERT INTO stu_tea VALUES(2,1); //梁朝伟是崔老师的学生
INSERT INTO stu_tea VALUES(3,1);//黄日华是崔老师的学生
INSERT INTO stu_tea VALUES(4,1);//苗侨伟是崔老师的学生
INSERT INTO stu_tea VALUES(5,1);//汤镇业是崔老师的学生
INSERT INTO stu_tea VALUES(2,2);//梁朝伟是刘老师的学生
INSERT INTO stu_tea VALUES(3,2);//黄日华是刘老师的学生
INSERT INTO stu_tea VALUES(4,2);//苗侨伟是刘老师的学生
INSERT INTO stu_tea VALUES(3,3);//黄日华是石老师的学生
INSERT INTO stu_tea VALUES(5,3);//汤镇业是刘老师的学生
SELECT * FROM stu_tea;
这时在stu_tea这个中间表中的每条记录都是来说明student表和teacher表的关系的
例如在stu_tea表中的记录:sid为1001,tid为2023,这说明编号为1001的学生有一个编号为2023的老师
sidtid
01 //编号为1001的学生有一个编号为2023的老师
02 //编号为1001的学生有一个编号为2023的老师
03 //编号为1001的学生有一个编号为2023的老师
01 //编号为2023的老师有一个编号为1002的学生
04 //编号为2023的老师有一个编号为1002的学生
9,合并结果集
要求要合并的结果集中,列的类型和列数相同
UNION,去除重复行,UNION ALL,不去除重复行
关于数据库主键和外键简称的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
成都服务器租用选创新互联,先试用再开通。
创新互联(www.cdcxhl.com)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。物理服务器托管租用:四川成都、绵阳、重庆、贵阳机房服务器托管租用。
网站标题:数据库主键和外键简述 (数据库主键和外键简称)
文章网址:http://www.mswzjz.cn/qtweb/news0/297600.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能