站在正常的业务逻辑中: 如果班级没有名字,你不知道你在哪个班级 如果教室名字可以为空,就不知道在哪上课 所以我们在设计数据库表的时候,一定要在表中进行限制,满足上面条件的数据就不能插入到表中。...修改tt3表的属性: mysql> alter table tt3 change a a int(5) unsigned zerofill; mysql> show create table tt3\...构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。...数据库使用索引以找到特定值,然后顺指针找到包含该值的行。这样可以使对应于表的SQL语句执行得更快,可快速访问数据库表中的特定信息。...建立外键的本质其实就是把相关性交给mysql去审核了,提前告诉mysql 表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql不允许你插入。
表中一定要有各种约束,通过约束,让我们未来插入数据库表中的数据是符合预期的。约束的本质是通过技术收到逼迫程序员插入正确的数据,反过来,站在mysql的视角,凡是插入进来的数据,都是符合数据约束的。...站在正常的业务逻辑中: 如果班级没有名字,你不知道你在哪个班级 如果教室名字可以为空,就不知道在哪上课 所以我们在设计数据库表的时候,一定要在表中进行限制,满足上面条件的数据就不能插入到表中。...一个主键可以被添加到一列,或者多列上 主键;主键所在的列通常是整数类型 创建表的时候直接在字段上指定主键 mysql> create table if not exists test_key (...对于自增长:默认是从1开始插入的,如果默认插入了一个值作为起始值,则从这个起始值加1开始 所以我们在创建表的时候可以给自增长设置一个起始值: mysql> create table t22( -...建立外键的本质其实就是把相关性交给mysql去审核了,提前告诉mysql表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql不允许你插入。
一张表最多只能有一个自增长 获取上次插入的 AUTO_INCREMENT 的值:select last_insert_id(); 主键(primary key) primary key用来唯一的约束该字段里面的数据...,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。...外键(foreign key (字段名) references 主表(列)) 外键用于定义主表和从表之间的关系: 外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。...举例:班级表id只有10,20;向从表插入时的class_id的值只能为10 / 20 / null; 数据一致性:当对主表中的主键数据进行修改(如更新或删除)时 ,通过设置外键约束的 ON DELETE...和 ON UPDATE 选项(如 CASCADE、SET NULL 等),可以自动、一致地更新或处理从表中的相关数据。
collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准 2、创建表的案例 create table users ( id int, name varchar(20) comment...MyISAM; 3、查看表结构 desc 表名 示例: 4、修改表 在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。...案例: 4.1.在users表中添加两条记录 mysql> insert into users values(1,'a','b','1982-01-04'),(2,'b','c','1984-01- 04...'); 4.2.在users表添加一个字段,用于保存图片路径 mysql> alter table users add assets varchar(100) comment '图片路径' after...(100) | YES | | NULL | | +----------+--------------+------+-----+---------+-------+ 插入新字段后,对原来表中的数据没有影响
'学号', name varchar(5) ); 创建好表之后,我们可以追加主键 2.删除主键 alter table 表名 drop primary key; 案例: 3.复合主键 在创建表的时候...索引: 在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结 构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。...索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。 索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。...这样可以使对应于表的SQL语句执行得更快,可快速访问数据库表中的特定信息 七、唯一键 一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题...;插入的学生班级号不能在班级表中没有。
表的约束 表的约束:表中一定要有各种约束,通过约束,让我们未来插入数据库表中的数据是符合预期的。约束本质是通过技术手段,倒逼用户,插入正确的数据。...反过来,在 mysql 角度,凡是插入进来的数据,都是符合数据约束的!约束的最终目的就是保证数据的完整性和可预期性。因此我们需要更多的约束条件!...的值由原来的 1 变成 00001,这就是 zerofill 属性的作用,如果宽度小于设定的宽度(这里设置的是 5),自动填充 0;要注意的是,这只是最后显示的结果,在 MySQL 中实际存储的还是1...再插入 stu 表: 但是此时这两张表是两张独立的表,它们只有对应的关联关系,并没有任何的约束关系。...建立外键的本质其实就是把相关性交给 mysql 去审核了,提前告诉 mysql 表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql 不允许你插入。
表的约束和约束的目标 表的约束:表中一定要有各种约束,通过约束,让我们未来插入数据库中的数据是符合预期的。约束本质是通过技术手段,倒逼程序员,插入正确的数据。...反过来,站在MySQL角度,凡是插入进来的数据,都是符合数据约束的! 约束的最终目标:保证数据的完整性和可预期性。 二....而如果为我们没有在创建表的时候显示声明默认值,MySQL会优化,自动加上默认值为NULL。 四....zerofill 对数字类型后面的长度很迷茫,对于下面这个表: mysql> show create table tt3\G ***************** 1. row ************...这样插入一个并不属于class表的班级编号的时候,就会报错。 并且如果从表中对应的还有数据,是不能在主表中删除的。
set utf8 engine MyISAM; 说明: 不同的存储引擎,创建表的文件不一样。...users 表存储引擎是 MyISAM ,在数据目中有三个不同的文件,分别是: users.frm:表结构 users.MYD:表数据 users.MYI:表索引 备注:创建一个engine是innodb...的数据库,观察存储目录 3.查看表结构 desc 表名; 示例: 4.修改表 在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型, 表的存储引擎等等。....); ALTER TABLE tablename DROP (column); 案例: 在users表添加二条记录 mysql> insert into users values(1,'a','b'...,'1982-01-04'),(2,'b','c','1984-01- 04'); 在users表添加一个字段,用于保存图片路径 mysql> alter table users add assets
#前言:我们说过,库相当于一个文件夹,表相当于文件夹里的一个个文件,表里面的一条记录相当于一行内容,表中的一条记录有对应的标题,称为表的字段 #直观表 ?...#id,name,sex,age为表的字段,其余一行内容称为一条记录 1.建表 #创建表语法格式 Create table 表名> ( , ….....: create table 表示创建表的固定关键字,student为表名,有四个字段,分别表示 id:学号列, int:数字类型, 4:长度为4, not null:不为空值...字节 极大文本数据 #创建表的时候指定存储引擎 mysql> create table test ( -> id int(4) not null auto_increment,...#语法格式:drop table 表名> #例子:删除db库里面的student表 mysql> use db; Database changed mysql> show tables; #查看库中的表
在数据库中,一起皆是表,可以说表是数据库最重要的组成部分.后续的 sql语句也大多数就是对表进行操作. 1.创建表 语法: CREATE TABLE 表名( 属性名1 属性类型 属性名2...字符集和校验规则已经没什么好讲的了,不了解的可以去看上一篇文章:【MySQL】库的操作-CSDN博客 存储引擎,这个在配置文件时添加的,现在打开配置文件/etc/my.cnf 我们可以怎么查看表的存储引擎呢...找到/var/lib/mysql/数据库名进入这个目录,找到刚刚创建的表: 当我们使用innodb这个存储引擎时,会产生这两个文件. 1.1 知识补充: )存储引擎 在 MySQL 中,存储引擎...当然可以看到到还不值这些,比如:注释信息(我没写) 主键\外建\非空等等约束,这些应该会在表的约束和大家见面. 悄悄告诉你,其实desc 表名的内容就是从这个建表信息中提取的. 3....3.4 修改表名 语法: ALTER TABLE 旧表名 rename [to] 新表名 创建一个临时的表,来演示修改表名和删除表~ 这是新创建的表,下面开始修改它。 4.
拆分存储的技术选型 拆分存储常用的技术解决方案目前主要分为4种:MySQL的分区技术、NoSQL、NewSQL、基于MySQL的分表分库。...MySQL的分区技术 图3-1所示为MySQL官方文档中的架构图。...3)稳定性考量:人们对MySQL的运维已经很熟悉了,它的稳定性没有问题,然而MongoDB的稳定性无法保证,毕竟很多人不熟悉。 基于以上的原因,当时项目组排除了MongoDB。...基于MySQL的分表分库 最后说一下基于MySQL的分表分库:分表是将一份大的表数据进行拆分后存放至多个结构一样的拆分表中;分库就是将一个大的数据库拆分成类似于多个结构的小数据库。...项目组没有选用前面介绍的3种拆分存储技术,而是选择了基于MySQL的分表分库,其中有一个重要考量:分表分库对于第三方依赖较少,业务逻辑灵活可控,它本身并不需要非常复杂的底层处理,也不需要重新做数据库,只是根据不同逻辑使用不同
◆ 拆分存储的技术选型 拆分存储常用的技术解决方案目前主要分为4种:MySQL的分区技术、NoSQL、NewSQL、基于MySQL的分表分库。...◆ MySQL的分区技术 图3-1所示为MySQL官方文档中的架构图。...3)稳定性考量:人们对MySQL的运维已经很熟悉了,它的稳定性没有问题,然而MongoDB的稳定性无法保证,毕竟很多人不熟悉。 基于以上的原因,当时项目组排除了MongoDB。...◆ 基于MySQL的分表分库 最后说一下基于MySQL的分表分库:分表是将一份大的表数据进行拆分后存放至多个结构一样的拆分表中;分库就是将一个大的数据库拆分成类似于多个结构的小数据库。...项目组没有选用前面介绍的3种拆分存储技术,而是选择了基于MySQL的分表分库,其中有一个重要考量:分表分库对于第三方依赖较少,业务逻辑灵活可控,它本身并不需要非常复杂的底层处理,也不需要重新做数据库,只是根据不同逻辑使用不同
所谓约束,就是避免犯一些低级错误,比如类似于语法错误,编译器的编译失败实际上也算是一种约束。 表中一定要有各种约束,通过约束,让我们未来插入数据库表中的数据是符合预期的。...约束的本质: 通过技术手段倒逼程序员插入正确的数据。反过来站在mysql的视角,凡是插入进来的数据,都是符合数据约束的。 约束的最终目标: 保证数据的完整性和可预期性。 为什么数据库这么严格?...二.表的非空约束 1.NULL与’ '比较 在MySQL数据类型已经说过,这二者是不同的,NULL代表什么都没有,而' '代表一个空串。 在select语句中,NULL不会参与到相应的计算操作中。...如果将学生表和班级表结合成一个表,那么在插入数据时,就需要插入大量的字段造成没必要的冗余。若将其分成两个表,那么通过一一对应的映射,来减少没必要的数据。 为什么会造成没必要的冗余?...在两个表的前提下,若要新增一名学生信息,只需要插入三个字段;若合并成一个表,那么就需要插入3+2-1=4个字段,并且我们知道组合起来的情况也会更多,两个表合并的结果就是数据位置上的相乘,比如: 两个表
表与表之间的关系 表1 foreign key 表2 则表1的多条记录对应表2的一条记录,即多对一 利用foreign key的原理我们可以制作两张表的多对多,一对一关系 多对多: 表1的多条记录可以对应表...2的一条记录 表2的多条记录也可以对应表1的一条记录 一对一: 表1的一条记录唯一对应表2的一条记录,反之亦然 分析时,我们先从按照上面的基本原理去套,然后再翻译成真实的意义,就很好理解了...1、先确定关系 2、找到多的一方,把关联字段写在多的一方 一对多 多对一或者一对多(左边表的多条记录对应右边表的唯一一条记录) 需要注意的: 1.先建被关联的表,保证被关联表的字段必须唯一。...图片 创建表 书要关联出版社 被关联的表 create table press(id int primary key auto_increment, name char(20)); 关联的表 create...add primary key(id,avg) 多对多:一个作者可以写多本书,一本书也可以有多个作者,双向的一对多,即多对 关联方式:foreign key+一张新的表 示例: 图片 图片 创建表 =
标签:Excel公式,SUMPRODUCT函数 基于列中的条件求和通常使用SUMIF函数或者SUMIFS函数,特别是涉及到多条件求和时。然而,随着条件的增多,公式将会变得很长,难以理解。...而使用SUMPRODUCT函数,可以判断同一列中的多个条件且公式简洁。 如下图1所示的示例。...图1 如果想要求东区超市1和超市2的销售额之和,可以使用公式: =SUMPRODUCT(($A$2:$A$12="东区")*(($B$2:$B$12="超市1")+($B$2:$B$12="超市2"))...,因此,如果需要满足的条件更多的话,就可以通过逗号分隔符将它们放置在花括号中,公式更简洁。...小结 在花括号中放置判断条件,从而使公式更简洁,是本文讲解的重点技巧。
使用原则和设计规范 聊完范式,接下来我们看看 MySQL 使用中的一些使用原则和设计规范。...想要发挥 MySQL 的最佳性能,需要遵循 3 个基本使用原则 首先是需要让 MySQL 回归存储的基本职能:MySQL 数据库只用于数据的存储,不进行数据的复杂计算,不承载业务逻辑,确保存储和计算分离...一旦事务回滚,会导致资源占用时间过长 大 SQL,复杂的 SQL 意味着过多的表的关联,MySQL 数据库处理关联超过 3 张表以上的 SQL 时,占用资源多,性能低下 大批量,意味着多条 SQL...必须要用时,尽量与主业务表分离,减少对这类字段的检索和更新 ---- 基本设置规则 必须指定默认存储引擎为 InnoDB,并且禁用 MyISAM 存储引擎,随着 MySQL 8.0 版本的发布,所有的数据字典表都已经转换成了...这些字段类型,在 MySQL 数据库的检索性能不高,很难使用索引进行优化。如果必须使用这些功能,一般采取特殊的结构设计,或者与程序结合使用其他的字段类型替代。
前言: 在数据库中,数据表是存储和组织数据的基本单位,对于数据表的操作是每个程序员需要烂熟于心的技巧。...创建表时,不同的存储引擎创建的文件不同,比如我再任意创建一个表,不过这个表的存储引擎为MyISAM。使用这个搜索引擎创建的文件有 xxx.sdi 、xxx.MYD、xxx.MYI 三个文件。...如果用户需要查看具体的某张表,我们使用如下SQL语句: DESC table_name; --查看指定表结构-- 比如,我们查看刚刚创建的user表: 除此之外,查看创建表时的创建语句,我们可以使用如下...表的修改 在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。...✈️表的重命名 修改表,是对表中的属性字段以及格式的修改,不同的属性修改起来略有不同。
MySQL修改表的字段 MySQL 修改表字段的方法有两种: ALTER TABLE MODIFY COLUMN。...其语法如下: ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型; 其中,表名 表示要修改的表名,字段名 表示要修改的字段名,字段类型 表示修改后的字段类型。...例如,修改表 users 的字段 username 的类型为 VARCHAR(50),可以使用以下 SQL 语句: ALTER TABLE users MODIFY COLUMN username VARCHAR...其语法如下: ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型 [属性]; 其中,表名 表示要修改的表名,字段名 表示要修改的字段名,字段类型 表示修改后的字段类型,属性 表示修改后的字段属性...例如,将表 users 中的字段 age 的数据类型修改为 INT,并设置默认值为 0,可以使用以下 SQL 语句: ALTER TABLE users MODIFY COLUMN age INT DEFAULT
数据操作语言:表连接查询(一) 从多张表中提取数据 从多张表提取数据,必须指定关联的条件。如果不定义关联条件就会出现无条件连接,两张表的数据会交叉连接,产生 笛卡尔积。...规定了连接条件的表连接语句,就不会出现笛卡尔积。...表连接分为两种:内连接 和 外连接 内连接是结果集中只保留符合连接条件的记录 外连接是不管符不符合连接条件,记录都要保留在结果集中 内连接的简介 内连接是最常见的一种表连接,用于查询多张关系表符合连接条件的记录...内连接的多种语法形式 SELECT ...... FROM 表1 JOIN 表2 ON 连接条件; SELECT .........="SCOTT"; 相同的数据表也可以做表连接
表的连接分为内连和外连。 一.内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。...左外连接 如果联合查询,左侧的表完全显示我们就说是左外连接。...即将学生表放在左侧,成绩表放在右侧,此时左侧的表完全显示,右侧的表由于缺少对应的一条信息,其内部的值为空。语法与内连接的区别就是将inner替换成了left。...这与左外连接的规则是一样的,只不过主导的表变成了右侧。...从上面要求:同时列出没有员工的部门可以看出,部门为主,因此若选择左外连接,部门表在左侧;选择右外连接,部门表在右侧。