一起了解什么是MySQL数据库(三)
免费学习推荐: mysql视频教程 目录 模糊查询 表的约束 表之间的关联 多对一关联 多对多关联 一对一关联 模糊查询 可以根据大致提供的内容,找到我们想要的数据,它与=查询不同,拿
<img src="https://img.mryunwei.com/uploads/2023/04/20230419034924829.jpg"><blockquote><p>免费学习推荐:mysql视频教程</p></blockquote>
目录
可以根据大致提供的内容,找到我们想要的数据,它与=查询不同,拿char类型数据和varchar类型数据举例:
模糊查询比较精准,这种方式查询,必须要输入这个字段的全部内容,才可以查询出来,而这里char类型存储的数据,长度不满10为,所以使用了空格补充,所以查询的时候,需要把空格带上才可以;
我们也可以使用模糊查询提供给我们的查询方式,% 表示任意0个或多个字符。
SQL提供了四种匹配模式:
% 表示任意0个或多个bai字符。如下语句: SELECT * FROM user WHERE name LIKE ‘;%三%’; 将会把name为“张三”,“三脚猫”,“唐三藏”等等有“三”的全找出来;_ 表示任意单个字符。语句: SELECT * FROM user WHERE name LIKE ‘;三’; 只找出“唐三藏”这样name为三个字且中间一个字是“三”的; SELECT * FROM user WHERE name LIKE ‘;三__’; 只找出“三脚猫”这样name为三个字且第一个字是“三”的;[]表示括号内所列字符中的一个(类似与正则表达式)。语句: SELECT * FROM user WHERE name LIKE ‘;[张李王]三’; 将找出“张三”、“李三”、“王三”(而不是“张李王三”); 如 [ ] 内有一系列字符(01234、abcde之类的)则可略写为“0-4”、“a-e” SELECT * FROM user WHERE name LIKE ‘;老[1-9]’; 将找出“老1”、“老2”、……、“老9”; 如要找“-”字符请将其放在首位:’;张三[-1-9]’;[^ ] 表示不在括号所列之内的单个字符。语句: SELECT * FROM user WHERE name LIKE ‘;[^张李王]三’; 将找出不姓“张”、“李”、“王”的“赵三”、“孙三”等; SELECT * FROM user WHERE name LIKE ‘;老[^1-4]’; 将排除“老1”到“老4”寻找“老5”、“老6”、……、“老9”。
表的约束
介绍:
约束条件与数据类型的宽度一样,都是可选参数
作用:用于保证数据的完整性和一致性
主要分为:
default:如果没有为该字段设置值,则使用我们定义在default后面的一个默认值
UNIQUE KEY:某个字段设置这个约束后,那么它设置的值,在整个表中这个字段只能存在一个(唯一)
PRIMARY KEY:主键primary key是innodb存储引擎组织数据的依据,innodb称之为索引组织表,一张表中必须有且只有一个主键。主键是能确定一条记录的唯一标识
AUTO_INCREMENT:当设置以后,每次向表插入值时,这个字段会自动增长一个数字,但是这个字段必须是整数类型,而且还要是主键
FOREIGN KEY:外键,将该表的某个字段关联另一张表的某个字段,关联后这个字段的值必须对应关联字段的值。
我们创建表,通常会有一个id字段作为索引标识作用,并且会将它设置为主键和自增。
实例:
这个时候,我们进行两部操作就可以解决这个问题。
还需要注意的是:我们使用delete删除一条记录时,并不会影响自增
联合主键
确保设置为主键的某几个字段的数据相同
主键的一个目的就是确定数据的唯一性,它跟唯一约束的区别就是,唯一约束可以有一个NULL值,但是主键不能有NULL值,再说联合主键,联合主键就是说,当一个字段可能存在重复值,无法确定这条数据的唯一性时,再加上一个字,两个字段联合起来确定这条数据的唯一性。比如你提到的id和name为联合主键,在插入数据时,当id相同,name不同,或者id不同,name相同时数据是允许被插入的,但是当id和name都相同时,数据是不允许被插入的。
实例:
外键的话,我们在表之间的关联进行演示
表之间的关联
我们这里先介绍表之间的关联,后面再学习联表查询
通过某一个字段,或者通过某一张表,将多个表关联起来。
我们一张表处理好不行吗,为什么要关联,像这样? 有没有发现一个问题,有些员工它们对应的是相同部门,一张表就重复了很多次记录,随着员工数量的增加,就会出现越来越多个重复记录,相对更占用空间了。
那么我们需要将部门单独使用一张表,再将员工这个使用一个字段关联到另一个表内,我们可以使用外键,也可以不使用外键,先来演示外键的好处吧
多对一关联
如:多个员工对应一个部门。
员工表,先别急着创建,请向下看
dep_id字段关联了dep表的id字段: 当dep表的id字段值修改后,该表的dep_id字段下面如果有和dep表id相同值的则会一起更改。 如果dep表删除了某一条记录,当emp表的dep_id与dep表删除记录的id值对上以后,emp表这条记录也会被随之删除。
注意:必须是外键已存在,所以需要先创建部门表,再创建员工表
部门表
所以我们需要先向dep表插入记录
查询我们创建后的效果 这样就把这两个表关联起来了,目前我们先不了解多表查询,这个先了解的是,表之间的关联。
我们再来看一下同步更新以及删除,外键的改动被关联表会受到影响
多张表互相关联
如:一个作者可以写多本书,一本书也可以有多个作者,双向的一对多,即多对多
这时使用外键会出现一个弊端,那就是先创建哪张表呢?它们都互相对应,是不是很矛盾呢?解决办法:第三张表,关联书的id与作者的id
book表
book表插入数据:
jack:斗破苍穹、斗罗大陆、武动乾坤 tom:斗破苍穹、武动乾坤 jams:斗罗大陆 rouse:斗破苍穹 curry:斗破苍穹、武动乾坤 jhon:斗罗大陆
一个作者可以产于多本书的编写,同时,每本书都会标明产于的作者
一对一关联
路人有可能变成某个学校的学生,即一对一关系。
在这之前,路人不属于学校。
原理就是:学校通过广告,或者通过电话邀请,将路人变成了学生。
路人表
表的关联,建议使用以下方式