mysql课外积累

时间:2021-08-26 03:33:05

where 与 on 的区别 :
 ON:针对关联表进行条件筛选,不会影响结果集的数量和主表数据。

 WHERE:针对结果集进行条件筛选,会影响结果集的数量。


LIKE声明中的%和_是什么意思?
        --%对应于0个或更多字符,_只是LIKE语句中的一个字符。


blod text
BLOB是一个二进制对象,可以容纳可变数量的数据。TEXT是一个不区分大小写的BLOB。

BLOB和TEXT类型之间的唯一区别在于对BLOB值进行排序和比较时区分大小写,对TEXT值不区分大小写。

mysql_fetch_array和mysql_fetch_object的区别:

mysql_fetch_array() – 将结果行作为关联数组或来自数据库的常规数组返回。

mysql_fetch_object – 从数据库返回结果行作为对象。

ibd : 数据   索引
每个MyISAM表格以三种格式存储在磁盘上:

·“.frm”文件存储表定义

·数据文件具有“.MYD”(MYData)扩展名

索引文件具有“.MYI”(MYIndex)扩展名


NOW()命令用于显示当前年份,月份,日期,小时,分钟和秒。

CURRENT_DATE()仅显示当前年份,月份和日期。
sql 优化 :

explain出来的各种item的意义;
select_type 
表示查询中每个select子句的类型
type
表示MySQL在表中找到所需行的方式,又称“访问类型”
possible_keys 
指出MySQL能使用哪个索引在表中找到行,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用
key
显示MySQL在查询中实际使用的索引,若没有使用索引,显示为NULL
key_len
表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度
ref
表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值 
Extra
包含不适合在其他列中显示但十分重要的额外信息

(2)、profile的意义以及使用场景;

查询到 SQL 会执行多少时间, 并看出 CPU/Memory 使用量, 执行过程中 Systemlock, Table lock 花多少时间等等
数据库是磁盘文件,磁盘IO 的代价较高,所以采用索引减少IO 次数

drop直接删掉表有关的一切(数据/结构/约束…),不会记录日志
truncate 删除表中所有数据(再插入时自增长id又从1开始),该操作也不会记录日志所以比较快,为DDL操作。只能删table

DELETE语句执行删除的过程是每次从表中删除一行,需要记录日志,比较慢,可以加where 语句,为DML(Data Manipulation Language, 数据操纵语言)。可以删table 和view 。
速度上drop > truncate > delete
from > join > on(筛选器) > where > group by(分组)
> avg (聚合函数) > having( 衰选)
> select > distinct > order by >limit(选取条数)

where和having的区别

(1)where在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会查询出来

(2)where后不可以跟聚合函数,having可以进行聚合函数的判断
注:在具体执行SQL语句中,可以用“;”、“g”和“G”符号表示语句结束。

以“;”、“g”结束符作用一样,而“G”符号除了表示语句结束外,还可以使得结果显示更美观,相当于格式化的作用。

视图:本质上是一种虚拟表,其内容与真实表相似,包含一系列带有名称的列和行数据。但是,视图并不是在数据库中以存储的数据值形式存在。行和列数据来自定义视图的查询所引用基本表,并且在具体引用视图时动态生成。

MySQL软件不仅对于关键字不区分大小写,对于字段数据记录也不区分大小写。


LIKE关键字,如果匹配“%%”则表示查询所有数据记录

主键、外键和索引的区别

定义:

?主键--唯一标识一条记录,不能有重复的,不允许为空

?外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值

?索引--该字段没有重复值,但可以有一个空值


作用:

?主键--用来保证数据完整性

?外键--用来和其他表建立联系用的

?索引--是提高查询排序的速度

个数:

?主键--主键只能有一个

?外键--一个表可以有多个外键

?索引--一个表可以有多个唯一索引
什么是SQL注入?(理解)

答:SQL注入攻击是黑客对数据库进行攻击的常用手段之一。一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,注入者可以在表单中输入一段数据库查询代码并提交,程序将提交的信息拼凑生成一个完整sql语句,服务器被欺骗而执行该条恶意的SQL命令。注入者根据程序返回的结果,成功获取一些敏感数据,甚至控制整个服务器,这就是SQL注入。

count(1) 与 count(*) 都表示对全部数据行的查询。count(*) 包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL ;count(1) 用1代表代码行,在统计结果的时候,不会忽略列值为NULL 。