---- 集合运算要注意的问题 参与运算的各个集合必须列数相同且类型一致 采用第一个集合的表头作为最终结果的表头 如果使用了 order by,必须每个集合后面都使用 order by 可以使用小括号(...)先执行后面的语句 集合运算的几种方式 图片来自传智播客教师课件。...1、union/union all 并集 UNION运算符返回两个集合去掉重复元素后的所有记录。...,包括重复的。...employee_id, job_id, department_id FROM job_history ORDER BY employee_id; 2、intersect 交集 INTERSECT 运算符返回同时属于两个集合的记录
大家好,又见面了,我是你们的朋友全栈君。 MySQL DECIMAL数据类型用于在数据库中存储精确的数值。我们经常将DECIMAL数据类型用于保留准确精确度的列,例如会计系统中的货币数据。...D是表示小数点后的位数。 D的范围是0~30。MySQL要求D小于或等于P。 与INT数据类型一样,DECIMAL类型也具有UNSIGNED和ZEROFILL属性。...如果使用UNSIGNED属性,则DECIMAL UNSIGNED的列将不接受负值。 如果使用ZEROFILL,MySQL将把显示值填充到0以显示由列定义指定的宽度。...除了减法 其他方法可以正常执行; 嗯 那么碰到减法了,如果当前存储数据比要减少的数据小的话,那最好另外的地方直接做获取结果,最终在需要的地方做更新就好; 追加, 在java 中 直接给mysql...传decimal 类型数据 让mysql 做计算仍然会出现误差, 最终方案是将其在更新之前 获取结果,最终直接给mysql 传递需要更改的值,做存储就好!!
自增长 unique key 唯一键 1.1 空属性 两个值:null(默认的)和not null(不为空) 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算...站在正常的业务逻辑中: 如果班级没有名字,你不知道你在哪个班级 如果教室名字可以为空,就不知道在哪上课 所以我们在设计数据库表的时候,一定要在表中进行限制,满足上面条件的数据就不能插入到表中。...修改tt3表的属性: mysql> alter table tt3 change a a int(5) unsigned zerofill; mysql> show create table tt3\...构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。...建立外键的本质其实就是把相关性交给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 | | +----------+--------------+------+-----+---------+-------+ 插入新字段后,对原来表中的数据没有影响
表中一定要有各种约束,通过约束,让我们未来插入数据库表中的数据是符合预期的。约束的本质是通过技术收到逼迫程序员插入正确的数据,反过来,站在mysql的视角,凡是插入进来的数据,都是符合数据约束的。...空属性 not null 两个值:null(默认的)和not null(不为空) 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。...一个主键可以被添加到一列,或者多列上 主键;主键所在的列通常是整数类型 创建表的时候直接在字段上指定主键 mysql> create table if not exists test_key (...对于自增长:默认是从1开始插入的,如果默认插入了一个值作为起始值,则从这个起始值加1开始 所以我们在创建表的时候可以给自增长设置一个起始值: mysql> create table t22( -...建立外键的本质其实就是把相关性交给mysql去审核了,提前告诉mysql表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql不允许你插入。
表与表之间的关系 表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+一张新的表 示例: 图片 图片 创建表 =
查看所有表show tables;查看表结构desc 表名获取表的创建语句show create table 表名 \G;创建表CREATE [TEMPORARY] TABLE [IF NOT EXISTS...:存储引擎,不指定则使用默认存储引擎characterset:字符集,不指定则使用默认字符集collate:排序规则,不指定则使用默认排序规则下面我们创建两个不同存储引擎的表,来看看区别:不同的存储引擎...,创建表的文件不一样:user1 表存储引擎是 MyISAM,在数据目录中有三个不同的文件,分别是:users1.frm:表结构users1.MYD:表数据,MY 表示 MyISAM,D 表示 Datausers1....MYI:表索引,MY 表示 MyISAM,I 表示 Indexuser2 表存储引擎是 Innodb,在数据目录中有两个不同的文件,分别是:users1.frm:表结构user2.ibd:表的数据和索引复制表结构注意表...1只是复制了表2的结构,表1本身是没数据的!
一、空属性 两个值:null(默认的)和not null(不为空) 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算 案例: 创建表: create...索引: 在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结 构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。...索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。 索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。...这样可以使对应于表的SQL语句执行得更快,可快速访问数据库表中的特定信息 七、唯一键 一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题...;插入的学生班级号不能在班级表中没有。
表的约束 表的约束:表中一定要有各种约束,通过约束,让我们未来插入数据库表中的数据是符合预期的。约束本质是通过技术手段,倒逼用户,插入正确的数据。...反过来,在 mysql 角度,凡是插入进来的数据,都是符合数据约束的!约束的最终目的就是保证数据的完整性和可预期性。因此我们需要更多的约束条件!...一、空属性 两个值:null(默认的) 和 not null(不为空) 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算,任何数与 null 相加都为 null...的值由原来的 1 变成 00001,这就是 zerofill 属性的作用,如果宽度小于设定的宽度(这里设置的是 5),自动填充 0;要注意的是,这只是最后显示的结果,在 MySQL 中实际存储的还是1...建立外键的本质其实就是把相关性交给 mysql 去审核了,提前告诉 mysql 表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql 不允许你插入。
表的约束和约束的目标 表的约束:表中一定要有各种约束,通过约束,让我们未来插入数据库中的数据是符合预期的。约束本质是通过技术手段,倒逼程序员,插入正确的数据。...反过来,站在MySQL角度,凡是插入进来的数据,都是符合数据约束的! 约束的最终目标:保证数据的完整性和可预期性。 二....空属性 两个值:null和not null 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。...而如果为我们没有在创建表的时候显示声明默认值,MySQL会优化,自动加上默认值为NULL。 四....zerofill 对数字类型后面的长度很迷茫,对于下面这个表: mysql> show create table tt3\G ***************** 1. row ************
#前言:我们说过,库相当于一个文件夹,表相当于文件夹里的一个个文件,表里面的一条记录相当于一行内容,表中的一条记录有对应的标题,称为表的字段 #直观表 ?...#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; #查看库中的表
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
在数据库中,一起皆是表,可以说表是数据库最重要的组成部分.后续的 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.
约束的本质: 通过技术手段倒逼程序员插入正确的数据。反过来站在mysql的视角,凡是插入进来的数据,都是符合数据约束的。 约束的最终目标: 保证数据的完整性和可预期性。 为什么数据库这么严格?...二.表的非空约束 1.NULL与’ '比较 在MySQL数据类型已经说过,这二者是不同的,NULL代表什么都没有,而' '代表一个空串。 在select语句中,NULL不会参与到相应的计算操作中。...2.空属性null 在这个约束中,有两个选择: null(默认的) not null(不为空) 数据库默认字段基本都是字段允许为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。...如果将学生表和班级表结合成一个表,那么在插入数据时,就需要插入大量的字段造成没必要的冗余。若将其分成两个表,那么通过一一对应的映射,来减少没必要的数据。 为什么会造成没必要的冗余?...在两个表的前提下,若要新增一名学生信息,只需要插入三个字段;若合并成一个表,那么就需要插入3+2-1=4个字段,并且我们知道组合起来的情况也会更多,两个表合并的结果就是数据位置上的相乘,比如: 两个表
合并 将相同字段的两个关系表相加形成一个新表,并在新表中去掉重复的元组。 ? 2. 求差 对具有相同字段的两个关系表进行操作,去掉第一个表中与第二个表相同的元组,第一个表中留下的形成新表。 ? 3....求交 对具有相同字段的两个关系表进行操作,取出第一张表与第二张表中相同的行,形成一个新表。 ? 4....笛卡尔积 对具有不同字段的两个关系表进行操作,用第一个表的每一行依次与第二个表的每一行组成新的行,即矩阵相乘,然后将这些新的行组成一个新的表。 ?
选择(SELECT) SELECT 关系名 WHERE 条件,挑选出关系中符合条件的行。...属性名n),挑选出关系中指定的列。 ? 3. 连接(JOIN) JOIN 关系名 1 AND 关系名 2 WHERE 条件,将两个关系中符合条件的行组成一个新的行,用这些新的行生成一个新的表。...如果条件为 = ,为等值连接;否则为自然连接,将会去掉等值连接中重复的一列。 ? 4....除(DIVISION) 关系名 1 ÷ 关系名 2 ,设关系R除以关系S的结果为关系T,T需要满足两个条件: (1). T包含所有在R但不在S中的属性及其值。 (2)....T的元组与S的元组的所有组合都在R中。 ? 用简单的图形表达除法的意思如下: ?
以至于查询速度变慢,而且由于表的锁机制导致应用操作也搜到严重影响,出现了数据库性能瓶颈。 mysql中有一种机制是表锁定和行锁定,是为了保证数据的完整性。...2、MySQL分表 分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,每个表都对应三个文件,MYD数据文件,.MYI索引文件,.frm表结构文件。...Mysql分表分为垂直切分和水平切分,具体区别如下: 垂直切分是指数据表列的拆分,把一张列比较多的表拆分为多张表 通常我们按以下原则进行垂直拆分: 把不常用的字段单独放在一张表; 把text,blob(...#创建两个分表,表结构必须和上面完整的表结构一致 mysql> create table tb_member1 like member; mysql> create table tb_member2 like...3)查看刚刚创建的三个表结构如下: 4)将数据分到两个表中: mysql> insert into tb_member1(id,name,sex) select id,name,sex from member
在 MySQL 中,Temporary Table(临时表)和 Memory Table(内存表)是两种不同的表类型,它们有一些重要的区别和用途。...可以使用 CREATE TEMPORARY TABLE 语句创建临时表。 临时表可以存储在磁盘上,也可以存储在内存中,具体取决于 MySQL 的配置和存储引擎。...内存表适用于需要快速读写操作的场景,但需要注意的是,内存表的数据会在 MySQL 服务重启时丢失,因为数据存储在内存中。...3.区别 主要的区别在于存储和生命周期: 存储: 临时表的存储位置可以是磁盘或内存,而内存表的数据存储在内存中。...生命周期: 临时表的生命周期限于会话或连接,会话结束时自动删除;而内存表的数据在 MySQL 服务重启时会丢失。 4.小结 您需要根据业务需求来选择使用临时表还是内存表。
本章节我们主要介绍 MySQL 的运算符及运算符的优先级。...MySQL 主要有以下几种运算符: 算术运算符 比较运算符 逻辑运算符 位运算符 ---- 算术运算符 MySQL 支持的算术运算符包括: 运算符 作用 + 加法 - 减法 * 乘法 / 或 DIV 除法...通过这些比较运算符,可以判断表中的哪些记录是符合条件的。比较结果为真,则返回 1,为假则返回 0,比较结果不确定则返回 NULL。 符号 描述 备注 = 等于 , !...逻辑运算符用来判断表达式的真假。...--+ | 1 ^ 0 | +-------+ | 1 | +-------+ ---- 位运算符 位运算符是在二进制数上进行计算的运算符。