当前位置: 首页 > news >正文

5.1 实体完整性

一个表只能有一个主键约束,且主键约束不能取空值
通过unique约束定义唯一性,为了保证一个表非主键列不输入重复值,可在该列定义unique约束。 

primary key约束与unique约束主要区别如下。 
(1)一个表只能创建一个primary key约束,但可创建多个unique约束。
(2)primary key约束的列值不允许为空值,unique约束的列值取空值。
(3)创建primary key约束时,系统会自动产生primary key索引。创建unique约束时,系统会自动产生unique索引。 

primary key约束与unique约束都不允许对应列存在重复值。 

5.1.1 主键约束

MySQL的主键列必须遵守以下规则

(1)每个表只能定义一个主键。 
(2)表中的两条记录在主键上不能具有相同的值,即遵守“唯一性规则”
(3)如果从一个复合主键中删除一列后,剩下的列构成的主键仍然满足唯一性原则,那么,这个复合主键是不正确的,这就是“最小化规则”。 
(4)一个列名在复合主键的列表中只能出现一次。 

1.在创建表时创建主键约束

【例8.1】在数据库study中创建"课程1"表,以列级完整性约束方式定义主键。 

create table 课程1(课程号 char(4) not null primary key,课程名 char(16) not null,学分 tinyint null);

【例8.2】在数据库stusys中创建course2表,以表级完整性约束方式定义主键。 

create table 课程2(课程号 char(4) not null, 课程名 char(16) not null, 学分 tinyint null,  primary key(课程号)); 

【例8.3】在数据库stusys中创建course3表,以表级完整性约束方式定义主键,并指定主键约束名称。 

create table 课程3(课程号 char(4) not null primary key,课程名 char(16) not null,学分 tinyint null,constraint pk_课程3 primary key(课程号));

2.删除主键约束

 语法格式:

alter table<表名> drop primary key; 

【例8.4】删除例8.3创建的在course3表上的主键约束。 

alter table 课程3drop primary key;

3.在修改表时创建主键约束

语法格式: 

alter table<表名> 
add ( [ constraint T < 约束名 > ] primary key ( 主键列名 ) 

【例8.5】重新在course3表上定义主键约束。 

alter table 课程3add constraint pk_课程3 primary key(课程号);

5.1.2唯一性约束

唯一性约束的值必须是唯一的,不允许重复。一个表可创建多个唯一性约束。 

1.在创建表时创建唯一性约束

【例8.6】在数据库stusys中创建course4表,以列级完整性约束方式定义唯一性约束。 

create table 课程4(课程号 char(4) not null, 课程名 char(16) not null unique, 学分 tinyint null);  


在课程名列定义的后面加上unique关键字,列级定义唯一性约束,未指定约束名字,MysQL自动创建约束名字。 

【例8.7】在数据库stusys中创建course5表,以表级完整性约束方式定义唯一性约束。 

create table 课程5(课程号 char(4) not null, 课程名 char(16) not null unique, 学分 tinyint null,constraint uk_课程5 unique(课程名)); 

 

在表中所有列定义的后面加上一条constraint子句,表级定义唯一性约束,指定约束名字为uk_课程5。 

2.删除唯一性约束

语法格式: 

alter table<表名>drop index<约束名>; 

【例8.8】删除例8.7在course5表创建的唯一性约束。 

alter table 课程5drop index uk_课程5;

3.在修改表时创建唯一性约束

语法格式: 

alter table<表名> 
add ( [ constraint < 约束名 > ] unique ( 唯一性约束列名 ) 

【例8.9】重新在course5表上定义唯一性约束。 

alter table 课程5add constraint uk_课程5 primary key(课程名);

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 2024-06-10 Unity 编辑器开发之编辑器拓展10 —— 其他常见工具类
  • VueRouter路由与Vuex状态管理
  • Python中使用SQLite和SQLAlchemy
  • 拐点已至:企业如何借助AI重塑增长?
  • flask项目结构与蓝图【心得】
  • 【设计模式】结构型-桥接模式
  • 计算机网络ppt和课后题总结(下)
  • vue2自定义指令
  • AI 边缘计算平台 - 回归开源 BeagleY-AI 简介
  • 机器学习-13-基于决策树算法构建北京市空气质量预测模型(实战)
  • 从零开始精通Onvif之获取设备信息
  • 绿联Nas docker 中 redis 老访问失败的排查
  • PhpStorm 项目部署/与git提交操作
  • java定时任务 设置开始时间、结束时间;每周一、四、六执行;并且隔n周执行。最后计算所有执行时间
  • GPT-4o:OpenAI的最新篇章与深度探索
  • ----------
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • If…else
  • Java Agent 学习笔记
  • node学习系列之简单文件上传
  • php ci框架整合银盛支付
  • Spring-boot 启动时碰到的错误
  • vue-router 实现分析
  • 第十八天-企业应用架构模式-基本模式
  • 记一次用 NodeJs 实现模拟登录的思路
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 开源SQL-on-Hadoop系统一览
  • 前端面试总结(at, md)
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 如何优雅地使用 Sublime Text
  • 世界上最简单的无等待算法(getAndIncrement)
  • 数组的操作
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 正则与JS中的正则
  • 字符串匹配基础上
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • $().each和$.each的区别
  • (14)Hive调优——合并小文件
  • (a /b)*c的值
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (论文阅读30/100)Convolutional Pose Machines
  • (十六)、把镜像推送到私有化 Docker 仓库
  • (小白学Java)Java简介和基本配置
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .Mobi域名介绍
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .NetCore 如何动态路由
  • .NET连接数据库方式