집 >데이터 베이스 >MySQL 튜토리얼 >MySQL 데이터베이스가 무엇인지 알아봅시다(3)
무료 학습 권장 사항: mysql 비디오 튜토리얼
Directory
퍼지 쿼리
대략 제공되는 내용을 기반으로 원하는 데이터를 찾을 수 있는 = 쿼리와는 다릅니다. char 유형을 취하는 데이터 및 varchar 유형 데이터의 예:
create table c1(x char(10));create table c2(x varchar(10));insert c1 values('io');insert c2 values('io');
Fuzzy 쿼리는 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 열 FROM 테이블 WHERE 열 LIKE ';패턴';"의 경우.
SQL은 네 가지 일치 모드를 제공합니다.
- %는 0개 이상의 bai 문자를 나타냅니다. 다음 명령문:
SELECT * FROM user WHERE name LIKE ';%三%';
는 "Zhang San", "Three-legged Cat", "Tang Sanzang"과 같이 이름에 "3"이 포함된 모든 이름을 찾습니다. 등;- _은 단일 문자를 나타냅니다. 명령문:
SELECT * FROM user WHERE name LIKE ';三';
이름이 세 글자이고 가운데 글자가 "三"인 "Tang Sanzang"만 찾습니다.
SELECT * FROM user WHERE name LIKE ' ;三_ _';
이름이 세 글자이고 첫 글자가 "三"인 "세발 달린 고양이"만 찾습니다.- []는 괄호 안에 나열된 문자 중 하나를 나타냅니다(정규 표현식과 유사). 명령문:
[^ ]은 괄호 안에 나열되지 않은 단일 문자를 나타냅니다. 명령문:
SELECT * FROM user WHERE name LIKE ';[张李王]三';
는 "Zhang San", "Li San", "Wang San"("Zhang Li Wang San" 대신)을 찾습니다. [ ]에는 일련의 문자(01234, abcde 등)가 포함되어 있으며 "0-4", "a-e"로 축약할 수 있습니다.
SELECT * FROM user WHERE name LIKE ';老[1-9]';
Will 출력 "Old 1", "Old 2", ..., "Old 9" 찾기
"-" 문자를 찾으려면 먼저 ';张三[-1-9]'를 입력하세요.
- SELECT * FROM user WHERE name LIKE ';[^Zhang Liwang]三';
는 "Zhang", "Li", "Wang"이라는 성이 아닌 "Zhao San", "Sun San" 등을 찾습니다. ;
SELECT * FROM user WHERE name LIKE ';老[^1-4]';
는 "old 1"에서 "old 4"를 제외하고 "old 5", "old 6", ..., "를 찾습니다. 오래된 9".
테이블 제약 조건
PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录FOREIGN KEY (FK) 标识该字段为该表的外键NOT NULL 标识该字段不能为空UNIQUE KEY (UK) 标识该字段的值是唯一的AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键)DEFAULT 为该字段设置默认值UNSIGNED 无符号 ZEROFILL 使用0填充not null: 문자 그대로의 의미는 설정 후 값이 삽입될 때마다 해당 필드에 값을 설정해야 한다는 것입니다.default: 해당 필드에 값이 설정되지 않은 경우 해당 값을 사용합니다. 우리는 기본값 이후의 기본값에서 정의했습니다UNIQUE KEY: 필드가 이 제약 조건을 설정한 후, 설정한 값은 전체 테이블에서 하나만(고유) 존재할 수 있습니다.PRIMARY KEY: 기본 키 기본 키는 innodb 저장소입니다. 엔진 InnoDB에서는 데이터를 구성하는 기본을 인덱스 구성 테이블이라고 합니다. 테이블에는 기본 키가 하나만 있어야 합니다.
기본 키는 레코드를 결정할 수 있는 고유 식별자입니다.
AUTO_INCREMENT: 설정 후 이 필드는 테이블에 값이 삽입될 때마다 자동으로 숫자만큼 증가하지만 이 필드는 정수 유형이어야 하며 또한 기본 키가 됩니다FOREIGN KEY: 이 테이블의 필드를 다른 테이블의 필드와 연결하는 외래 키입니다. 연결 후 이 필드의 값은 연결된 필드의 값과 일치해야 합니다.我们创建表,通常会有一个id字段作为索引标识作用,并且会将它设置为主键和自增。 实例: 这个时候,我们进行两部操作就可以解决这个问题。 删除id字段,再重新设置。 还需要注意的是:我们使用delete删除一条记录时,并不会影响自增 效果演示:delete删除整个表记录 联合主键 确保设置为主键的某几个字段的数据相同 主键的一个目的就是确定数据的唯一性,它跟唯一约束的区别就是,唯一约束可以有一个NULL值,但是主键不能有NULL值,再说联合主键,联合主键就是说,当一个字段可能存在重复值,无法确定这条数据的唯一性时,再加上一个字,两个字段联合起来确定这条数据的唯一性。比如你提到的id和name为联合主键,在插入数据时,当id相同,name不同,或者id不同,name相同时数据是允许被插入的,但是当id和name都相同时,数据是不允许被插入的。 实例: 外键的话,我们在表之间的关联进行演示 表之间的关联 我们这里先介绍表之间的关联,后面再学习联表查询 通过某一个字段,或者通过某一张表,将多个表关联起来。 我们一张表处理好不行吗,为什么要关联,像这样? 那么我们需要将部门单独使用一张表,再将员工这个使用一个字段关联到另一个表内,我们可以使用外键,也可以不使用外键,先来演示外键的好处吧 多对一关联 如:多个员工对应一个部门。 员工表,先别急着创建,请向下看 上面外键的作用就是: dep_id字段关联了dep表的id字段: 注意:必须是外键已存在,所以需要先创建部门表,再创建员工表 部门表 emp表的dep_id字段设置的数据必须是dep表已存在的id 所以我们需要先向dep表插入记录 员工表插入记录 注意:如果我们emp表的dep_id字段插入的数据,在dep表中的id字段不存在该数据时,就会报错。 查询我们创建后的效果 我们再来看一下同步更新以及删除,外键的改动被关联表会受到影响 多对多关联 多张表互相关联 如:一个作者可以写多本书,一本书也可以有多个作者,双向的一对多,即多对多 这时使用外键会出现一个弊端,那就是先创建哪张表呢?它们都互相对应,是不是很矛盾呢?解决办法:第三张表,关联书的id与作者的id book表 author表 中间表:负责将两张表进行关联 多名作者关联一本书,或者一名作者关联多本书,书也要体现出谁关联了它 book表插入数据: author表插入数据: 关联表插入数据: 目前的对应关系就是: jack:斗破苍穹、斗罗大陆、武动乾坤 一个作者可以产于多本书的编写,同时,每本书都会标明产于的作者 一对一关联 路人有可能变成某个学校的学生,即一对一关系。 在这之前,路人不属于学校。 原理就是:学校通过广告,或者通过电话邀请,将路人变成了学生。 路人表 学校表 数据存储的设计,需要提前设计好表的关联 关系,将关系全部设计好以后,剩下的只是往里存数据了,后续我们会了解到联表查询相关内容,将有关联性的内容,以虚拟表的形式查询出来,查询出来的数据可能来自多个表。 表的关联,建议使用以下方式 相关免费学习推荐:mysql数据库(视频)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;
很神奇是不是,这个MySQL的底层机制。vary 良心delete from test where id = 2;insert test(identity,gender) values('111111111111111111','男');
关于这个操作,如果我们只是删除单条记录的话,可以使用上序提供的方法还调整自增的值,而如果是删除整个表记录的话,使用以下方法:truncate test;
效果演示:truncate删除整个表记录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表删除了某一条记录,当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);
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字段中找不到
这样就把这两个表关联起来了,目前我们先不了解多表查询,这个先了解的是,表之间的关联。update dep set id=33333 where id = 3;
再来体验一下同步删除delete from dep where id = 33333;
这就是外键带给我们的效果,有利也有弊:
create table book(
id int primary key auto_increment,
name varchar(30));
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);
insert book(name) values
('斗破苍穹'),
('斗罗大陆'),
('武动乾坤');
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);
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 cascade
on delete cascade);insert school(class,student_id) values
('Mysql入门到放弃',1),
('Python入门到运维',3),
('Java从入门到音乐',2);
위 내용은 MySQL 데이터베이스가 무엇인지 알아봅시다(3)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!