Rumah pangkalan data tutorial mysql 一起了解什么是MySQL数据库(三)

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

Feb 15, 2021 am 08:57 AM
pangkalan data 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');
Salin selepas log masuk

模糊查询使用到的是like

select * from c1 where x like 'io';select * from c2 where x like 'io';
Salin selepas log masuk

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

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

select * from c1 where x like 'io%';
Salin selepas log masuk

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

select * from c1 where x like '_o%';
Salin selepas log masuk

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

SQL提供了四种匹配模式:

  1. % 表示任意0个或多个bai字符。如下语句:
    SELECT * FROM user WHERE name LIKE ‘;%三%’;
    将会把name为“张三”,“三脚猫”,“唐三藏”等等有“三”的全找出来;
  2. _ 表示任意单个字符。语句:
    SELECT * FROM user WHERE name LIKE ‘;’;
    只找出“唐三藏”这样name为三个字且中间一个字是“三”的;
    SELECT * FROM user WHERE name LIKE ‘;三__’;
    只找出“三脚猫”这样name为三个字且第一个字是“三”的;
  3. []表示括号内所列字符中的一个(类似与正则表达式)。语句:
    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]’;
  4. [^ ] 表示不在括号所列之内的单个字符。语句:
    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填充
Salin selepas log masuk

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');
Salin selepas log masuk

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

insert test(identity,gender) values('0123456789012345678','女');
Salin selepas log masuk

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

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

alter table test drop id;alter table test add id int primary key auto_increment first;
Salin selepas log masuk

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

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

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

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

truncate test;
Salin selepas log masuk

效果演示: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);
Salin selepas log masuk

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

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

表之间的关联


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

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

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

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

多对一关联


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

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

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); # 级联删除
Salin selepas log masuk

上面外键的作用就是:

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);
Salin selepas log masuk

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

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

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

员工表插入记录

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

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

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

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

update dep set id=33333 where id = 3;
Salin selepas log masuk

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

delete from dep where id = 33333;
Salin selepas log masuk

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

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

多对多关联


多张表互相关联

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

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

book表

create table book(
	id int primary key auto_increment,
	name varchar(30));
Salin selepas log masuk

author表

create table author(
	id int primary key auto_increment,
	name varchar(30));
Salin selepas log masuk

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

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);
Salin selepas log masuk

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

book表插入数据:

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

author表插入数据:

insert author(name) values
	('jack'),
	('tom'),
	('jams'),
	('rouse'),
	('curry'),
	('john');
Salin selepas log masuk

关联表插入数据:

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);
Salin selepas log masuk

目前的对应关系就是:

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);
Salin selepas log masuk

学校表

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 cascade
	on delete cascade);insert school(class,student_id) values
	('Mysql入门到放弃',1),
	('Python入门到运维',3),
	('Java从入门到音乐',2);
Salin selepas log masuk

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

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

  • 多对多 > 多对一 > 一对一

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

Atas ialah kandungan terperinci 一起了解什么是MySQL数据库(三). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Amalan pembangunan PHP: Gunakan PHPMailer untuk menghantar e-mel kepada pengguna dalam pangkalan data MySQL Amalan pembangunan PHP: Gunakan PHPMailer untuk menghantar e-mel kepada pengguna dalam pangkalan data MySQL Aug 05, 2023 pm 06:21 PM

Amalan pembangunan PHP: Gunakan PHPMailer untuk menghantar e-mel kepada pengguna dalam pangkalan data MySQL Pengenalan: Dalam pembinaan Internet moden, e-mel ialah alat komunikasi yang penting. Sama ada pendaftaran pengguna, tetapan semula kata laluan atau pengesahan pesanan dalam e-dagang, menghantar e-mel adalah fungsi penting. Artikel ini akan memperkenalkan cara menggunakan PHPMailer untuk menghantar e-mel dan menyimpan maklumat e-mel ke jadual maklumat pengguna dalam pangkalan data MySQL. 1. Pasang pustaka PHPMailer PHPMailer ialah

Bahasa Go dan pangkalan data MySQL: Bagaimana untuk memisahkan data panas dan sejuk? Bahasa Go dan pangkalan data MySQL: Bagaimana untuk memisahkan data panas dan sejuk? Jun 18, 2023 am 08:26 AM

Memandangkan jumlah data terus meningkat, prestasi pangkalan data telah menjadi isu yang semakin penting. Pemprosesan pemisahan data panas dan sejuk ialah penyelesaian berkesan yang boleh memisahkan data panas dan data sejuk, dengan itu meningkatkan prestasi dan kecekapan sistem. Artikel ini akan memperkenalkan cara menggunakan bahasa Go dan pangkalan data MySQL untuk memisahkan data panas dan sejuk. 1. Apakah pemprosesan pemisahan data panas dan sejuk Pemprosesan pemisahan data panas dan sejuk ialah cara mengklasifikasikan data panas dan data sejuk. Data panas merujuk kepada data dengan kekerapan akses tinggi dan keperluan data sejuk

Sejauh manakah saya boleh membangunkan kemahiran pangkalan data MySQL untuk berjaya digunakan? Sejauh manakah saya boleh membangunkan kemahiran pangkalan data MySQL untuk berjaya digunakan? Sep 12, 2023 pm 06:42 PM

Sejauh manakah saya boleh membangunkan kemahiran pangkalan data MySQL untuk berjaya digunakan? Dengan perkembangan pesat era maklumat, sistem pengurusan pangkalan data telah menjadi komponen yang amat diperlukan dan penting dalam semua lapisan masyarakat. Sebagai sistem pengurusan pangkalan data hubungan yang biasa digunakan, MySQL mempunyai pelbagai bidang aplikasi dan peluang pekerjaan. Jadi, sejauh manakah kemahiran pangkalan data MySQL perlu dibangunkan untuk berjaya digunakan? Pertama sekali, menguasai prinsip asas dan pengetahuan asas MySQL adalah keperluan paling asas. MySQL ialah pengurusan pangkalan data hubungan sumber terbuka

Bagaimana untuk melaksanakan sandaran data tambahan pangkalan data MySQL menggunakan bahasa Go Bagaimana untuk melaksanakan sandaran data tambahan pangkalan data MySQL menggunakan bahasa Go Jun 17, 2023 pm 02:28 PM

Apabila jumlah data meningkat, sandaran pangkalan data menjadi lebih penting. Untuk pangkalan data MySQL, kita boleh menggunakan bahasa Go untuk mencapai sandaran tambahan automatik. Artikel ini akan memperkenalkan secara ringkas cara menggunakan bahasa Go untuk melaksanakan sandaran tambahan data pangkalan data MySQL. 1. Pasang persekitaran bahasa Go Mula-mula, kita perlu memasang persekitaran bahasa Go secara setempat. Anda boleh pergi ke laman web rasmi untuk memuat turun pakej pemasangan yang sepadan dan memasangnya. 2. Pasang perpustakaan yang sepadan Bahasa Go menyediakan banyak perpustakaan pihak ketiga untuk mengakses pangkalan data MySQL, antaranya yang paling biasa digunakan ialah.

Bagaimana untuk menggunakan pangkalan data MySQL untuk analisis siri masa? Bagaimana untuk menggunakan pangkalan data MySQL untuk analisis siri masa? Jul 12, 2023 am 08:39 AM

Bagaimana untuk menggunakan pangkalan data MySQL untuk analisis siri masa? Data siri masa merujuk kepada koleksi data yang disusun mengikut urutan masa, yang mempunyai kesinambungan dan korelasi temporal. Analisis siri masa ialah kaedah analisis data penting yang boleh digunakan untuk meramalkan arah aliran masa hadapan, menemui perubahan kitaran, mengesan penyimpangan, dsb. Dalam artikel ini, kami akan memperkenalkan cara menggunakan pangkalan data MySQL untuk analisis siri masa, bersama-sama dengan contoh kod. Buat jadual data Mula-mula, kita perlu mencipta jadual data untuk menyimpan data siri masa. Katakan kita ingin menganalisis nombor

Bagaimana untuk menggunakan pangkalan data MySQL untuk pemprosesan imej? Bagaimana untuk menggunakan pangkalan data MySQL untuk pemprosesan imej? Jul 14, 2023 pm 12:21 PM

Bagaimana untuk menggunakan pangkalan data MySQL untuk pemprosesan imej? MySQL ialah sistem pengurusan pangkalan data hubungan yang berkuasa Selain menyimpan dan mengurus data, ia juga boleh digunakan untuk pemprosesan imej. Artikel ini akan memperkenalkan cara menggunakan pangkalan data MySQL untuk pemprosesan imej dan menyediakan beberapa contoh kod. Sebelum anda bermula, pastikan anda telah memasang pangkalan data MySQL dan biasa dengan pernyataan SQL asas. Buat jadual pangkalan data Mula-mula, buat jadual pangkalan data baharu untuk menyimpan data imej. Struktur jadual boleh seperti berikut

Bagaimana untuk membuat sambungan pangkalan data MySQL yang boleh dipercayai menggunakan bahasa Go? Bagaimana untuk membuat sambungan pangkalan data MySQL yang boleh dipercayai menggunakan bahasa Go? Jun 17, 2023 pm 07:18 PM

Dengan jumlah data yang besar yang perlu disimpan dan diproses, MySQL telah menjadi salah satu pangkalan data hubungan yang paling biasa digunakan dalam pembangunan aplikasi. Bahasa Go menjadi semakin popular di kalangan pembangun kerana pemprosesan serentak yang cekap dan sintaks ringkasnya. Artikel ini akan membawa pembaca untuk melaksanakan sambungan pangkalan data MySQL yang boleh dipercayai melalui bahasa Go, membolehkan pembangun membuat pertanyaan dan menyimpan data dengan lebih cekap. 1. Beberapa cara untuk bahasa Go untuk menyambung ke pangkalan data MySQL Biasanya terdapat tiga cara untuk menyambung ke pangkalan data MySQL dalam bahasa Go, iaitu: 1. Pustaka pihak ketiga

Pangkalan data MySQL dan bahasa Go: Bagaimana untuk melakukan caching data? Pangkalan data MySQL dan bahasa Go: Bagaimana untuk melakukan caching data? Jun 17, 2023 am 10:05 AM

Dalam beberapa tahun kebelakangan ini, bahasa Go telah menjadi semakin popular di kalangan pembangun dan telah menjadi salah satu bahasa pilihan untuk membangunkan aplikasi web berprestasi tinggi. MySQL juga merupakan pangkalan data popular yang digunakan secara meluas. Dalam proses menggabungkan kedua-dua teknologi ini, caching adalah bahagian yang sangat penting. Berikut akan memperkenalkan cara menggunakan bahasa Go untuk mengendalikan cache pangkalan data MySQL. Konsep caching Dalam aplikasi web, caching ialah lapisan tengah yang dicipta untuk mempercepatkan capaian data. Ia digunakan terutamanya untuk menyimpan data yang kerap diminta

See all articles