摘要: 多表查询 表创建 笛卡尔积查询 是两张表相乘的结果,若左边有m条,右边有m条,查询结果为m n条,往往包含大量错误数据。 内连接查询(inner join) 查询两张表都有匹配关系的记录 左连接查询(left join) 以左边的表为基准全部显示出来,右表中仅匹配成功的记录。 右连接查询(right 阅读全文
posted @ 2019-08-21 21:52 最后的别离 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 单表查询 前期表准备 1.语法执行顺序 3.group by MySQL中分组之后,只能拿到分组的字段信息,无法直接获取其他字段信息,但是可以通过其他方法(聚合函数)简介的获取。 1.count():计数,为null时不会计入 2.sum():求和 3.avg():求平均书,为null时不计入分母 阅读全文
posted @ 2019-08-21 21:51 最后的别离 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 阻塞\非阻塞\同步\异步&异步回调 ==阻塞与非阻塞是用来描述程序的状态== 阻塞:指调用结果返回之前,当前线程会被挂起(如遇到IO操作),函数只有在得到结果之后才会将阻塞的线程激活 非阻塞:指不能立刻得到返回结果之前也会立刻返回,同时不会阻塞当前线程 ==串行、并发与并行是用来描述处理任务的方式= 阅读全文
posted @ 2019-08-20 19:41 最后的别离 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 基于协程的TCP并发编程 服务端 客户端 阅读全文
posted @ 2019-08-20 19:41 最后的别离 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 协程 由于GIL锁导致CPython中多线程无法并发执行,只能并发执行。而并发实现的原理就是切换+保存,那就意味着多线程实现并发,就需要为每一个任务创建一个线程。那就出现了两个问题: 问题一:必然增加了线程创建销毁与切换带来的资源开销。 问题二:高并发情况下,由于任务数量太多导致无法开启新的线程,使 阅读全文
posted @ 2019-08-20 19:40 最后的别离 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 死锁与递归锁 所谓死锁:是指两个或两个以上的进程或线程在执行过程中,因争夺 资源而造成的一种互相等待的现象,若无外力作用,他们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 死锁 解决方法:递归锁,在Python中为了支持在同一线程中多次请求同一资源 阅读全文
posted @ 2019-08-20 19:39 最后的别离 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 线程池和进程池 线程池是装线程的池子,进程池是装进程的池子。他们都是异步执行。 1.可以避免频繁的创建和销毁线程(进程)带来的资源开销 2.可以限制同时存在的线程数量,以保证服务器不会因为资源不足而导致崩溃。 3.可以帮我们管理线程的生命周期 4.管理任务的分配 线程池的使用 进程池的应用 阅读全文
posted @ 2019-08-20 19:39 最后的别离 阅读(284) 评论(0) 推荐(0) 编辑
摘要: GIL全局解释器锁 python解释器有很多种,最常见的就是CPython解释器 GIL本质也是一把互斥锁:将并发变成串行牺牲效率保证数据的安全 用来阻止用一进程地下的多线程的同时执行(同一进程内多个线程无法实现并行但是可以实现并发) GIL的存在是因为CPython解释器的内存管理不是线程安全的 阅读全文
posted @ 2019-08-20 19:37 最后的别离 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 数据库——多表关系 一对多表关系 确定表与表之间的关系,一定要换位思考(必须两方都考虑周全之后才能得出结论) 表1—— 表2 一对多 表2—— 表1 多对一 例如:一个部门有多个员工,而一个员工只有一个部门。此时部门表是主表,员工表是从表。 员工表和部门表之间仅仅是单向的多对一,那么它们的关系就是" 阅读全文
posted @ 2019-08-20 19:33 最后的别离 阅读(205) 评论(0) 推荐(0) 编辑
摘要: [TOC] 常用数据类型与约束 数据类型 创建表的完整语法 整型 疑问: 类型后面的宽度能够改变字段存储的大小限制 ==强调:对于整型开说,数据类型后的宽度并不是存储限制,而是显示宽度限制,所以在创建表时,如果字段采用的是整型类型,完全无需指定显示宽度,默认的显示宽度,足够显示完整当初存放的数据。= 阅读全文
posted @ 2019-08-20 09:09 最后的别离 阅读(388) 评论(0) 推荐(0) 编辑