Linux云计算-MySQL-表操作-索引-外键-视图_linux的mysql中表的计算(1)

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全)
img

正文

mysql> create table test(col1 varchar(10) not null, col2 varchar(10) 
null)ENGINE=MyISAM;
mysql> insert into test values('',null);
mysql> insert into test values('1','2');
mysql> insert into test values('','1');
mysql> select \* from test;

在这里插入图片描述

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

mysql> select \*from test where col1 is not null;

在这里插入图片描述

mysql> select \* from test where col1 <>'';

在这里插入图片描述

为空表示不占空间,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 test2;

在这里插入图片描述

总结:
如果字段没有设定 default ,MySQL 依据这个字段是 null 还是 not null,如果可以为 null,则为
null。如果不可以为 null,则报错。
在这里插入图片描述

如果时间字段,默认为当前时间 ,插入 0 时,默认为当前时间。

如果是 enum 类型,默认为第一个元素。

1.3 auto_increment 字段约束

自动增长

只能修饰 int 字段。 表明 MySQL 应该自动为该字段生成一个唯一没有用过的数(每次在最大 ID
值的基础上加 1。

特例:如果目前最大 ID 是 34,然后删除 34,新添加的会是 35.)。

对于主键,这是非常 有用的。可以为每条记录创建一个惟一的标识符。

mysql> create table items ( id int not null auto_increment primary key , label 
varchar(20) not null);
mysql> insert into items (label) values ('aaba');
mysql> insert into items values (9,'aaba');

插入一个比上面数字小的值,会是下面的结果
在这里插入图片描述
再插入一条 id 将为多少

mysql> insert into items (label) values ('abc');
mysql> select \* from items;

在这里插入图片描述

Id 为 10
mysql> insert into items values (9,'adl');
ERROR 1062 (23000): Duplicate entry '9' for key 'PRIMARY' 
insert into items (label) values ('abcs'); #IDmax =11 max=11
delete from items where label='abcs'; #IDmax=10 max=11
insert into items (label) values ('abcsw'); #Idmax=11 max=12

原因:主键约束唯一

2 清除表中的记录

清空表中所有记录
方法一:
delete 不加 where 条件,清空所有表记录。但是 delete 不会清零 auto_increment 值

mysql> delete from items;
Query OK, 5 rows affected (0.00 sec)
mysql> insert into items (label) values ("aaaa");

在这里插入图片描述

方法二:
删除表中所有记录,清 auto_increment 值。
truncate
作用: 删除表的所有记录,并清零 auto_increment 值。新插入的记录从 1 开始。

语法: truncate table name;
mysql> truncate table items;
Query OK, 0 rows affected (0.01 sec)
mysql> insert into items values(null,'abv');

在这里插入图片描述

mysql> insert into items(label)values('hkuyb');
mysql> select \* from items;

在这里插入图片描述

                                         小伙伴们想要文章中的视频+笔记的 
                                           可以添加我们小姐姐来领取哦!

在这里插入图片描述

3 索引

索引是一种特殊的文件(InnoDB 数据表上的索引是表空间的一个组成部分),它们包含着对数据表
里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。
优点:为了加快搜索速度,减少查询时间。
缺点:

  1. 索引是以文件存储的。如果索引过多,占磁盘空间较大。而且他影响: insert ,update ,delete
    执行时间。
  2. 索引中数据必须与数据表数据同步:如果索引过多,当表中数据更新的时候后,索引也要同步更
    新,这就降低了效率。

索引的类型:

  1. 普通索引
  2. 唯一性索引
  3. 主键索引(主索引)
  4. 复合索引
3.1 普通索引

最基本的索引,不具备唯一性,就是加快查询速度
创建普通索引:
方法一:创建表时添加索引

create table 表名(
列定义
index 索引名称 (字段)
index 索引名称 (字段)
)

注:可以使用 key,也可以使用 index 。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 varchar(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;

在这里插入图片描述

注:如果 Key 是 MUL, 就是一般性索引,该列的值可以重复, 该列是一个非唯一索引的前导列(第一
列)或者是一个唯一性索引的组成部分但是可以含有空值 NULL。就是表示是一个普通索引。
show create table xxx; 先查看建表时的索引名

我们先删除索引

mysql> alter table demo drop key pwd; #注意此处的 pwd 指的是索引的名称,而不是

表中 pwd 的那个字段

再用 alter 添加

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_increment primary key, uName varchar(20), 
uPwd varchar(20), unique index (uName));

在这里插入图片描述

方法二:修改表时,加唯一索引

alter table 表名 add unique 索引名 (字段);
mysql> alter table demo3 drop key uName;
mysql> alter table demo3 add unique(uName);

3.3 主键索引

查询数据库,按主键查询是最快的,每个表只能有一个主键列,可以有多个普通索引列。主键列要求
列的所有内容必须唯一,不允许为空
创建主键索引
方法一:创建表创建主键索引

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

在这里插入图片描述

mysql> show create table demo5;
mysql> show index from demo5 \G

在这里插入图片描述

方法二:创建表后添加<不推荐>如果生产的数据无法保证唯一,创建主键报错
再添加
先删除测试
在这里插入图片描述

删除遇到这种情况是 auto_increment 的原因

mysql> alter table demo5 change id id int(4) not null; #先取消自增长
mysql> alter table demo5 drop primary key; 再删除主键
mysql> alter table 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 key,data varchar(100),date 
varchar(30));
delimiter // #分割符
create procedure prod\_dba() begin declare i int; set i=0; while i<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 \* from test_1 where id=100000; #用时 0 秒
alter table test_1 change id id int(10) not null;
alter table test_1 drop primary key;

在这里插入图片描述

有索引比没索引的查询时间快了 0 点几秒,如果更复杂的表结构查询时间会差更多。

3.4 复合索引

索引可以包含一个、两个或更多个列。两个或更多个列上的索引被称作复合索引
例: 创建一个表存放服务器允许或拒绝的 IP 和 port,表记录中 IP 和 port 要唯一。

mysql> create table firewall ( host varchar(15) not null ,port smallint(4) not null ,access 
enum('deny','allow') not null, primary key (host,port)); #联合主键
mysql> desc firewall;

在这里插入图片描述

mysql> insert into firewall values('10.96.52.46',22,'deny');
mysql> insert into firewall values('10.96.52.46',21,'allow');
mysql> insert into firewall values('10.96.52.46',21,'allow');
ERROR 1062 (23000): Duplicate entry '10.96.52.46-21' for key 'PRIMARY'

插入两个一样就报错,唯一

3.5 全文索引 (FULLTEXT INDEX)

全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。它能够利用分词技术等多种算法智能分析出文本文字中关键字词的频率及重要性,然后按照一定的算法规则智能地筛选出我们想要的搜索结果。

MySQL 在数据量较大的情况下,高并发连接的情况下。

select 语句 where bName like '%网%'

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

ABSUWU LIKE ‘%U_U’

数据库压力大。

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

从 MySQL 5.7.6 开始 MySQL 内置了 ngram 全文检索插件,用来支持中文分

全文索引只能用在 varchar text

创建全文索引:
方法一:创建表时创建

create table 表名(
列定义,
fulltext key 索引名 (字段); )

方法二:修改表时添加

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

强烈注意:MySQL 自带的全文索引只能用于数据库引擎为 MyISAM 的数据表,如果是其他数据引
擎,则全文索引不会生效。

一般交给第三方软件进行全文索引。

3.6 索引设计原则
  1. 索引并非越多越好
  2. 数据量不大的不需要建立索引
  3. 列中的值变化不多不需要建立索引 row id
  4. 经常排序(order by 字段)和分组(group by 字段)的列需要建立索引
select a.bTypeId,(select b.bTypeName from category b where a.bTypeId = b.bTypeId) 
bn,count(\*) from books a group by bTypeId;

5.唯一性约束对应使用唯一性索引

table (id pri,use,name index,pass);

4 外键约束

4.1 什么是外键约束

foreign key 就是表与表之间的某种约定的关系,由于这种关系的存在,我们能够让表与表之间的数据,更加的完整,关联性更强。

关于完整性,关联性我们举个例子
例:
有二张表,一张是用户表,一张是订单表

  1. 如果我删除了用户表里的用户,那么订单表里面与这个用户有关的数据,就成了无头数据了,不
    完整了。
  2. 如果我在订单表里面,随便插入了一条数据,这个订单在用户表里面没有与之对应的用户。这样
    数据也不完整了。
  3. 如果有外键的话,就方便多了,可以不让用户删除数据,或者删除用户的话,通过外键同样删除
    订单表里面的数据,这样也能让数据完整。
4.2 创建外键约束

外键: 每次插入或更新时,都会检查数据的完整性。
方法一:通过 create table 创建外键
语法:

create table 数据表名称(
...,
[CONSTRAINT [约束名称]] FOREIGN KEY [外键字段] 
REFERENCES [外键表名](外键字段,外键字段 2…..)
[ON DELETE CASCADE ]
[ON UPDATE CASCADE ]
)
constraint [kənˈstreɪnt] 限制
references [ˈrefrənsɪz] 涉及;关联
cascade [kæˈskeɪd] 级联

关于参数的解释:
RESTRICT: 拒绝对父表的删除或更新操作。
CASCADE: 从父表删除或更新且自动删除或更新子表中匹配的行。ON DELETE CASCADE 和 ON
UPDATE CASCADE 都可用

注意:on update cascade 是级联更新的意思,on delete cascade 是级联删除的意思,意思就是
说当你更新或删除主键表,那外键表也会跟随一起更新或删除。

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

注:创建成功,必须满足以下 4 个条件:
1、确保参照的表和字段存在。
2、组成外键的字段被索引。
3、必须使用 ENGINE 指定存储引擎为:innodb。
4、外键字段和关联字段,数据类型必须一致。

例子:我们创建一个数据库,包含用户信息表和订单表

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!

王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。

对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!

【完整版领取方式在文末!!】

93道网络安全面试题

内容实在太多,不一一截图了

黑客学习资源推荐

最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

1️⃣零基础入门
① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

image

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

image-20231025112050764

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

1️⃣零基础入门
① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

image

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

image-20231025112050764

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
[外链图片转存中…(img-tmov7mh2-1713361513939)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 15
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值