个人网站谢谢,关于茶叶的网站模板免费下载,腾讯云wordpress镜像ip访问不了,wordpress 标签显示数量一、数据库约束
约束#xff1a;按照一定条件进行规范的做事#xff1b;
表定义的时候#xff0c;某些字段保存的数据需要按照一定的约束条件#xff1b;
1.null约束
字段null#xff1a;该字段可以为空#xff1b;not null#xff1a;该字段不能为空不指定的话就是…一、数据库约束
约束按照一定条件进行规范的做事
表定义的时候某些字段保存的数据需要按照一定的约束条件
1.null约束
字段null该字段可以为空not null该字段不能为空不指定的话就是null id int not null; 2.unique唯一约束
表示某个字段不能重复实际可以使用多个字段来建立unique唯一约束
null不进行unique唯一校验 sn int unique; 当sn重复时便会报错 3.default默认值约束
表示某个字段设置了default及默认值插入的时候该列不插入就会插入默认值。
显示的插入数据即使是null默认值也不会生效 name varchar(20) default unkown; 插入的字段不使用name才会插入默认值 4.primary key主键约束
主键一般用于某张表标识唯一的一条数据
primary key not null unique
仅仅unique约束的字段还可以保存多条null的数据也不能标识唯一的数据 主键字段不插入或者插入重复的都会报错 一张表一般都需要设计主键
如果使用整型主键还可以结合auto_increment表示从1开始自增 自增不是以最大值加1的方式而是mysql记录了这个值来递增。 再插入数据id就可能不连续 5.foreign key外键约束
用于设计表与表之间的关系
表1主表主键-----表2从表外键就可以建立表1和表2一对一或者一对多的关系
二、表的设计
数据库设计表关系
主表的主键关联从表的外键建立外键不一定非要使用主键来关联只是常用主键和外键关联 create table 主表 id int primary key auto_increment, ... ); create table 从表 id int primary key auto_increment, ... 主表_id int, foreign key (主表_id references 主表id ); 上面两个表中 蓝色部分建立关系
foreign key (主表_id references 主表id---
主表_id从表的外键字段名
主表主表的表名
id主表的关联字段名一般使用主键
1.一对一的关系
比如人对身份证 人 id主键 name:姓名 amount存款 username账号 password密码 身份证 id主键 身份证号******* 住址******* ...... user_id外键 建立人的主键与身份证外键的联系
从现实看其实可以设计成一张表但是人这张表查询比较频繁如果把身份证相关的字段也放在一起那么比较频繁的又不获取身份证信息的查询效率就比较低。
设计为一对一关系的两张表目的是
数据库表设计其实就是建模建立一种对象模型解耦模型之间的解耦效率不经常使用的数据单独存储效率会比较高
2.一对多的关系 班级表 班级id 班级名称 ... 学生表 学生 id主键 学生姓名 学号 班级id外键 班级id就是班级表和学生表之间的关联
一对多其实是有方向的包含
1班级到学生一对多一个班级多个学生
2学生到班级一对一一个学生一个班级
3.多对多的关系
表设计的时候这个多对多关系在两张主表中没有外键体现
1两张主表建立多对多关系
2使用一张单独的中间表来表示两张主表的多对多关系 学生和课程再某个业务发生后就可能产生关系 考试一个学生考多门课程一门课程有多个学生考试 设计上使用中间表
1两个外键分别关联两张主表的主键
2还可能设计一些业务的字段比如考试成绩 学生表和课程表是多对多的关系逻辑上的多对多关系主表没有关系的体系
中间表体现实际的多对多关系两个外键其实就表现出多对多的关系
插入数据 在MySQL中执行后 表结构上只有两个一对多关系数据上体现出两个一对多关系及逻辑上的多对多关系
一个学生考多个试---学生表中间表1n一个课程有多个考试成绩---课程表中间表1m中间表考试成绩表---学生课程nm
三、新增
插入操作insert into 表 select...from 表 where... order by ... limit;
使用场景
1复制表
2提前准备一些统计的数据统计的sql一般关联很多表条件可能也很复杂执行效率可能不高很多系统就提前运行任务将统计的数据准备在单独的一张表中 把查询结果集返回的所有数据按查询出来的字段顺序插入到insert表给的字段。