首页 > 其他分享 >每日记录(完整性约束)

每日记录(完整性约束)

时间:2023-06-03 21:00:11浏览次数:51  
标签:记录 外键 约束 stu 完整性 user sid TABLE 主键

完整性约束是为了表的数据的正确性!如果数据不正确,那么一开始就不能添加到表中。

1 主键

当某一列添加了主键约束后,那么这一列的数据就不能重复出现。这样每行记录中其主键列的值就是这一行的唯一标识。例如学生的学号可以用来做唯一标识,而学生的姓名是不能做唯一标识的,因为学习有可能同名。

主键列的值不能为NULL,也不能重复!

指定主键约束使用PRIMARY KEY关键字

l 创建表:定义列时指定主键:

CREATE TABLE stu(

sidCHAR(6) PRIMARY KEY,

snameVARCHAR(20),

ageINT,

genderVARCHAR(10)

);

l 创建表:定义列之后独立指定主键:

CREATE TABLE stu(

sidCHAR(6),

snameVARCHAR(20),

ageINT,

genderVARCHAR(10),

PRIMARY KEY(sid)

);

l 修改表时指定主键:

ALTER TABLE stu

ADD PRIMARY KEY(sid);

l 删除主键(只是删除主键约束,而不会删除主键列):

ALTER TABLE stu DROP PRIMARY KEY;

2 主键自增长

MySQL提供了主键自动增长的功能!这样用户就不用再为是否有主键是否重复而烦恼了。当主键设置为自动增长后,在没有给出主键值时,主键的值会自动生成,而且是最大主键值+1,也就不会出现重复主键的可能了。

l 创建表时设置主键自增长(主键必须是整型才可以自增长):

CREATE TABLE stu(

sid INT PRIMARY KEY AUTO_INCREMENT,

snameVARCHAR(20),

ageINT,

genderVARCHAR(10)

);

l 修改表时设置主键自增长:

ALTER TABLE stu CHANGE sid sid INT AUTO_INCREMENT;

l 修改表时删除主键自增长:

ALTER TABLE stu CHANGE sid sid INT;

3 非空

指定非空约束的列不能没有值,也就是说在插入记录时,对添加了非空约束的列一定要给值;在修改记录时,不能把非空列的值设置为NULL。

l 指定非空约束:

CREATE TABLE stu(

sid INT PRIMARY KEY AUTO_INCREMENT,

sname VARCHAR(10) NOT NULL,

ageINT,

genderVARCHAR(10)

);

当为sname字段指定为非空后,在向stu表中插入记录时,必须给sname字段指定值,否则会报错:

INSERT INTO stu(sid) VALUES(1);

插入的记录中sname没有指定值,所以会报错!

4 唯一

还可以为字段指定唯一约束!当为字段指定唯一约束后,那么字段的值必须是唯一的。这一点与主键相似!例如给stu表的sname字段指定唯一约束:

CREATE TABLE tab_ab(

sid INT PRIMARY KEY AUTO_INCREMENT,

sname VARCHAR(10) UNIQUE

);

INSERT INTO sname(sid, sname) VALUES(1001, 'zs');

INSERT INTO sname(sid, sname) VALUES(1002, 'zs');

当两次插入相同的名字时,MySQL会报错!

5 外键

主外键是构成表与表关联的唯一途径!

外键是另一张表的主键!例如员工表与部门表之间就存在关联关系,其中员工表中的部门编号字段就是外键,是相对部门表的外键。

我们再来看BBS系统中:用户表(t_user)、分类表(t_section)、帖子表(t_topic)三者之间的关系。

wps8C86.tmp

例如在t_section表中sid为1的记录说明有一个分类叫java,版主是t_user表中uid为1的用户,即zs!

例如在t_topic表中tid为2的记录是名字为“Java是咖啡”的帖子,它是java版块的帖子,它的作者是ww。

外键就是用来约束这一列的值必须是另一张表的主键值!!!

l 创建t_user表,指定uid为主键列:

CREATE TABLE t_user(

uidINT PRIMARY KEY AUTO_INCREMENT,

unameVARCHAR(20) UNIQUE NOT NULL

);

l 创建t_section表,指定sid为主键列,u_id为相对t_user表的uid列的外键:

CREATE TABLE t_section(

sidINT PRIMARY KEY AUTO_INCREMENT,

snameVARCHAR(30),

u_idINT,

CONSTRAINT fk_t_user FOREIGN KEY(u_id) REFERENCES t_user(uid)

);

l 修改t_section表,指定u_id为相对t_user表的uid列的外键:

ALTER TABLE t_section

ADD CONSTRAINT fk_t_user

FOREIGN KEY(u_id)

REFERENCES t_user(uid);

l 修改t_section表,删除u_id的外键约束:

ALTER TABLE t_section

DROP FOREIGN KEY fk_t_user;

6 表与表之间的关系

l 一对一:例如t_person表和t_card表,即人和身份证。这种情况需要找出主从关系,即谁是主表,谁是从表。人可以没有身份证,但身份证必须要有人才行,所以人是主表,而身份证是从表。设计从表可以有两种方案:

Ø 在t_card表中添加外键列(相对t_user表),并且给外键添加唯一约束;

Ø 给t_card表的主键添加外键约束(相对t_user表),即t_card表的主键也是外键。

l 一对多(多对一):最为常见的就是一对多!一对多和多对一,这是从哪个角度去看得出来的。t_user和t_section的关系,从t_user来看就是一对多,而从t_section的角度来看就是多对一!这种情况都是在多方创建外键!

l 多对多:例如t_stu和t_teacher表,即一个学生可以有多个老师,而一个老师也可以有多个学生。这种情况通常需要创建中间表来处理多对多关系。例如再创建一张表t_stu_tea表,给出两个外键,一个相对t_stu表的外键,另一个相对t_teacher表的外键。

标签:记录,外键,约束,stu,完整性,user,sid,TABLE,主键
From: https://www.cnblogs.com/xiao-hong111/p/17454650.html

相关文章

  • 每日记录(EL(表达式语言))
    1EL概述1.1EL的作用JSP2.0要把html和css分离、要把html和javascript分离、要把Java脚本替换成标签。标签的好处是非Java人员都可以使用。JSP2.0–纯标签页面,即:不包含<%…%>、<%!…%>,以及<%=…%>EL(ExpressionLanguage)是一门表达式语言,它对应<%=…%>。我们知道在JSP......
  • 每日记录(数据查询语法(DQL)(1))
    DQL就是数据查询语言,数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。语法:SELECTselection_list/*要查询的列名称*/ FROMtable_list/*要查询的表名称*/ WHEREcondition/*行条件*/ GROUPBYgrouping_columns/*对结果分组*/ HAVINGcond......
  • 每日记录(数据查询语法(DQL)(2))
    1基础查询1.1查询所有列SELECT*FROM stu;1.2查询指定列SELECTsid,sname,ageFROMstu;2条件查询2.1条件查询介绍条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:l=、!=、<>、<、<=、>、>=;lBETWEEN…AND;lIN(set);lISNULL;lA......
  • 每日记录(数据查询语法(DQL)(3))
     模糊查询当想查询姓名中包含a字母的学生时就需要使用模糊查询了。模糊查询需要使用关键字LIKE。3.1查询姓名由5个字母构成的学生记录SELECT*FROMstuWHEREsnameLIKE'_____';模糊查询必须使用LIKE关键字。其中“_”匹配任意一个字母,5个“_”表示5个任意字母。3.2查......
  • 关于使用openssl命令-同时生成私钥与CSR-Certificate Signing Request的方法记录
    这里笔者主要讲述如何生成一个CSR证书签名请求文件,方法过程可能有多种笔者这里将使用一种最为简单简洁的方式进行讲解,使用到的环境与软件如下:操作系统:RedHatEnterpriseLinuxrelease8.7(Ootpa)openssl软件包版本:openssl-1.1.1k-9.el8_7.x86_64 1、创建私钥的同时,也就同......
  • 小宾直播录制录屏软件,24小时无人直播,支持抖音、快手、虎牙、斗鱼、YY、花椒、B 站等平
    随着直播行业的不断发展,越来越多的主播开始使用直播录制软件进行录制,以便对自己的直播内容进行复盘和回顾。作为一款实用的录制工具,小宾直播录制器一直受到广大用户的喜爱和支持。今天,我们将介绍小宾直播录制器的新功能,包括文件名规则和小文件自动清理。小宾直播录制器新增了文......
  • 记录--手把手教你Vue+ECharts+高德地图API实现天气预报数据可视化
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助前言所谓数据可视化,我们可以理解为从宏观角度来看一眼就能看出来整个数据的占比,走向。对于数据可视化,很多互联网公司是很看重这一块的,包括大厂;就比如阿里的淘宝,双十一的时候往往就需要将消费者的一些数据通过图的......
  • 算法刷题记录:素数中的等差数列
    题目链接https://ac.nowcoder.com/acm/contest/19859/I题目分析模拟!模拟!模拟!下标要计算好。自己的思路是放发现两个相等的差时,说明至少可以输出了,也就是合法情况,然后用指针R往后扩展。我选择的R是闭区间的,即[L,R]的区间已经看过了,所以i可以直接从i+1开始看。所以R赋值给i后......
  • 记录一次QT5下多线程使用Qxlsx操作写EXCEL表文件问题
    问题表述:一个主线程和两个子线程,两个子线程进行写EXCEL表格文件,线程1写demo_1.xlsx,线程2写demo_2.xlsx,运行一段时间后程序异常退出?。代码如下://两个线程代码一样,只是写入的文件名不同QXlsx::Documentdocument("demo_x.xlsx");introwLen=document.dimension()......
  • Idea个性配置记录
    本文档为个人IDEA配置过程备份(基于2022.3.3,使用中文包)javadoc中使用link时,不使用全路径在设置>编辑器>代码样式>java>Import中,将"在JavaDoc中使用完全限定类名"从始终改为其他合并src/main/java,类似eclipse使用插件FolderCompact,在插件的Marketplace中搜索......