diff --git "a/01 \345\274\240\350\276\211/20231024 \346\225\260\346\215\256\345\272\223\351\253\230\347\272\247\345\233\236\351\241\276.md" "b/01 \345\274\240\350\276\211/20231024 \346\225\260\346\215\256\345\272\223\351\253\230\347\272\247\345\233\236\351\241\276.md" new file mode 100644 index 0000000000000000000000000000000000000000..d370132a5bab6e1869cf7b4ee6b95a0f590d3218 --- /dev/null +++ "b/01 \345\274\240\350\276\211/20231024 \346\225\260\346\215\256\345\272\223\351\253\230\347\272\247\345\233\236\351\241\276.md" @@ -0,0 +1,147 @@ +# 笔记 + +RBAC:基于角色的访问权限管制模型(Role-Base Access Control) + +RBAC核心是角色 + +SPU:标准化产品单元(Standard Product Unit),是商品信息聚合的最小单位,属性值、特性相同的商品就可以称为一个SPU + +SKU:最小的库存单位(Stock Keeping Unit),SKU是库存存贮的最小单位 + +表与表之间的关系 + +1.一对一的关系 将其中任一表中的主键,放到另一个表当主键 + +2.一对多的关系 将一所在的表的主键放到多的表当外键 + +3.多对多的关系 必须第三张表,将前面两个表的主键放进来当外键 + +视图: + +视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视 +图的查询中使用的表,并且是在使用视图时动态生成的。 +通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作 +就落在创建这条SQL查询语句上。 + +```mysql +-- 创建视图 +create or replace view stu_v_1 as select id,name from student where id <= 10; +-- 查询视图 +show create view stu_v_1; +select * from stu_v_1; +select * from stu_v_1 where id < 3; +-- 修改视图 +create or replace view stu_v_1 as select id,name,no from student where id <= 10; +alter view stu_v_1 as select id,name from student where id <= 10; +-- 删除视图 +drop view if exists stu_v_1; +``` + +```mysql +if +if: 用于做条件判断,具体的语法结构为: +IF 条件1 THEN +..... +ELSEIF 条件2 THEN -- 可选 +..... +ELSE -- 可选 +..... +END IF; +在if条件判断的结构中,ELSE IF 结构可以有多个,也可以没有。 ELSE结构可以有,也可以没有。 + +//CASE +case结构及作用,和我们在基础篇中所讲解的流程控制函数很类似。有两种语法格式: +语法1: +-- 含义: 当case_value的值为 when_value1时,执行statement_list1,当值为 when_value2时, +执行statement_list2, 否则就执行 statement_list +CASE case_value +WHEN when_value1 THEN statement_list1 +[ WHEN when_value2 THEN statement_list2] ... +[ ELSE statement_list ] +END CASE; + +语法2: +-- 含义: 当条件search_condition1成立时,执行statement_list1,当条件search_condition2成 +立时,执行statement_list2, 否则就执行 statement_list +CASE +WHEN search_condition1 THEN statement_list1 +[WHEN search_condition2 THEN statement_list2] ... +[ELSE statement_list] +END CASE; + +注意:case语句要注意在select查询字段的时候可以(必须)不加分号还有结束的case也可以不写 +``` + +```mysql +while +while 循环是有条件的循环控制语句。满足条件后,再执行循环体中的SQL语句。具体语法为: +-- 先判定条件,如果条件为true,则执行逻辑,否则,不执行逻辑 +WHILE 条件 DO +SQL逻辑... +END WHILE; + +repeat +repeat是有条件的循环控制语句, 当满足until声明的条件的时候,则退出循环 。具体语法为: + +-- 先执行一次逻辑,然后判定UNTIL条件是否满足,如果满足,则退出。如果不满足,则继续下一次循环 +REPEAT +SQL逻辑... +UNTIL 条件 +END REPEAT; + + +loop +LOOP 实现简单的循环,如果不在SQL逻辑中增加退出循环的条件,可以用其来实现简单的死循环。 +LOOP可以配合一下两个语句使用: + +LEAVE :配合循环使用,退出循环。 +ITERATE:必须用在循环中,作用是跳过当前循环剩下的语句,直接进入下一次循环。 + +[begin_label:] LOOP +SQL逻辑... +END LOOP [end_label]; + +LEAVE label; -- 退出指定标记的循环体 +ITERATE label; -- 直接进入下一次循环 +``` + +游标(CURSOR)是用来存储查询结果集的数据类型 , 在存储过程和函数中可以使用游标对结果集进 +行循环的处理。游标的使用包括游标的声明、OPEN、FETCH 和 CLOSE,其语法分别如下。 + +```mysql +声明游标 +DECLARE 游标名称 CURSOR FOR 查询语句 ; +打开游标 +OPEN 游标名称 ; +获取游标记录 +FETCH 游标名称 INTO 变量 [, 变量 ] ; +关闭游标 +CLOSE 游标名称 ; +``` + +触发器 + +```mysql +触发器(trigger)是与表有关的数据库对象,指在insert/update/delete之前(BEFORE)或之后(AFTER),触发并执行触发器中定义的SQL语句集合。 + +事件A 对user表新增一条数据 姓名name 年龄age 性别sex + +事件B 对userlogs记录一条user表的操作 new.name,new.age +``` + +索引: + +```mysql +方式一:直接在已有表中创建索引 +create index 索引名 on 表名(列名) -- 直接删除索引 drop index 索引名 on 表名; +方式二:修改表结构追加普通索引 +alter table 表名 add index 索引名(列名); -- 修改表结构删除索引 alter table 表名 drop index 索引名; +方式三:创建表的时候直接指定 +create table 表名( + aaa int primary key, + bbb varchar(20), + index 索引名 (列名) -- 以这种模式定义的索引,可以不指定索引名称。 + primary key(列名) +); +show index from 表名; +``` \ No newline at end of file