csworkman

个人博客

mysql-整型120

2021-8-26 Mr Chang 数据库

分类:

tinyint  1    smallint 2    mediumint 3   int/integer 4 bigint 8

特点:
1⃣️ 如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加unsigned关键字
2⃣️ 如果插入的数值超出了整型的范围,会报out of range 异常,并且插入临界值
3⃣️ 如果不设置长度,会有默认的长度

1如何设置无符号和有符号:

评论(0) 浏览(998)

mysql-数据库定义语言

2021-8-26 Mr Chang 数据库

一 库的管理
创建,修改,删除
二 表的管理
创建 修改 删除
创建:create 
修改:alert
删除:drop

仅仅复制表的结构:
  CREATE TABLE copy2 
  select * from user;

评论(0) 浏览(921)

mysql-分页查询

2021-8-26 Mr Chang 数据库

应用场景:
        当要显示的数据,一页显示不全,需要分页提交sql请求,
语法:
  select 查询列表
  from 表 
  [join type] 表二
  on 连接条件
  limit offset,size
  offset要显示条目的启示索引(起始索引从0开始)
  size 要显示的条目个数
 
特点:1⃣️limit 语句放在查询语句的最后
          2⃣️公式。limit (page -1)*,size

评论(0) 浏览(1100)

http缓存策略

2021-8-25 Mr Chang 前端

缓存的目的主要有两点:
1.提升数据交互的性能(速度)
2.缓解服务器或数据库的压力。

当用户第一次请求一个资源时,浏览器会先询问是否有命中缓存,没有命中缓存的缓存则浏览器再从服务器获取资源然后再把资源存到浏览器的缓存数据库中,则浏览器下次发现了满足某些缓存规则,就可以直接从缓存数据中取出你需要的资源。

什么是缓存策略呢,是比上面的过程还要复杂一些,http根据是否要向服务器发送请求将缓存规则分为了两类:强缓存和对比缓存(协商缓存)

强缓存:直接从缓存数据库中取出资源,无需在发送请求到服务器上面。

http中用来判断是否命中强缓存的字段为Expires 和 cache-control,cache-control 优先级高于Expires

cache-control 常见字段的含义:
public 表明响应可以被任何对象缓存,即使是通常不可缓存的内容。
private 表明响应只能被单个用户缓存,不能作为共享缓存,私有缓存可以缓存响应内容。
no-cache 可以在本地进行缓存,但每次发送请求时需要向服务器进行验证,如果服务器允许,才能使用本地缓存
no-store 禁止缓存客户端请求或服务器响应的内容,每次都必须重新请求服务器拿内容。
max-age 设置缓存存储的最大周期,超过这个时间缓存被视为过期

评论(0) 浏览(1035)

文件系统与数据库系统之间的区别

2021-8-25 Mr Chang 数据库

数据库管理系统(DBMS)管理的是符合特定数据模型的数据,最普遍的是关系型数据模型(relational data model)。
使用关系模型的DBMS成为RDBMS。关系数据模型中,用户的数据是一个个的关系表。每个表是数据行的集合,这些数据具有相同的结构。
现在比较流行的是key-value数据和json数据模型,这两种nosql数据模型的优点是简单和灵活,易于快速搭建业务系统,但是缺乏规范性,任意加减字段经常会吧系统搞崩溃,本质原因是这种做法违背了早已被验证的系统设计理念---‘程序与数据分离’。
最后关系型数据库还有事务处理系统,实现ACID属性。本质上来说,就是确保并发读写数据的多个用户连接可以同时正确工作互不干扰。
现代数据库系统还有高可靠性和高扩展性机制,确保DBMS系统在部分节点故障情况下仍然可以对外提供服务。

文件系统是DBMS之下的系统功能。文件系统所管理的数据是‘文件’,而文件的具体格式和内容则并不关心。在文件系统看来,一个文件中存放的就是一串子节或者字符,仅此而已。这种简单性让它具有更加广泛的适用性,但是缺点就是用户需要做的事情就多了很多很多,上述RDBMS可以做的事情,假入使用文件系统来做的话,则需要用户实现全部RDBMS的功能,这是一个难度极其巨大的任务。


评论(0) 浏览(1021)

mysql-子查询

2021-8-24 Mr Chang 数据库

子查询分类:
一.按子查询出现的位置:
    select后面:仅仅支持标量子查询
    from后面:支持表子查询
    where或having后面:⭐️
             标量子查询
             列子查询
             行子查询
    exists 后面 (相关子查询)
             表子查询
二.按结果集的行列数不同:   
     标量子查询(结果集只有一行一列)
     列子查询 (结果集只有一列多行)
     行子查询(结果集有一行多列)
     表子查询(结果集一般为多行多列)     

子查询特点:
1⃣️子查询放在小括号内
2⃣️子查询一般放在条件的右侧
3⃣️标量子查询,一般搭配着单行操作符
4⃣️子查询执行优先于主查询执行,主查询的条件
非法使用标量子查询:子查询的条件与查询结果不属于标量数据类型提示为非法使用标量子查询

exisits 查询 结果返回1或0;
标量子查询举例
#案例1:谁的工资比able高
SELECT  * 
FROM employees 
where salary > (
    SELECT 
    salary 
    FROM employees
    WHERE last_name ='Able'
);
#案例2 查询最低工资大于50号部门最低工资的部门ID和最低工资。表名 employees  部门ID department_id  工资 salary ?


评论(3) 浏览(1137)

mysql-sql99语法

2021-8-24 Mr Chang 数据库

语法

   select 查询列表。from 表1 别名 【连接类型】 join 表2 别名 on 连接条件  where 筛选条件

分类:
内连接:inner
外连接 左外 left(outer) 右外right(outer)全外:full(outer)
交叉连接:cross

一内连接
语法:
select  查询列表 from 表1 别名 inner join  表2 别名 on 连接条件
分类:
等值连接
非等值连接
自连接
特点:
1⃣️添加排序,分组,筛选。
2⃣️inner可以省略
3⃣️筛选条件放在where条件后 连接条件放在on后面,提高分离性和阅读性
4⃣️inner join 连接和sql92等值连接语法类似实现效果一样
一)等值连接
二)非等值连接
查询员工的工资级别
SELECT emplpyees e  JOIN job_garades g ON e.`salary` BETWEEN g.`lowest_sal` and g.`highest_sal`;

三)自连接
查询员工的名字,上级的名字 
自己连接自己 给自己这个表设置两个别名

二)非等值连接
查询员工的工资级别
SELECT emplpyees e  JOIN job_garades g ON e.`salary` BETWEEN g.`lowest_sal` and g.`highest_sal`;

三)自连接
查询员工的名字,上级的名字 
自己连接自己 给自己这个表设置两个别名



二 外连接

应用场景:查询一个表中有,而另外一个表中没有的连接

特点:
1.外连接的查询结果为主表中的所有记录
2,如果从表中有和它匹配的,则显示匹配的值
3.如果从表中没有 则显示null
4.内连接结果+主表中有而从表中没有的记录
5 左外连接 left join 左边的是主表
6 右外连接 right join 右边的是主表

全外连接

交叉连接
使用的99语法里面的笛卡尔乘积 左表行数*右表行数



评论(0) 浏览(1016)

mysql-sql92的标准

2021-8-23 Mr Chang 数据库

等值连接:

案例1 查询女神名和对应的男神名

案例2 查询员工名和对应的部门名


2查询员工名,工种号,工种名

为表起别名:提高语句的简洁度,区分多个重名的字段  
注意 如果为表起了别名,则查询的字段不能使用原来的表名。
 

评论(0) 浏览(1123)

mysql-分组查询

2021-8-23 Mr Chang 数据库

进阶5:分组查询
/*
语法:
       select 分组函数,列(要求出现在group by 的后面)
       from 表
       where 筛选条件
       group by 分组的列表
       order by

注意:
     查询列表必须特殊 要求是分组函数和group by 后出现的字段
*/

添加分组后的筛选 用having条件
案例1:查询每个部门的员工个数,查询哪个部门的员工个数>2 
SELECT COUNT(*),department_id FROM employees GROUP BY department_id HAVING COUNT(*)>2; 
案例2:按员工姓名的长度分组,查询每一组的员工个数,筛选员工个数>5的有哪些
SELECT length(last_name),count(*) from employees group by length(last_name) having count(*)>5; 

评论(0) 浏览(979)

mysql-分组函数

2021-8-23 Mr Chang 数据库

#分组函数
SELECT SUM(salary) from employees;
SELECT AVG(salary) from employees;
SELECT MIN(salary) from employees;
SELECT MAX(salary) from employees;
SELECT COUNT(salary) from employees;

#参数支持哪些类型 
#SUM 和AVG 只适合数值类型
#MAX MIN COUNT 支持任意类型
#以上分组函数都忽略null值 所以存储数值的时候是否选择默认是null值需要谨慎使用不然对于业务需求计算会出现问题
#一般运用count(*) 用作统计函数
#和分组函数一同查询的字段要求是group by后的字段
DATEDIFF  求两个日期的相差天数
效率:
MYISAM 存储引擎下  count(*)的效率高
INNODB  存储引擎下,count(*) 和count(1) 的效率差不多,比count(字段)要高一些

评论(0) 浏览(1007)