一起了解什么是MySQL数据库(三)

一起了解什么是MySQL数据库(三)

免费学习推荐:mysql视频教程

目录

模糊查询表的约束表之间的关联多对一关联多对多关联一对一关联

模糊查询

可以根据大致提供的内容,找到我们想要的数据,它与=查询不同,拿char类型数据和varchar类型数据举例:

create table c1(x char(10));create table c2(x varchar(10));insert c1 values('io');insert c2 values('io');

模糊查询使用到的是like

select * from c1 where x like 'io';select * from c2 where x like 'io';

在这里插入图片描述
可以发现,c1里面的x为char类型,我们通过模糊查询是否有io这个数据,无法显示出来,而我们通过=却可以查询出来

在这里插入图片描述
模糊查询比较精准,这种方式查询,必须要输入这个字段的全部内容,才可以查询出来,而这里char类型存储的数据,长度不满10为,所以使用了空格补充,所以查询的时候,需要把空格带上才可以;
在这里插入图片描述
我们也可以使用模糊查询提供给我们的查询方式,% 表示任意0个或多个字符。

select * from c1 where x like 'io%';

在这里插入图片描述
如果我们只知道第二位是一个o,不知道开头和结尾,可以使用:_ 表示任意单个字符,再配合%匹配后面的多个字符

select * from c1 where x like '_o%';

在这里插入图片描述
SQL模糊查询的语法为
“SELECT column FROM table WHERE column LIKE ‘;pattern’;”。

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”。

表的约束

介绍:

约束条件与数据类型的宽度一样,都是可选参数

作用:用于保证数据的完整性和一致性

主要分为:

PRIMARY KEY (PK)    标识该字段为该表的主键,可以唯一的标识记录FOREIGN KEY (FK)    标识该字段为该表的外键NOT NULL    标识该字段不能为空UNIQUE KEY (UK)    标识该字段的值是唯一的AUTO_INCREMENT    标识该字段的值自动增长(整数类型,而且为主键)DEFAULT    为该字段设置默认值UNSIGNED 无符号ZEROFILL 使用0填充

not null:字面意思就说明了,设置后,每次插入值时,必须为该字段设置值

default:如果没有为该字段设置值,则使用我们定义在default后面的一个默认值

UNIQUE KEY:某个字段设置这个约束后,那么它设置的值,在整个表中这个字段只能存在一个(唯一)

PRIMARY KEY:主键primary key是innodb存储引擎组织数据的依据,innodb称之为索引组织表,一张表中必须有且只有一个主键。主键是能确定一条记录的唯一标识

AUTO_INCREMENT:当设置以后,每次向表插入值时,这个字段会自动增长一个数字,但是这个字段必须是整数类型,而且还要是主键

FOREIGN KEY:外键,将该表的某个字段关联另一张表的某个字段,关联后这个字段的值必须对应关联字段的值。

我们创建表,通常会有一个id字段作为索引标识作用,并且会将它设置为主键和自增。

实例:

create table test(    id int primary key auto_increment,    identity varchar(18) not null unique key, --身份证必须唯一    gender varchar(18) default '男');insert test(identity) values('123456789012345678');

在这里插入图片描述
当身份字段插入相同值,则会报错,因为字段设置了唯一值
在这里插入图片描述

insert test(identity,gender) values('0123456789012345678','女');

在这里插入图片描述
我们会发现,id不对劲啊,那是因为笔者之前进行两次插入值操作,但是值并没有成功插入进去,但是这个自增却受到了影响.

这个时候,我们进行两部操作就可以解决这个问题。

alter table test drop id;alter table test add id int primary key auto_increment first;

删除id字段,再重新设置。
在这里插入图片描述
很神奇是不是,这个MySQL的底层机制。vary 良心

还需要注意的是:我们使用delete删除一条记录时,并不会影响自增

delete from test where id = 2;insert test(identity,gender) values('111111111111111111','男');

在这里插入图片描述
关于这个操作,如果我们只是删除单条记录的话,可以使用上序提供的方法还调整自增的值,而如果是删除整个表记录的话,使用以下方法:

truncate test;

效果演示:delete删除整个表记录
在这里插入图片描述
效果演示:truncate删除整个表记录
在这里插入图片描述

联合主键

确保设置为主键的某几个字段的数据相同

主键的一个目的就是确定数据的唯一性,它跟唯一约束的区别就是,唯一约束可以有一个NULL值,但是主键不能有NULL值,再说联合主键,联合主键就是说,当一个字段可能存在重复值,无法确定这条数据的唯一性时,再加上一个字,两个字段联合起来确定这条数据的唯一性。比如你提到的id和name为联合主键,在插入数据时,当id相同,name不同,或者id不同,name相同时数据是允许被插入的,但是当id和name都相同时,数据是不允许被插入的。

实例:

create table test(    id int,    name varchar(10),    primary key(id,name));    insert test values(1,1);

在这里插入图片描述
如果再次插入两个主键相同的数据,则会报错
在这里插入图片描述
只要设置主键的两个字段,在一条记录内,数据不完全相同就没有问题。
在这里插入图片描述

外键的话,我们在表之间的关联进行演示

表之间的关联

我们这里先介绍表之间的关联,后面再学习联表查询

通过某一个字段,或者通过某一张表,将多个表关联起来。

我们一张表处理好不行吗,为什么要关联,像这样?
在这里插入图片描述
有没有发现一个问题,有些员工它们对应的是相同部门,一张表就重复了很多次记录,随着员工数量的增加,就会出现越来越多个重复记录,相对更占用空间了。

那么我们需要将部门单独使用一张表,再将员工这个使用一个字段关联到另一个表内,我们可以使用外键,也可以不使用外键,先来演示外键的好处吧

多对一关联

如:多个员工对应一个部门。

员工表,先别急着创建,请向下看

create table emp(id int primary key auto_increment,name varchar(10) not null,dep_id int,foreign key(dep_id) references dep(id) on update cascade   # 级联更新on delete cascade); # 级联删除

上面外键的作用就是:

dep_id字段关联了dep表的id字段:
当dep表的id字段值修改后,该表的dep_id字段下面如果有和dep表id相同值的则会一起更改。
如果dep表删除了某一条记录,当emp表的dep_id与dep表删除记录的id值对上以后,emp表这条记录也会被随之删除。

注意:必须是外键已存在,所以需要先创建部门表,再创建员工表

部门表

create table dep(id int primary key auto_increment,name varchar(16) not null unique key,task varchar(16) not null);

emp表的dep_id字段设置的数据必须是dep表已存在的id

所以我们需要先向dep表插入记录

insert dep(name,task) values('IT','技术'),('HR','招聘'),('sale','销售');

员工表插入记录

insert emp(name,dep_id) values('jack',1),('tom',2),('jams',1),('rouse',3),('curry',2);# ('go',4) 报错,在关联外键的id字段中找不到

注意:如果我们emp表的dep_id字段插入的数据,在dep表中的id字段不存在该数据时,就会报错。

查询我们创建后的效果
在这里插入图片描述
这样就把这两个表关联起来了,目前我们先不了解多表查询,这个先了解的是,表之间的关联。

我们再来看一下同步更新以及删除,外键的改动被关联表会受到影响

update dep set id=33333 where id = 3;

在这里插入图片描述
再来体验一下同步删除

delete from dep where id = 33333;

在这里插入图片描述
这就是外键带给我们的效果,有利也有弊:

优点:关联性强,只能设置已存在的内容,并且同步更新与删除缺点:当删除外键表的某一条记录,关联表中有关联性的记录会被全部删除

多对多关联

多张表互相关联

如:一个作者可以写多本书,一本书也可以有多个作者,双向的一对多,即多对多

这时使用外键会出现一个弊端,那就是先创建哪张表呢?它们都互相对应,是不是很矛盾呢?解决办法:第三张表,关联书的id与作者的id

book表

create table book(id int primary key auto_increment,name varchar(30));

author表

create table author(id int primary key auto_increment,name varchar(30));

中间表:负责将两张表进行关联

create table authorRbook(id int primary key auto_increment,    author_id int,    book_id int,    foreign key(book_id) references book(id)    on update cascade    on delete cascade,    foreign key(author_id) references author(id)    on update cascade    on delete cascade);

多名作者关联一本书,或者一名作者关联多本书,书也要体现出谁关联了它

book表插入数据:

insert book(name) values('斗破苍穹'),('斗罗大陆'),('武动乾坤');

author表插入数据:

insert author(name) values('jack'),('tom'),('jams'),('rouse'),('curry'),('john');

关联表插入数据:

insert authorRbook(author_id,book_id) values(1,1),(1,2),(1,3),(2,1),(2,3),(3,2),(4,1),(5,1),(5,3),(6,2);

目前的对应关系就是:

jack:斗破苍穹、斗罗大陆、武动乾坤
tom:斗破苍穹、武动乾坤
jams:斗罗大陆
rouse:斗破苍穹
curry:斗破苍穹、武动乾坤
jhon:斗罗大陆

一个作者可以产于多本书的编写,同时,每本书都会标明产于的作者

一对一关联

路人有可能变成某个学校的学生,即一对一关系。

在这之前,路人不属于学校。

原理就是:学校通过广告,或者通过电话邀请,将路人变成了学生。

路人表

create table passers_by(id int primary key auto_increment,name varchar(10),age int);insert passers_by(name,age) values('jack',18),('tom',19),('jams',23);

学校表

create table school(id int primary key auto_increment,class varchar(10),student_id int unique key,foreign key(student_id) references passers_by(id)on update cascadeon delete cascade);insert school(class,student_id) values('Mysql入门到放弃',1),('Python入门到运维',3),('Java从入门到音乐',2);

数据存储的设计,需要提前设计好表的关联 关系,将关系全部设计好以后,剩下的只是往里存数据了,后续我们会了解到联表查询相关内容,将有关联性的内容,以虚拟表的形式查询出来,查询出来的数据可能来自多个表。

表的关联,建议使用以下方式

多对多 > 多对一 > 一对一

相关免费学习推荐:mysql数据库(视频)

以上就是一起了解什么是MySQL数据库(三)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/188697.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月1日 12:07:29
下一篇 2025年11月1日 12:09:00

相关推荐

  • C++怎么连接和操作MySQL数据库_C++数据库编程与API使用

    最常用方式是使用MySQL C API进行数据库操作。需先安装开发库,包含mysql.h头文件并链接libmysqlclient库,通过mysql_init、mysql_real_connect等函数完成连接与查询,使用mysql_query执行SQL语句,mysql_store_result获取结…

    2025年12月19日
    100
  • 入门教程:使用Go语言操作MySQL数据库

    go语言操作mysql数据库的关键在于掌握连接池、sql语句构建和错误处理。1. 安装go-sql-driver/mysql驱动并正确构建连接字符串实现数据库连接;2. 使用log.fatalf优雅处理错误,确保程序崩溃前输出清晰的错误信息;3. 利用db.setmaxopenconns等方法配置连…

    2025年12月15日 好文分享
    000
  • PHP中的数据库连接:如何使用PHP连接和操作MySQL数据库

    php开发中连接mysql数据库需使用mysqli或pdo扩展,步骤为:1.通过mysqli创建连接并检测错误;2.执行sql查询或操作并处理结果;3.使用预处理语句防止sql注入;4.操作完成后关闭连接释放资源。此外应将配置信息独立管理、避免暴露数据库错误、验证用户输入以确保安全性。 在PHP开发…

    2025年12月10日
    000
  • MySQL数据库中去重与连接查询的方法

    目录 1.去重 2.连接查询 使用where进行多表连接查询 内连接 – 等值连接 内连接 – 非等值连接 内连接 – 自连接 外连接 – 左右外连接 三表连接 1.去重 示例表内容参考此文章 有些 MySQL 数据表中可能存在重复的记录,有些情况我们…

    数据库 2025年12月4日
    000
  • MySQL数据库备份之复制

    MySQL数据库备份之复制目录:1.MySQL复制简介2.MySQL复制的优势与思路3.数据复制环境之主服务器设置4.数据复制环境之从服务器设置5.创建复制帐号6.获取主服务器二 3.数据复制环境之主服务器设置 在实际的生产环境中,可能在我们还没有部署数据复制前,数据库中就已经存在大量数据,所以,这…

    2025年12月2日
    000
  • mysql数据库和文件系统的关系_mysql数据库文件存储解析

    MySQL通过存储引擎将数据写入文件系统,如InnoDB的.ibd文件和MyISAM的.MYD、.MYI文件,均存于datadir目录;文件系统类型、配置及存储介质影响数据库性能;物理备份直接复制这些文件,恢复时需注意权限归属,整体数据管理依赖底层文件系统支持。 MySQL数据库依赖文件系统来存储数…

    2025年12月2日 数据库
    000
  • mysql数据库索引类型有哪些_mysql索引类型解析

    MySQL常见索引类型包括:1. 普通索引,用于加速查询,允许重复和NULL值;2. 唯一索引,保证字段值唯一,允许一个NULL,适用于身份证、邮箱等;3. 主键索引,特殊的唯一索引,不允许NULL,每表仅一个,建议设自增主键;4. 全文索引,支持文本关键词搜索,适用于大字段模糊查询;5. 组合索引…

    2025年12月2日 数据库
    000
  • 如何恢复mysql数据库_mysql数据库恢复操作方法

    答案:MySQL数据恢复依赖备份和binlog。有备份时可用mysqldump或xtrabackup恢复;开启binlog可增量恢复到指定时间点;无备份可尝试文件恢复但成功率低;建议定期备份并验证恢复流程。 当MySQL数据库出现误删数据、表或整个库被破坏时,及时恢复是关键。能否成功恢复,取决于是否…

    2025年12月2日 数据库
    000
  • sql数据库与mysql区别 sql数据库和mysql对比分析

    sql数据库是使用sql语言的数据库系统,而mysql是具体的开源rdbms。区别在于:1. sql数据库是通用术语,mysql是具体产品。2. mysql性能高、成本低、易用,适合web应用。3. 选择时考虑性能、成本、易用性、生态系统和兼容性。 SQL数据库与MySQL的区别和对比分析,这是一个…

    2025年12月2日 数据库
    000
  • 怎么将图片添加到mysql中

    将图片添加到mysql中的方法:首先将数据库存储图片的字段类型设置为blob二进制大对象类型;然后将图片流转化为二进制;最后将图片插入数据库即可。 推荐:《mysql视频教程》 正常的图片储存要么放进本地磁盘,要么就存进数据库。存入本地很简单,现在我在这里记下如何将图片存进mysql数据库  如果要…

    2025年12月2日 数据库
    000
  • 如何初始化mysql数据库_mysql数据库初始化方法

    MySQL初始化需根据版本选择方法:5.7及以下可用mysql_install_db,5.7以上推荐mysqld –initialize生成临时密码,或–initialize-insecure用于测试环境,随后启动服务并运行mysql_secure_installation加…

    2025年12月2日 数据库
    000
  • 电脑安装mysql数据库方法 本地mysql数据库配置教程

    答案:在本地安装MySQL数据库可为开发和学习提供便捷、免费且安全的数据环境。首先从官网下载MySQL Community Server安装包,根据操作系统选择合适版本,通过安装向导选择“Developer Default”类型完成基础安装。配置时应选择“Development Computer”模…

    2025年12月1日
    100
  • mysql数据库本地安装步骤 电脑上安装mysql详细指南

    安装#%#$#%@%@%$#%$#%#%#$%@_81c++3b080dad537de7e10e0987a4bf52e时需注意操作系统版本、系统架构(32位或64位)、visual c++ redistributable依赖以及端口冲突问题,首先应从官网下载对应系统的安装包,推荐选择“develop…

    2025年11月30日
    000
  • 使用Go语言进行MySQL数据库的数据备份还原的方法

    随着数据量的增加和业务的扩展,数据库备份和还原变得越来越重要。在许多情况下,我们需要定期备份数据库以避免数据丢失,而紧急情况下需要从备份中恢复数据。在本文中,我们将介绍如何使用go语言备份和还原mysql数据库。 安装Go语言和MySQL数据库 在开始操作之前,您需要确保您已经安装了Go语言和MyS…

    数据库 2025年11月30日
    100
  • Go语言和MySQL数据库:如何进行数据隔离处理?

    随着互联网时代的到来,大数据应用的发展和使用越来越广泛。在这种背景下,数据隔离处理也越来越受到重视。作为一个流行的高性能开发语言,go语言在数据隔离处理方面也拥有良好的表现。本文将介绍go语言和mysql数据库如何进行数据隔离处理,让大家能够更好地了解和应用。 一、什么是数据隔离处理 数据隔离处理是…

    数据库 2025年11月30日
    000
  • Go语言和MySQL数据库:如何进行数据预处理?

    在现代软件开发中,对于大多数应用程序来说,必须能够与各种关系型数据库进行交互,以便能够在应用程序和数据库之间共享数据。mysql是一种广泛使用的开源关系型数据库管理系统,而go语言则是一种现代性能极佳的编程语言,它提供了很多内置库来轻松实现与mysql数据库的交互。本文将探讨如何使用go语言编写预处…

    数据库 2025年11月30日
    300
  • 使用Go语言进行MySQL数据库的数据迁移的方法

    随着业务的增长和数据库版本升级等因素,数据库迁移变得越来越普遍。在进行数据迁移时,选择合适的工具和语言非常重要。本文将介绍如何使用go语言进行mysql数据库的数据迁移。 安装MySQL驱动 在使用Go语言进行MySQL数据库迁移前,需要首先安装MySQL驱动。在Go语言中,有很多MySQL驱动可供…

    数据库 2025年11月30日
    000
  • 使用Go语言进行数据模型设计:MySQL数据库

    随着数据量和复杂性的增加,数据模型就变得越来越重要。在数据库设计之前,必须了解所使用的语言和框架,以及将存储数据的数据库。在本文中,将介绍如何使用go语言进行mysql数据库的数据模型设计。 安装Go和MySQL 首先,需要在计算机上安装Go和MySQL数据库。可以在官方网站上下载和安装两者。还需要…

    数据库 2025年11月30日
    000
  • Go语言和MySQL数据库:如何进行数据事务处理?

    现在的互联网应用程序都需要对数据进行处理。处理数据时候可能会遇到以下情况: 想要插入一条记录,但是其中某一列不符合要求,或者插入后会导致数据库不一致。执行一系列操作,如果其中某一个出错,需要回滚之前的所有操作。多用户同时执行相同的操作,如果不加控制,容易发生脏读和不可重复读的问题。 这时候我们就需要…

    数据库 2025年11月29日
    100
  • Go语言和MySQL数据库:如何避免数据库错误?

    随着互联网技术的快速发展和应用,数据库成为了重要的存储和管理信息的工具。作为一门全新的编程语言,go语言(golang)也逐渐成为了应用领域越来越广泛的一种工具。其中,go语言和mysql数据库是经常结合使用的一种方式,但在使用中也可能会出现一些数据库错误。因此,在使用go语言和mysql数据库时,…

    数据库 2025年11月29日
    000

发表回复

登录后才能评论
关注微信