范式是什么规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。什么是三大范式:第一范式:当关系模式 R 的所有属性都不能在分解为更基本的数据单位时,称 R 是满足第一范式的,简记为 1NF。满足第一范式是关系模式规范化的最低要求,否则,将有很多基本操作在这样的关系模式中实现不了。第二范式:如果关系模式 R 满足第一范式,并且 R 得所有非主属性都完全依赖于 R 的每一个候选关
MySQL 的 InnoDB 引擎事务有 4 种隔离级别,主要是为了保证数据的一致性。InnoDB 引擎提供了行级锁,表锁。MyISAM 提供了表锁,如题,MySQL 会发生死锁吗?答会,在 InnoDB 引擎下,RR(REPEATABLE-READ)级别,如果多个事务争抢同一个资源,会发生死锁。在 RR 级别下,MySQL 提供了 next-keylock。假如一个索引的行有 10,11,13,20 那么可能的 next-keyl
1、InnoDB 行锁是通过给索引上的索引项加锁来实现的,只有通过索引条件检索数据,InnoDB 才使用行级锁,否则,InnoDB 将使用表锁。2、由于 MySQL 的行锁是针对索引加的锁,不是针对记录加的锁,所以虽然是访问不同行的记录,但是如果是使用相同的索引键,是会出现锁冲突的。应用设计的时候要注意这一点。3、当表有多个索引的时候,不同的事务可以使用不同的索引锁定不同的行,另外,不论是使用主键索引、唯一索
数据库事务的隔离级别有 4 种,由低到高分别为 Readuncommitted、Readcommitted、Repeatableread、Serializable。而且,在事务的并发操作中可能会出现脏读,不可重复读,幻读。下面通过事例一一阐述它们的概念与联系。Readuncommitted 读未提交,顾名思义,就是一个事务可以读取另一个未提交事务的数据。事例:老板要给程序员发工资,程序员的工资是 3.6 万/月
介绍作为一款 linxu 桌面系统,deepin 还是挺符合开发需求的,但因为 linxu 系统中权限问题,大部分命令都得加上 sudo 执行,一次两次还好,但用多了就不胜其烦,下面就来介绍如何修改 sudoers 文件达到使用 sudo 不需要密码的效果。前言如何修改 sudoers?直接修改/etc/sudoers 么?不,最好不要这样,这样会因为格式不正确而导致修改不生效,最好是使用 visudo 来进行编辑下面将开始修改
不多说直接上代码/***des 加密*@param[type]$str[description]*@param[type]$key[description]*@paramboolean$toBase64[description]*@return[type][description]*/functionencryptStr($str,$key,$toBase64=true){$block=mcrypt_
1.thinkhphp 安装 queue 扩展我使用的是 composer 安装(composer 安装地址:https://pkg.phpcomposer.com)直接在项目根目录运行 composerrequiretopthink/think-queue2.配置 queue 安装完后会在 config 文件下生成一个 queue.php 文件,配置项如下:(使用的是 redis 驱动,服务器是 linux,安装很方便,yumi
1.首先找到 swoole 扩展包的地址:https://pecl.php.net/package/swoole 里面有 swoole 的各种版本,选择一个下载,例如我下载的是最新的 4.4.0 执行命令:wget-chttps://pecl.php.net/get/swoole-4.4.0.tgz 之后,swoole 扩展就下载下来了,2.解压 tar-zvxfswoole-4.4.0.tgz3.目录切换到解压完成的
什么是 RESTfulRESTful 是一种软件设计风格,由 RoyFielding 在他的论文中提出,全称为 RepresentationalStateTransfer,直译为表现层状态转移,或许可以解释为用 URL 定位资源,用 HTTP 动词描述操作,不用太纠结于定义,接下来我们会详细讨论。RESTful 风格的接口,目前来看,实现的最好的就是 GithubAPI,经常被效仿。接下来我们通过分析 GithubAPI 来
大家熟知 Jetbrains 的话应该知道:他们家的所有产品升级到 2018.2.1 及以上版本后,先前可用的注册服务器都失效了,无法激活升级到最新版本体验最新黑科技。这次要送的这份礼就是:Jetbrains 全系列产品 2019.2.2 及以下版本(理论上适用于目前所有新老版本)最新注册服务器(LicenseServer)的破解,可使用它来激活你手头上的 JetbrainsIDE,具体支持产品和版本见下文的列表。
使用实例:<?phpclassTotalCode{/***统计当前文件有多少行代码,*@returnTotalCodeInfo*/publicfunctiontotalByFile($fullFileName){$fileContent=file_get_contents($fullFileName);$lines=explode("\n",$fileContent);$lineCount=coun
composer 是 PHP 用来管理依赖(dependency)关系的工具,使用 composer 在业务中是非常常见的,比如使用阿里 oss 的 sdk,短信 sdk,非常好用的微信 sdkEasyWeChat 都是使用 composer 安装,一个业务的形成就如同搭建积木一样,通过 composer 引入各种组件完成,但很多 phper 依然不会开发自己的 composer 包(我也只是会用一下),下面是记录自己开发 compose
介绍一种 PHP 通过 curl 实现异步处理的方式,目前应用在我的项目中,使用之前需要安装 php_curl 扩展因为 curl 请求的接口是同一个项目里面的,所以用这种方式比较方便,curl_setopt($ch,CURLOPT_TIMEOUT,1);将 curl 超时时间设置为 1s 介绍一种 PHP 通过 curl 实现异步处理的方式,目前应用在我的项目中,使用之前需要安装 php_curl 扩展因为 curl 请求的接口是同一个
单一职责原则一个类和一个方法应该只有一个责任。例如:publicfunctiongetFullNameAttribute(){if(auth()->user()&&auth()->user()->hasRole('client')&&auth()->user()->isVerified()){return'Mr.'.$this->first_name.''.$this->middle_name.''
myisam 表使用 count 是非常快的,因为它的行数直接被系统存储起来了,当是加上条件后速度就慢了,比如查询 id>1000 的,总共几千万数据,这就非常慢了,这该如何优化呢,总数量-id<1000 的这就非常快了 groupby 用以统计而不是去除重复数据,列需要索引统计需要分组,需要排序,沿着索引就是有序的要想去重就要排序,排序就慢,用 unionall
在 mysql 中 limit 可以实现快速分页,但是如果数据到了几百万时我们的 limit 必须优化才能有效的合理的实现分页了,否则可能卡死你的服务器哦。当一个表数据有几百万的数据的时候成了问题!如 select*fromtablelimit0,10 这个没有问题当 limit200000,10 的时候数据读取就很慢,可以按照一下方法解决第一页会很快 PERCONAPERFORMANCECONFERENCE2009 上,
还是在继续学习 Go 的路上,曾经在使用 PHP 的时候吃过过度依赖框架的亏。现在学习 Go 的时候决定先打好基础,从标准库学起走。源码分析我们知道最简单的建立 http 服务器代码基本上都是这样的:http.HandleFunc('/',func(whttp.ResponseWriter,r*http.Request){fmt.Fprint(w,"Helloworld")})http.ListenAndServe
由于虚拟主机的根目录外没有权限创建文件夹,官方文档举的那个例子,其实用不了不需要腾挪 public 里面的入口文件,直接在根目录放一个.htaccess,修改为以下内容,就可以,其它都不用改(亲测可用)<IfModulemod_rewrite.c>RewriteEngineonRewriteCond%{REQUEST_URI}!^publicRewriteRule^(.*)$public/$1[L]</
使用 navicate12 运行 sql 文件出错报错:[ERR]1273-Unknowncollation:'utf8mb4_0900_ai_ci'1 报错原因:生成转储文件的数据库版本为 8.0,要导入 sql 文件的数据库版本为 5.6,因为是高版本导入到低版本,引起 1273 错误解决方法:打开 sql 文件,将文件中的所有 utf8mb4_0900_ai_ci 替换为 utf8_general_ciutf8mb4 替换为 u
一、协同锁(advisorylock)和强制锁(mandatorylock)1、协同锁协同锁要求参与操作的进程之间协同合作。假设进程“A”获得一个 WRITE 锁,并开始向文件中写入内容;此时,进程“B”并没有试图获取一个锁,它仍然可以打开文件并向文件中写入内容。在此过程中,进程“B”就是一个非合作进程。如果进程“B”试图获取一个锁,那么整个过程就是一个合作的过程,从而可以保证操作的“序列化”。只有当参