更多技能干货尽在大众号 “学神来啦” 持续为咱们更新前沿技能和技能干货

1 字段润饰符 (绑缚)

1.1 null 和 not null 润饰符

咱们经过这个比方来看看

[root@xuegod63 ~]索引贴# mysql -u root -p123456
mysql> create databa软件技能se xuegod2;
mysql> use xuegod2;
mysql> create tabl索引超出矩阵维度e worker(id int no软件技能专业t null,name varchar(8) not null通配符怎样用,pass varc软件测验har(20)
not n软件库ull);
mysql> insert into worker values(1,'HA','123456');
mysql> insert into worker values(1,'LB',null);
ERROR 1048 (23000): Column 'pass' cannot be null #不能为 null
m索引超出矩阵维度ysql> insert into wo软件技能专业rker values(2,'HPC','')索引失效的几种状况;

注:NOT NULL 的字段是不能软件工程专业刺进“NULL”的,只能刺进“空值”。

  1. 咱们可能有这些疑问

(1)<安全null 和 not null 差异> (2)为什么 not null 的功率比 n软件测验ull 高 (3)判别字段不为索引是什么意思空的时分,究竟要 select * from table where column <> ” 仍是要Go
用 select * from table where column is not null 呢。

  1. “空值” 和 “NULL”有什么不相同?

空值是不占用空间的

MySQL 中的 NULL 其实是占用空间的,下面是来索引贴自于 MySQL 官方的阐明

NULL columns require additional space in t软件工程工作方向及远景he row to record whether their values are
NULL. For MyISAM tables, each NUL通配符怎样输入L colum通配符n takes one bit extra, ro通配符unded up to the nearest byte.”

#“空列需求行中的额定空间来记载其值通配符*和?有什么区别是否为空。关于 MyISAM 表,每个 NULL 列需求一个额定
的位,四舍五入到最接近的字节。

比方:一个杯子,空值”代表杯子是真空的,NULL 代表杯子中装满了空气,虽然杯子看起来都是空
的,可是里边是有空气的。

  1. 关于问题 2,为什么 not null 的功率比 null 高?

NULL 其实并不是空值,而是要占用空间,所以 mysql 在进行比较的时分,NULL 会参加字段比
较,所以对功率有一狗狗币部分影响。Go

并且索引时不会存宫颈癌前期症状储 NUL宫颈癌前期症状L 值的,所以假定索引的字段可认为 NULL,索引的功率会下降许多。

因为 MySQL 难以优化引证可空列查询索引失效,它会使索引、索引核算和值愈加杂乱。可空列需求更软件应用多的存
储空间,还需求 MySQL 内部进行特别处理。可空列被索引后,每条记载都需求一个额定的字节,还能导
致 MyISAM 中固定巨细的索引变成安全形式怎样免除可变巨细的索引——–这也是《高性能 MySQL通配符怎样输入 第二版》介绍的解
读:“可空列需求更多的存储空间”:需求一个额定字节作为判别是否为 N安全中心ULL 的标志位“需求 MySQL 内
部进行特别处理” 所以运用 not null 比安全中心 null 功率高

  1. 关于问题 3,通配符判别字段不为空的时分,究竟要 select * from table where column <> ” 仍是

要用 select * from table where column is not null 咱们举例看看

mysql> create table test(col1 varchar(10) not null, col2 varchar(10)
null)ENGINE=MyIS软件技能AM;
mysql> insert into test values('',null);
mysql> insert into test value枸杞s('1','2');
mysql>软件技能专业 insert int软件o t通配符选择器est values('','1');
mysql> selectGo * from test;

Linux云核算-MySQL-表操作-索引-外键-视图

下面我分别用这两条句子查询看看

mysql> select *from te软件工程st where col1 is not null;

Linux云核算-MySQL-表操作-索引-外键-视图

mysql> selec安全手抄报t * from test where col1 <>'';

Linux云核算-MySQL-表操作-索引-外键-视图

为空标明不占空间,null软件库 占用空间

1.2 default 设定字段的默许值

为字段指定默许的值

mysql> create table test2(name varchar(8) not null,dept varchar(25) default 'SOS');
mysql> insert into test2 (name) values ('kko');
mysql> select * from t通配符怎样输入est2;

Linux云核算-MySQL-表操作-索引-外键-视图

总结:
假定字段没有设定 default ,MySQL 依据这个字段是 null 仍安全中心是 not null,假定可认为 null,则为
null。假定不行认为 null,则报错。

Linux云核算-MySQL-表操作-索引-外键-视图

假定时刻字段,默许为当时时刻 ,刺进 0 时,默许为当时时刻。

假定是 enum 类型,默许为软件工程工作方向及远景第一个元素。

1.3 auto_increment 字段绑缚

主动增加

只能润饰 ingooglet 字段。 标明 MySQL 应该主动为该字段生成一个仅有没有用过的数(每次在最大 ID
值的基础上加 1。

特例:假定现软件测验在最大 ID 是 34,然后删去 34,新增加的会是 35.)。

关于主键,这是非常 有用的。可认为每条记载创立一个专注的标识符。

mysql> create table items ( id int not null auto_incremengooglet primary key , label
varchar(2安全形式怎样免除0)软件 not null);
mysql> i安全期核算器nsert into i索引失效tems (label) values ('aaba');
mysql> insert into items values (9,'aaba');

刺进一个比上面数字小通配符怎样用的值,会是下面的作用

Linux云核算-MySQL-表操作-索引-外键-视图

再刺进一条 id 将为多少

mysql> inse索引贴rt into items (label)通配符 values ('abc');
mysql> select * from items;

Linux云核算-MySQL-表操作-索引-外键-视图

Id 为 10
mysql> insert into items v索引alues (9,'adl');
ERROR 1062 (23000): Duplicate entry '9' fo软件商店r key 'PRIMARY'
insert into items (label) values ('ab安全中心cs'); #IDmax =11 max=11
delete from items where label='abcs'; #IDma狗狗币x=10 max=11
insert into items (label索引超出了数组边界什么意思) values ('abcsw'); #Idmax=11 max=12

原因:主键绑缚仅有

2 根除表中的记载

清空表中全部记载
办法一:
delete 不加 where 条件,清空全部表记载。可是 dele安全te 不会清零 auto_increment 值

mysql> delete from items;
Query OK, 5 rows affected (0.00 sec)
m通配符*和?分别代表什么ysql> insert into items (label) values ("aaaa");

Linux云核算-MySQL-表操作-索引-外键-视图

办法二:
删去表中全部记载,清 auto_increment 值。
truncate
作用: 删去表的全部记载,并清零 auto_inc巩立姣rement 值。新刺进的记载从 1 开始。

语法: truncate table name;
mysql> truncate table items;
Query OK, 0 rows affected (0.01 sec)
mysql> insert in龚俊to items values(nu软件ll,'通配符掩码abv');

Linux云核算-MySQL-表操作-索引-外键-视图

mysql> insert into items(label)values('hkuyb');
mysql&gt安全期是哪几天; select * from items;

Linux云核算-MySQL-表操作-索引-外键-视图

3 索引

索引是一种特别的文件(InnoDB 数据表上的索引是表空间的一个组成部分Go),它们包含着对数据表
里全部记载的引证指针。更通俗的说,数据库索引好比是一本书前面的目录,能加速数据库的查询速度。
利益:为了加速查找速龚俊度,减少查询时刻。
缺点:

  1. 索引是以文件存储通配符怎样打出来的。假定索引过多,占磁盘空间较大。并且他影响: insert ,update ,delete

实施时刻。
2. 索引中数据有必要与数据表数据同步:假定索引过多,当表中工商银行客服电话数据更新的时分后,索引也要同步更
新,这就降低了功率。

索引的类型:

  1. 一般索引
  2. 仅有性索引
  3. 主键索引(主索引)
  4. 复合索引

3.1 一般索引

最根柢的索引,不具备仅有性,通配符*是表明它所在位置上的什么就是加速查询速度
创立一般索引:
办法一:创立表时增加索引

create table 表名(
列界说
i枸杞ndex 索引称谓 (字段)
index 索引称谓 (字段)
)

注:安全能够运用 key,也能够运用 i通配符选择器ndex 。index 索引称公积金谓 (字段),索引称谓,能够加也能够不
公积金,不加运用字段名作为索引名。

mysql> create table demo( id int(4),软件工程专业 name varchar(20), pwd varchar(20), index(pwd) );
留神:index 和 key 是相同的
mysql> create table demo1( id int(4), name varcha安全r(20), pwd varchar(20), key(pwd) );
mysql> create table demo2( id int(4), name安全教育渠道登录进口 varchar(20), pwd varchar(20), key
index_pwd(pwd) ); #加上称谓

办法二: 当表创立结束后,运用 alter 为表增加索引

alter table 表名 add index 索引称谓 (字段 1,字段 2.....);

检查索引

mysql>索引贴的用法 desc通配符怎样输入 demo;

Linux云核算-MySQL-表操作-索引-外键-视图

注:假定 Key 是 MUL, 就是一般性索引,该列的值能够重复, 该列是一个非仅有索引的前导列(第一
列)或许是一安全中心个仅有性索引的组成部分可是能够含有空值 NULL。就是标明是一个一般索引。
show create table xxx; 先检查建表时的索引名

咱们先删去索引

mysql> alter table demo drop key pwd; #留神此处的 pwd 指的是索引的称谓,而不是

表中 pwd 的那安全教育渠道登录进口个字段

再用 alt安全er 增加

mysql> alter table demo add key(pwd);
mysql> alter table demo add key index_name(name); #也能够加其他字段索引

3.2 仅有索引

与一般索引根柢相同,但有一个差异:索引列的全部值都只能呈现一次,即索引失效的几种状况有必要仅有,用来绑缚内
容,字段值只能出索引的作用及优缺点现一次,应该加仅有索引。仅有性容许有 NULL 值<容许为通配符选择器空>。
创立仅有索引:
办法一:创立表时,加仅有索引

create table 表名(
列界说:
unique key 索引名 (字段); )

留神:常用在值不能重复的字段上,比方说用户名,电话号码,身份证号。

mysql> create table demo3(id int(4) auto_in工商银行crement primary key, uName varc通配符选择器har(20),
uPwd varchar(20), unique index (uName))软件库;

Linux云核算-MySQL-表操作-索引-外键-视图

办法二:批改表时,加仅有索引

alter table 表名 add unique 索安全教育渠道登录进口引名 (字段);
mysql> alter table demo3 drop key uName;
mysql> alter table demo3 add un通配符选择器ique(uName);

3.3 主键索引

查询数据库,按主键查询是最快的,每个表只能有一个主键列,能够有多个一般索引列。主键列要求
列的全部内容有必要仅有,不容许为空
创立主google键索引
办法一:创立表创立主键索引

mysql> create table demo5( id int(4) not null auto_increment, name varchar(20) default
null,primary key(id));
mysql> desc demo5;

Linux云核算-MySQL-表操作-索引-外键-视图

mysql&gt工商银行客服电话; sho安全中心w create table demo5;
mysql> show in龚俊d软件技能ex from demo5 G

Linux云核算-MySQL-表操作-索引-外键-视图

办法二:创安全手抄报建表后增加<不引荐>假定出产的数据无法保证仅有,创立主google键报错
再增加
先删去查验
Linux云核算-MySQL-表操作-索引-外键-视图

删去遇到这种状况是 auto_increment 的原因

mysql> alter table demo5 change id id int(4) not null; #先取消自增加
mysql> alter table demo5 drop primary软件工程专业 key; 再删去主键
mysql> alter tabl索引页是哪一页e demo5 change id id int(4) not null primary key auto_increment;

数据要契合主键绑缚才华成功
总结:主键索引,仅有性索引差异:主键索引不能有 NULL,仅有性索引能够有空值
用存储进程的办法刺进 100 万数据并通配符怎样用查验

create table test_1(id int not null auto_increment primary ke通配符y,data var通配符*是表明它所在位置上的什么char(100),da通配符有哪些te
varcha安全手抄报r(30));
delimiter // #索引超出矩阵维度切开符
cre软件测验ate pr通配符有哪些oc安全edure prod_dba() beg安全教育in declare i int; set i=0; while i&l巩立姣t;1000000 do insert
into test_1(data,date) values('100','2020-01-01'); set i=i+1; end while; end;//索引超出矩阵维度
call prod_dba();//
Query OK, 1 row affected (1 min 47.94 sec)
delimiter ; #运用完马上恢复默许的切开符
select * f通配符rom test_1 where id=100000; #用时 0alter table test_1 change id i索引超出矩阵维度d int(10) not null;
a软件技能专业lter table test_1 drop primary key;

Linux云核算-MySQL-表操作-索引-外键-视图

有索引比没索引的查询时刻快了 0 点几秒,假定更杂乱的安全教育渠道登录进口表结构查询时刻会差安全教育渠道登录进口通配符*和?有什么区别多。

3.4 复合索引

索引能够包含一个、两个或更多个列。两个或更多个列上的索引被称作复合索引
例: 创立一个表寄存服务器容许或回绝的 IP 和 port,表记载中 IP 和 port 要仅有。

mysql&g软件应用t; cre索引是什么意思ate table firewall ( host varchar(15) not null ,port sma软件工程工作方向及远景llint(4) not null ,access
enum('deny','allow') not null, primary k通配符选择器ey (host,port)); #联合主键
mysql> d软件技能esc firewall;

Linux云核算-MySQL-表操作-索引-外键-视图

mysql> insert into firewall values('10.96.52.46',2google2,'deny');
mysql> in通配符*和?有什么区别sert into firewall values('10.96.52.46',21,'allow');
mysql&软件gt; insert into firewall通配符*和?有什么区别 values('10.96.52.46',21,'allow');
ERROR 1062 (23000): Duplicat安全形式怎样免除e entry '10.96.52.46-21' for key 'PRIMARY'

刺进两个通配符*是表明它所在位置上的什么相同就报错,仅有

3.5 全文索引 (FULLTEXT INDEX)

全文索引(也称全文检索)是现在查找安全教育渠道引擎运用的一种要害技能。它能够运用分词技能等多种算法智能剖析出文本文字中要害字词的频率及重要性,然后依照一定的算法规矩智能地筛选出咱们想要的查找作用。

MySQL 在数据量较大的状况下,高并索引贴的用法发衔接的状况下。

select 句子 where bName like '%网%'

运用% _ 通配符,不经过索引,直接全表扫描。

ABS通配符是什么意思UWU LIKE ‘%U_U’

数据库压力大。

MySQL 的解决方案:全文索引:3.2 开始支撑全文索引。无法正确支撑中文。

从 MySQL 5.7.6 开始 MySQ索引符号L 内置安全期核算器了 ngram 全文检索插件,用来支撑中文分

全文索引只能用在 varchar text

创立全文索引:
办法一:创立表时创工商银行客服电话

create table 表名(
列界说,
fu通配符掩码lltext key 索引名 (字段); )

办法二:批改表时增加

alter table 表名 add fulltext 索引名 (字段);
ALTER TABLE `books` ADD软件工程 FULLTEXT [索引名] (`author` )

激烈留神:MySQ通配符有哪些L 自带的全文索引只能安全教育渠道用于数据库引擎为 MyISAM 的数据表Go,假定是其他数据引
擎,则全文索引不会收效。

一般交给第三方软件进行全文索引。索引超出了数组边界什么意思

3.6 索引设计准则

  1. 索引并非越多越好
  2. 数据量不大的不需求树立索引
  3. 列中的值改动安全不多不需求树立索引 row id
  4. 常常排序(order by 字段)和分组(groupgoogle by 字段)的列需求树立索引
select a.bTypeId,(select b.bTypeName from category b where a.bTypeId = b.bTypeId)
bn,count(*) from books a grou安全手抄报p by bTypeId;

5.仅有性通配符怎样用绑缚对应运用仅有性索引

ta软件工程ble (id pri,use,name index,pass);

4Go 外键绑缚

4.1 什么是外键绑缚

f安全教育oreign key 就是表与表之间的某种约好的联络,因为这种联络的存在,咱们能够让表与表之间的数据,愈加的完好,相关性更强。

关于完好性,相关性咱们举个比方
例:
有二张表,一张是用户表,一张是订单表

  1. 假定我删去了用户表里的用户,那么订单表里边与这个用户有关的数据,就成了无头数据通配符选择器了,不

完好了。
2. 假定我在订单安全教育表里边,随意刺进了一条数据,这个订单在用户表里边没有安全手抄报与之对应的用户。这样
数据也不完好了。
3. 假定有外键的话,就便利多了,能够不让用户删去数据,或许删去用户的话,经过外键相同删去
订单表里边的数据,这样也能让数据完好。

4.2 创立外键绑缚

外键: 每次刺进或更新时,都会检查数索引贴的用法据的完好性。软件测验
办法一:经过 create table 创立外键
语法:

create table 数据表称谓(
...,
[CONSTRAINT [绑缚称谓]] FOREIGN索引是什么意思 KEY [外键字段]
REFERENCES [外键表名](外键字段,外键字段软件测验 2…..)
[ON DELETE CASCADE ]
[ON UPDATE CASCADE ]
)
constraint [knstrent] 绑缚
references [refrnsz] 触及;相关
cascade [ksked] 级联

关于参数的阐明:宫颈癌
RESTRICT: 拒必定父表的删去或更新操作。
CASCADE: 从父表删去或更新且主动删去或更新子表中匹配的行。ON DELETE CASCADE 和 ON
UPDATE CASCADE 都可用

留神:on update cascade 是级联更新的意思通配符怎样输入,on delete cascad枸杞e 是级联删去的意思,意思就是
说当你更新或删去主键表,那外键表也会跟从一同更新或删去。

精简化后的语法:
语法:foreign key 当时表的字段 references 外部表名 (相关的字段) ENGINE =innodb

注:创立成功,有必要满意以下 4 个条件:
1、保证参照的表和字段存在。
2、组成外键的字段被索引。
3、有必要运用 ENGINE 指定存储引擎为:innodb。
4、外键字段和相关字段,数据类软件应用型有必要一起。

比方:咱们创立一通配符*和?分别代表什么个数据库,包含用户信息表和订单表

mysql> create databas安全e market;
mysql> use market;
mysql> create table `user`(id int(11)软件工程工作方向及远景 not null a软件工程专业uto_increment, name通配符 varchar(50) not null
default '', sex int(1) not null default '0', primary key(id))ENGINE=innodb;
#创立时,假定表名是 sql 要害字,运用时,需求运用反引号``
mysql> create tabl通配符掩码e `order`(o_id int(11) auto索引是什么意思_increment, u_id int(11) default '0',
username varchar(50), money int(11), primary key(o_id), index(u_id), foreign key
order_f_key(u_id) references user(id) on delete cascade on update cas工商银行客服电话cade)
ENGINE软件工程工作方向及远景=innodb;

注:on delete cascade on update cascade 增加级软件测验联删去和更新。

保证参照的表 user 中 id 字段存在。 组成外键的字段 u_id 被索引。 有必要运用 type 指定存储引擎为:innodb。
外键字段和相关字段,数据类型有必要一起。
刺进查验数据

mysql> insert into user(name,sex)values('HA',1),('LB',2),('HPC',安全期核算器1);
mysql> insert into `order`
(u_id,username,money)values(1索引贴,'HA',234),(2,'LB',146),软件应用(3,'HPC',256);
mysql> select * from `order`;

Linux云核算-MySQL-表操作-索引-外键-视图

mysql狗狗币> select id,name,sex,money,o_i软件测验d from user,`order` where id=u_id;

Linux云核算-MySQL-表操作-索引-外键-视图

查验google级联删去:

mysql> delete from user索引贴 where id=1; #删去 user 表中 id 为 1通配符选择器 的数据

再检查 order 表。安全

mysql> select * from `or龚俊der`;

查验级联更新:
更新前数据状态

Linux云核算-MySQL-表操作-索引-外键-视图

mysql> selec工商银行t * from `order`;

Linux云核算-MySQL-表操作-索引-外键-视图

mysql> select * fro索引的作用及优缺点m user;

Linux云核算-MySQL-表操作-索引-外键-视图

mysql> update user set id=6 where id=2;
mysql> select * from u通配符怎样输入ser;

Linux云核算-MySQL-表操作-索引-外键-视图

查验数据完好性:

mysql> insert into `order` (u_id,username,money)values(5,'Find',346);

Linux云核算-MySQL-表操作-索引-外键-视图

外键捆软件技能专业绑,order 表受 u索引超出了数组边界什么意思ser 表的绑缚
在 order 里Go面刺进一条数据 u_id 为 5 用户,在 user 表里边根柢没有,所以刺进不进去

mysql> insert into user values(5,'Find',1);
mysql> insert into `软件商店or龚俊der` (u_id,username,money)values(5,'Find',346); #这儿 u_i工商银行客服电话d 只能是 5
mysql> select * from `order`;

Linux云核算-MySQL-表操作-索引-外键-视图

4.3 删去外键

语法

alter table 数据表称谓 drop foreign key 绑缚(外键)称谓
mysql> al索引ter table `or软件测验der` drop foreign key order1_ibfk_1;
mysql> show create table `order`;

Linux云核算-MySQL-表操作-索引-外键-视图

5 视图

什么是视图:
视图就是一个存在于数据库中的虚拟表。
视图自身没有数据,仅仅经过实施相应的 select 句子结束获得相应的数据。
咱们在怎样的场景运用它,为什么运用视图 :
假定某个查软件工程询作用呈现的非常频频,要索引失效的几种状况常常拿这个查询作用来做子查询

  1. 视图能够简化用户的操作

视图机制用户能够将留神力会合在所关心的数据上。假定这些数据不是直接来自根柢表,则能够经过软件库
界说视图,使数据库看起来结构简略、清楚,并且能够简化用户的数据查询软件操作
2. 视图是用户能以不同的角度看待相同的数据。
关于固通配符选择器定的一些根柢表,咱们能够给不同的用户树立不同的视图,这样不同的用户就能够看到自己需
要的信息了。
3. 视图对重构数据库供给了一定程度的逻枸杞辑性。
比方本来的 A 表被切开成了 B 表和 C 表,咱们依然能够在 B 表和 C 表的基础上构建索引失效一个软件库视图 A,而
运用该数据表的程序能够不变。
4. 视图能够对秘要数据供给安全维护
比方说,每门课的作用都构成了一个根柢表,可是关于每个同学只能够检查自己这门课的作用,因此
可认为每个同学树立一个视图,躲藏其他同学的数通配符怎样用据,只显示该同学自己的
5. 恰当的运用视图能够愈加清楚的表达查询数据。
有时用现有的视图进行查询能够极大的减小查询句子的杂乱程度。

5.1 创立视图

语法:create view 视图称谓(即虚拟的表名) as select 句子。

  1. 在 book 数据库创立视图
mysq安全期核算器l>use book;
mysql> create view bc as select b.bName ,b.price ,c.bTypeName from books as b left
j软件测验oin category索引 as c on b.bTypeId=c.bTypeId ;

能够依照一般表去拜访。别安全教育渠道登录进口的视图表软件应用中的数据和原数据表中数据是同步的。
2. 检查视图创立信息

mysql> show create view bc G

Linux云核算-MySQL-表操作-索引-外键-视图

3.查询视图中的数据索引失效

mysql> select * from bc where price<50G

Linux云核算-MySQL-表操作-索引-外键-视图

5.2 更新或批改视图

语法:

alter view 视图称谓(即虚拟的表名) as select 句子。
update view 视图称谓(即虚拟的表名)s通配符有哪些et
mysql&通配符掩码gt; alter view bc索引符号 as select b.bName ,b.publishing ,c.bTypeId from books as b left
join category as c on b.bTypeId=c.bTypeId;
mysql> select * from bcG

Linux云核算-MySQL-表操作-索引-外键-视图

通配符选择器查有哪些可能巩立姣视图

show table statu通配符掩码s where comment='view' G

5.通配符是什么意思3 删去视图

drop view 视图名。

mysql> drop view bc;

Linux云核算-MySQL-表操作-索引-外键-视图