mysql实体完整性实现方法_MySQL数据库——数据完整性(实体完整性、域完整性、参照完整性)...
数据完整性的概念
数据完整性是为了保证插入到数据库中的数据是正确的,防止用户可能的错误输入。
数据完整性分为实体完整性、域完整性、参照完整性。
实体(行)完整性
实体完整性中的实体指的是表中的行,因为一行记录对应一个实体。
实体完整性规定表的一行在表中是唯一的实体,不能出现重复。
实体完整性通过表的主键来实现。
主键关键字: primary key
主键特点: 不能为null,并且唯一。
主键分类:
逻辑主键:例如ID,不代表实际的业务意义,只是用来唯一标识一条记录(推荐)
业务主键:例如username,参与实际的业务逻辑。
主键使用方式:
方式一:
Create table t1(
id int primary key,
name varchar(100)
);
插入数据:
insert into t1 values(1,’zs’);
insert into t1 values(2,’ls’);
主键自动增长:
关键字: auto_increment
下面是主键自动增长的例子
create table t4(
id int primary key auto_increment,
name varchar(100)
);
插入数据:
insert into t4(name) values(‘zs’);
insert into t4 values(null,’ls’);
域(列)完整性
域(列)完整性指数据库表的列(即字段)必须符合某种特定的数据类型或约束
非空约束:not null
唯一约束: unique
create table t5(
username varchar(100) not null unique,
gender varchar(100) not null,
phonenum varchar(100) unique
);
username 唯一 ,如果有重复就会出现错误:
[Err] 1062 - Duplicate entry 'ls' for key 'username'
如果第二次插入代码insert into student3(username,gender,phone) VALUES('ls','男','112');
就会出现错误:[Err] 1062 -关键字“用户名”的重复条目“ls”
gender 不能为 NULL,如果不输入就会出现错误:
Field 'gender' doesn't have a default value
执行下面这条代码insert into student3(username,gender,phone) values('ll','男','113');
就会出现错误Duplicate entry 'll' for key 'username'
关键字“用户名”的重复条目“ll”
参照完整性**
参照完整性指的就是多表之间的设计,主要使用外键约束。
多表设计: 一对多、多对多、一对一设计
一对多
下面举例说明:
1.客户和订单的关系就是一对多,一个客户可以有多张订单,一张订单属于一个客户;
创建客户表:
create table customers(
id int,
name varchar(100),
address varchar(255),
primary key(id)
);
创建订单表:
create table orders(
order_num int primary key,
price float(8,2),
status int,
customer_id int,
constainct customer_id_fk foreign key(customer_id) references customers(id)
);
外键约束: constraint customer_id_fk foreign key(customer_id) references customers(id);
注: constraint: 约束的意思。foreign key: 外键。references: 参照
创建一个名叫customer_id_fk的外键约束,其中外键指的是customer_id,并且参照的是 customers表中的id列。
图形界面操作的过程是:
子表的删除、更新策略
子表的删除更新策略一共有四种:
1. CASCADE 级联策略。
使用此种策略时主表的记录被删除或者主键字段被修改时会同步删除或修改子表
2. NO ACTION 无动作策略。
使用此种策略时要删除主表必须先删除子表,要删除主表的记录必须先删除子表关联的记录,不能更新主表主键字段的值。
3. RSTRICT 主表约束策略。
此种策略对主表的约束跟 NO ACTION 一样
4. SET NO 置空策略。
使用此种策略时,如果主表被删除或者主键被更改,则将子表中的外键设置为NULL。需要注意的是,如果子表的外键是主键或者是设置为NOT NULL的,则主表的删除和主键的更改跟 NO ACTION 一样。
多对多
老师和学生是多对多关系, 一个老师对应多个学生,一个学生被多个老师教
注意:
需要创建第三张表,并且公共的字段,可以放入到第三张表格中。
设置外键对应其他表格中的主键
创建老师表:
Create table teachers(
id int,
name varchar(100)
salary float(8,2),
primary key(id)
);
创建学生表:
Create table students(
id int,
name varchar(100),
grade varchar(100),
primary key(id)
);
第三张表格:
Create table teacher_student(
t_id int,
s_id int,
primary key(t_id,s_id)
CONSTRAINT teacher_id_fk FOREIGN KEY(t_id) REFERENCES teachers(id),
CONSTRAINT student_id_fk FOREIGN KEY(s_id) REFERENCES students(id)
);
一对一
按照外键关联
1.在IdCard表中的外键添加唯一约束
按照主键关联,对主键添加外键约束
实际开发中直接设计一张表格就可以了。
注意:
一般情况,设计一张表格即可;
设计成两张表格:
第二张表格中创建一个字段为外键(设置成唯一 unique)对应 第一张表格中的主键;
直接使用第二张表格中的主键为外键,对应第一张表格中的主键。
mysql实体完整性实现方法_MySQL数据库——数据完整性(实体完整性、域完整性、参照完整性)...相关推荐
- mysql实体完整性实现方法_mysql数据库 --数据完整性---实体完整性-域完整性-参照完整性...
一.数据完整性 数据完整性是为了保证插入到数据库中的数据是正确的,防止用户可能的错误输入. 数据完整性分为实体完整性.域完整性.参照完整性. 2.1实体(行)完整性 (实体完整性中的实体指的是表中的行 ...
- mysql命令导出方法_MySQL数据库导出方法大全(命令行+navicat)
由于前段时间刚做完数据库课设,想导出数据库文件,在朋友的机器上跑一跑.由于我使用的是界面化的mysql,理所当然地认为可以在界面上找到导出数据库的操作选项,结果自己一个人摸索了半天,以失败告终.上网一 ...
- mysql数据转储方法_Mysql数据库各种导出导入数据方式的区别(我的理解错误还望指正)...
mysqldump,NAVICAT转储,select * outfile在千级数据,万级,百万级数据下的表现. 千级数据 mysqldump导出sql文件 导出是出了拒绝访问的错误:为对应目录(.sq ...
- win上mysql忘记root密码_MySQL数据库之windows下mysql忘记root密码的解决方法
本文主要向大家介绍了MySQL数据库之windows下mysql忘记root密码的解决方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 方法一: 1.在DOS窗口下输入net ...
- mysql英文版数据库备份方法_mysql数据库太大了如何备份与还原
命令:mysqlhotcopy 这个命令会在拷贝文件之前会把表锁住,并把数据同步到数据文件中,以避免拷贝到不完整的数据文件,是最安全快捷的备份方法. 命令的使用方法是: mysqlhotcopy -u ...
- mysql实训报告_mysql数据库技术》实验报告.doc
mysql数据库技术>实验报告 MySQL数据库技术实验报告 系 别 班 级 学 号 姓 名 地点 地点机房 课程名称 MySQL数据库技术 实验名称 实验1 MySQL的使用 实 验 过 程 ...
- mysql显示表已存在_MySQL数据库与数据表的相关操作
数据库相关操作: 显示数据库:show databases; 如果是0.00秒并不代表没有花费时间,而是时间非常短,小于0.01秒. 创建数据库: Query OK表示创建成功,1行受到影响,处理时间 ...
- mysql生活使用方法_MySQL Workbench使用教程
MySQL Workbench 是一款专为 MySQL 设计的集成化桌面软件,也是下一代的可视化数据库设计.管理的工具,它同时有开源和商业化两个版本.该软件支持 Windows 和 Linux 系统, ...
- mysql数据基本指令_mysql数据库常用命令(详细)
mysql数据库常用命令(详细) *************************************************** windows下mysql的启动与停止 启动MYSQL服务 n ...
最新文章
- POJ - 1986 Distance Queries 倍增求LCA
- 高颜值俄罗斯天才少女加入华为,曾获“编程界的奥林匹克”世界冠军
- 如何做一名优秀的博士生--施一公教授
- 模拟手机浏览器_干货系列,让浏览器自己动起来,解放双手
- 子类能不能继承父类的构造方法?
- GO语言的进阶之路-Golang高级数据结构定义
- HALCON不同图像格式保存时间对比表
- 2014最不受欢迎10编程语言种
- 【java学习之路】(数据结构篇)003.链表
- IIS6配置后仍然无法解析json文件解决办法
- 谈谈 js判断数组 那点事
- JDK 下载和安装教程
- java基础案例教程第二版pdf,Java系列学习进阶视频
- 安川焊接机器人做圆弧运动编程_安川机器人示教器编程插补方式详细介绍--安川机器人...
- python读取lmdb文件_LMDB 的 Python 接口使用方法
- 修改ns服务器,修改你的域名ns服务器地址
- Mysql错误:#1054 - Unknown column '字段名' in 'field list'
- 【OpenCV+Python实现医学影像拼接(一)】
- oracle11g sga分配,Oracle11gsga_target参数设置
- 【你好,windows】Windows 10 20H2 19042.630专业工作站纯净版2020.12.1
热门文章
- Maven--Maven常用插件及管理
- docker hub上镜像手动下载_DockerHub 镜像直接下载
- 用python怎么写?
- 通用权限管理系统组件 (GPM - General Permissions Manager) 在跨国直销企业电子商务项目中的成功应用...
- shell for 0开始_#shell-shell脚本初识
- 拼多多被称为“假货之王”,为什么还成功上市了?
- start with 用法
- Apollo无人驾驶入门课程笔记之定位 (三)
- DVB-S2系统中LDPC译码器的实现 LDPC编码器的实现 FPGA DVB-S2、DVB-S2X LDPC 编码IP、LDPC译码 IP
- C++字符串转十六进制