2023-06-01 19-57-46-649
流式布局,是根据百分比布局,因为手机的尺寸会不一样,所以利用百分比布局可以很好的解决缩放以及尺寸问题:
这是跟着视频做的一个案例:
flex是 flexible box 的缩写,意思是弹性布局,用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为flex布局
当我们指定父盒子为flex布局之后,子元素的 float、clear、vertical-align 属性都将失效
采用flex布局的元素,称为flex容器,它的所有子元素自动成为容器成员,称为flex项目。
flex-direction:设置主轴的方向
默认的主轴是x轴,y轴是侧轴。
justify-content:设置主轴上的子元素排列方式
flex-wrap:设置子元素是否换行
默认不换行,不换行,装不下会缩小子元素的宽度来填充。
- nowrap:不换行
- wrap:换行
align-content:设置侧轴上的子元素排列方式(多行)
在单行下没有效果
align-items:设置侧轴上的子元素排列方式(单行)
flex-flow:复合属性,相当于同时设置了flex-direction和flex-wrap
语法:flex-flow:flex-direction属性 flex-wrap属性;
对表进行联结,应该至少有一个列出现在不止一个表当中。
外部联结语法类似
计算字段一定要分组
使用情况:
union的使用只需要在各条select语句之间放上关键字union。
使用规则:
出现全文搜索是因为,like和regexp是一行一行匹配的,这样效率会很低。全文搜索的这个是只搜索表的部分,MySQL不需要分别查看每一行,只用创建列中各词的一个索引,针对这些词搜索,快速有效的决定哪些词匹配。
一般在创建表的时候启用全文本搜索。在create语句当中,指定索引列 fulltext 。
需要注意的是索引列必须是,char,varchar,text类型。
具体格式为 create fulltext index index_name on table_name(colum_name);
match可以写多个,只需要和fulltext里面定义的相同,并且正确列出它们(次序正确)
全文排序会对结果排序,具有较高等级的行先返回,越前面越是你想要的数据。
查询扩展在against后面的匹配表达式,加上with query expansion语句即可。扩展查询会查俩次,第一次查询能被against语句匹配的,第二次查询能被against所匹配出来的行 去匹配其他行,会返回可能不是你想要的数据。因为我没有试出来,所以就没写列子了。
布尔文本搜索没有fulltext索引也可以使用,可以实现以下内容:
语法如下,在匹配表达式后面接 in boolean mode
另外在需要注意的点有:
- 在索引全文本数据时,短词被忽略且从索引中排除。短词为那些具有3个或者3个以下字符的词(这个数目可以修改)
- MySQL有一个带有内建的非用词(stopword)列表,这些词在索引全文本数据时,总是被忽略。如果需要,这个列表可以被忽略。
- MySQL有一条规定,如果一个词出现了50%以上,则这个词作为一个非用词被忽略,50%规则不用于in boolean mode
- 如果表中行数少于3行,则全文本部分会结果,因为每个词出现概率都达到了50%
- 忽略词里面的单引号,比如don't 索引为dont
- 对应中文不能恰当的返回全文本搜索结果
- 仅在myisam数据引擎中支持全文本搜索
语法
insert语句省略某些列的值,需要满足以下某个条件。
- 该列定义允许为NULL
- 该表定义中给出默认值。
如果数据检索是重要的,可以通过在insert 和 into 之间添加关键字low_priority 提示MySQL降低insert语句的优先级。同样适用于update语句和delete语句。
尽量使用一条语句插入,可以提高数据库处理的性能。
insert select由一条 insert 语句和一条 select 语句
MySQL并不关心select语句返回的列名,它使用的是列的位置,因此select中的第一列(不管列名)将用来填充表中指定的第一个列。
为了防止update语句更新时,在更新这些行中的一行或者多行时出现错误,导致update语句操作被取消,使用ignore语句忽略错误继续更新。
语法如下:
update ignore table_name set ……
delete语句删除表的操作不是表而是内容,它只是完成了删除表中的所有行,而不是删除表本身。
如果想要更快的删除所有行,不要使用delete,可以使用 truncate table_name 语句,它完成相同的工作。truncate语句实际上时删除原来的表并且重新创建一个表,而不是和delete一样逐行删除表中的数据。
在使用update和delete语句时:
- 如果不是要打算更新和删除每一行,不要使用不带where语句的update和delete语句
- 保证每个表都有主键。
- 在使用update和delet语句时,应该先用select语句进行测试过滤数据,看update和select语句是否正确。
如果创建表的时候,指定的表名必须不存在,否则将出错,会覆盖掉之前的表。如果需要只是在一个表不存在时创建它,应该在表名后面用 if not exists 。
每个表只允许一个auto_increment列,而且它必须被索引(如,通过设置它为主键)。
创建表指定默认值:
在后面接 default 即可,后接默认值
MySQL不允许使用函数作为默认值,它只支持常量。
引擎类型
- InnoDB 是一个可靠的事务处理引擎,不支持全文搜索,所以在全文搜索的时候不能使用。
- MEMORY 在功能上等同于MyISAM,但由于数据存储在内存而不是硬盘,所以速度很快,适用于临时表。
- MyISAM 是一个性能极高的引擎,支持全文本搜索,但是不支持事务处理
外键不能跨引擎。
视图是虚拟的表,与包含数据的表不一样。视图只包含使用时动态检索数据的查询。
为什么使用视图:
- 重用sql语句。
- 简单复杂的sql操作
- 使用表的组成部分而不是整个表。
- 保护数据
- 更改数据格式和表示。
因为视图不包含数据,所以每次使用视图时,都必须处理查询执行时所需的任一检索。如果你用多个联结和过滤。
视图创建和使用需要注意的:
- 视图必须唯一命名
- 视图数量并没有限制
- 创建视图必须有足够的访问权限。
- 视图可以嵌套
- order by可以用在视图中,如果从该视图检索数据select中夜含有order by,那么该视图中的order by将被覆盖。
- 视图不能被索引,也不能有关联的触发器(这个还不懂)或默认值。
或者先删除在create也是可以。
创建视图后可以把视图当作表使用:
视图是可以更新的
以下是可以的
语句和表是一样的
但是以下情况视图不可以更新:
- 分组,使用了group by和having
- 联结
- 子查询
- 并
- 聚集函数
- distinct
- 导出(计算)列
需要注意的是:
当向视图插入数据时,同时也会向原表插入数据。所以插入的时候,需要注意原表是否有不可为NULL的字段。否则会导致出错,无法插入。
存储过程是为以后的使用而保存的一条或者多条MySQL语句的集合。可以将其视为批文件。
为什么使用存储过程:
- 通过把处理封装在容易使用的单元中,简化复杂的操作。
- 不要求反复建立一系列处理步骤,保证数据的完整性。
- 简化对变动的管理
MySQL称存储过程的执行为调用,因此MySQL执行存储过程的语句为call,call接受存储过程的名字以及需要传递给它的任意参数。
如果用的是命令行窗口,它所解释的存储过程自身内的 ; 字符 它们最终不会成为存储过程的成分。因为默认的MySQL语句分隔符为;
其中,DELIMITER // 是告诉命令行程序使用 // 作为新的语句结束分隔符,所以end后接的是 // 而不是分隔符; 执行完了后,又改回去成 ;
除了\ 符号外,任何字符都可以作为语句分隔符。
一般来说,存储过程并不显示结构,而是把结构返回给你指定的变量。
记录集不是允许的类型,因此,不能通过一个参数返回多个行和列。为了调用此修改过的存储过程,必须指定4个变量名称。所有的MySQL变量名称必须以@开始
关键字out指出相对应的参数用来存储过程传出一个值返回给调用者。另外MySQL支持in(传递给存储过程)、out(从存储过程传出),和 inout (对存储过程传入和传出)。
有时需要在检索出来的行中前进或者后退一行或者多行。这是使用游标的原因。