Git常用命令

几个基本Github命令的使用。

1、 git clone
用于克隆代码到本地。
git clone url —— 克隆url对应的项目到本地。
git clone url folderName ——将url对应的项目克隆岛folderName文件夹

2、 git pull
Github支持协作代码开发管理,会经常遇到需要更新别人的代码或者在不同的电脑上更新自己的代码。那么使用git pull命令即可更新代码。git pull 可以接受很多中参数,详见常见具体的用法为:

  • git pull—— 直接从远程主分支更新代码 , git pull 相当于git pull origin master

  • git pull forkName branchName —— 从forkName对应的url更新branchName分支。

3、 git remote
用于管理远程仓库。

  • git remote —— 显示已经添加的远程仓库名称列表,当从远程地址上clone了一个项目时,会默认添加一个origin名字的仓库,对应clone时的url。等同于git remote show

  • git remote show name —— 显示具体名字对应的仓库的信息。具体如下:

  • git remote add name url —— 添加远程仓库。如:

  • git remote rm name —— 删除远程仓库在本地的映射。 如:

4、 git fetch
用于更新代码,和git pull 功能类似,但是有一些区别。git pull 更新完代码后会自动合并到当前分支,而git fetch不会合并。常见用法如下:
git fetch origin master ——— 将分支代码更新到origin/master分支上
git fetch forkName remoteBranchName:branchName ——— 将分支代码更新到branchName分支上

5、git merge

处理分支的合并。

  • git merge master —— 将主分支合并到当前分支。如果没有任何冲突则使用此命令即可。

这里说下有冲突的情况,现在在两个分支都对同一个文件进行修改,在同一个文件中,如master分支添加“master commit”, test分支添加“test commit”. 然后将两个分支合并。在test分支合并主分支:git merge master.我们会看到如下的情况:

也就是说两个分支有冲突,那么我们可以按照以下步骤进行冲突的解决:

(1).首先把改动恢复到merge之前,因为目前的状态是:

我们先添加改动到暂存区域,git add .,然后用git reset head — .最后使用git checkout — .取消改动。到这里,test就已经恢复到merge之前的状态

(2).生成test分支相对于master的补丁

使用这个命令后我们得到“0001-.test-commit.patch”,在项目的根目录下,我们将这个文件剪切到其他目录,比如D:/

(3).切回出分支,git chekcout master。 然后进行补丁修正,

首先进行git am D:\0001-.test-commit.patch打补丁,如果没有冲突则此补丁修正成功,如果有冲突就会得到形如下面的结果:

接着使用git apply --reject D:\0001-.test-commit.patch生成rej文件,来辅助我们解决冲突:

我们可以得到如下结果:

此时我们会发现在冲突文件同级目录下生成了一个rej文件,我们打开这个rej文件,可以看到:

即说明在Hello Gavin的下一行添加了一个Test commit的文本,而我们主分支呢,也在Hello Gavin的下一行添加了一行文本,”master test!”. 我们可以直接将”Test commit!” 添加到test.txt即可,比如我们这里就添加到”master test!”的下一行,然后保存。(实际解决冲突的时候需要根据具体的情况来处理)

(4).提交补丁的改动,现在我们已经解决了冲突的代码部分,接着我们应该提交这个改动。首先使用 git rm -f .\test.txt.rej来删除rej文件,只需要提交改动的代码文件。

这样就完成了一个有冲突的补丁的修正,如果有多个补丁可以重复此步骤进行处理。

6、git branch
用于本地分支的管理
git branch —— 查看当前仓库的所有本地分支
git branch branchName —— 创建名字为branchName的分支
git branch -D branchName —— 删除名字为branchName的分支

7、git checkout
git checkout 用于分支的切换,如:
git checkout test —— 如果test分支存在,则切换到test分支
git checkout -b test —— 用于test分支不存在的情况,会先创建test分支再切换到test分支。相当于 git branch test , git checkout test两条命令

这里主要介绍了一些常用的命令,git的命令还有很多,每一个命令的用法也有很多。

YII 框架多表条件联合查询

根据网上查到的文章及YII官网介绍,整了好长时间。配置好relations。在search函数中需要如下处理:

设置$criteria->together这步很重要,不然总是会报SQL语法错误。

MySQL Hash索引和B-Tree索引的区别

MySQL Hash索引和B-Tree索引的区别究竟在哪里呢?相信很多人都有这样的疑问,下文对两者的区别进行了详细的分析,供您参考。

MySQL Hash索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引。
可 能很多人又有疑问了,既然 Hash 索引的效率要比 B-Tree 高很多,为什么大家不都用 Hash 索引而还要使用 B-Tree 索引呢?任何事物都是有两面性的,Hash 索引也一样,虽然 Hash 索引效率高,但是 Hash 索引本身由于其特殊性也带来了很多限制和弊端,主要有以下这些。

(1)MySQL Hash索引仅仅能满足”=”,”IN”和”<=>”查询,不能使用范围查询。

由于 MySQL Hash索引比较的是进行 Hash 运算之后的 Hash 值,所以它只能用于等值的过滤,不能用于基于范围的过滤,因为经过相应的 Hash 算法处理之后的 Hash 值的大小关系,并不能保证和Hash运算前完全一样。

(2)MySQL Hash索引无法被用来避免数据的排序操作。

由于 MySQL Hash索引中存放的是经过 Hash 计算之后的 Hash 值,而且Hash值的大小关系并不一定和 Hash 运算前的键值完全一样,所以数据库无法利用索引的数据来避免任何排序运算;

(3)MySQL Hash索引不能利用部分索引键查询。

对于组合索引,Hash 索引在计算 Hash 值的时候是组合索引键合并后再一起计算 Hash 值,而不是单独计算 Hash 值,所以通过组合索引的前面一个或几个索引键进行查询的时候,Hash 索引也无法被利用。

(4)MySQL Hash索引在任何时候都不能避免表扫描。

前面已经知道,Hash 索引是将索引键通过 Hash 运算之后,将 Hash运算结果的 Hash 值和所对应的行指针信息存放于一个 Hash 表中,由于不同索引键存在相同 Hash 值,所以即使取满足某个 Hash 键值的数据的记录条数,也无法从 Hash 索引中直接完成查询,还是要通过访问表中的实际数据进行相应的比较,并得到相应的结果。

(5)MySQL Hash索引遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高。

对于选择性比较低的索引键,如果创建 Hash 索引,那么将会存在大量记录指针信息存于同一个 Hash 值相关联。这样要定位某一条记录时就会非常麻烦,会浪费多次表数据的访问,而造成整体性能低下。

MySQL SHOW命令汇总

a. show tablesshow tables from database_name; — 显示当前数据库中所有表的名称
b. show databases; — 显示 mysql 中所有数据库的名称
c. show columns from table_name from database_name;show columns from database_name.table_name; — 显示表中列名称
d. show grants for user_name; — 显示一个用户的权限,显示结果类似于grant 命令
e. show index from table_name; — 显示表的索引
f. show status; — 显示一些系统特定资源的信息,例如,正在运行的线程数量
g. show variables; — 显示系统变量的名称和值
h. show processlist; — 显示系统中正在运行的所有进程,也就是当前正在执行的查询。大多数用户可以查看他们自己的进程,但是如果他们拥有process权限,就可以查看所有人的进程,包括密码。
i. show table status; — 显示当前使用或者指定的database中的每个表的信息。信息包括表类型和表的最新更新时间
j. show privileges; — 显示服务器所支持的不同权限
k. show create database database_name; — 显示create database 语句是否能够创建指定的数据库
l. show create table table_name;— 显示create database 语句是否能够创建指定的数据库
m. show engies; — 显示安装以后可用的存储引擎和默认引擎。
n. show innodb status; — 显示innoDB存储引擎的状态
o. show logs; — 显示BDB存储引擎的日志
p. show warnings; — 显示最后一个执行的语句所产生的错误、警告和通知
q. show errors; — 只显示最后一个执行语句所产生的错误
r. show [storage] engines; –显示安装后的可用存储引擎和默认引擎
s. show procedure status –显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等
t. show create procedure sp_name –显示某一个存储过程的详细信息

语法:MySQL中INSERT INTO SELECT的使用

语法介绍

有三张表a、b、c,现在需要从表b和表c中分别查几个字段的值插入到表a中对应的字段。对于这种情况,可以使用如下的语句来实现:

上面的语句比较适合两个表的数据互插,如果多个表就不适应了。对于多个表,可以先将需要查询的字段JOIN起来,然后组成一个视图后再SELECT FROM就可以了:

其中f1是表b的字段,f2是表c的字段,通过JOIN查询就将分别来自表b和表c的字段进行了组合,然后再通过SELECT嵌套查询插入到表a中,这样就满足了这个场景了,如果需要不止2个表,那么可以多个JOIN的形式来组合字段。

语法错误注意

需要注意的是嵌套查询部分最后一定要有设置表别名,如下:

即最后的AS tb是必须的(tb这个名称可以随意取),即指定一个别名。每个派生出来的新表都必须指定别名,否则在mysql中会报如下错误:
ERROR 1248 (42000): Every derived TABLE must have its own alias

另外,MySQL中INSERT INTO SELECT不能加VALUES,即不能写成如下形式:

否则也会报错:You have an error in your SQL syntax

NetBeans常用快捷键

1、Ctrl-Tab:在打开的文件之间切换;

2、Ctrl-N:在当前打开的项目里新建文件;

3、Ctrl-F:当前文件查找匹配的字符(支持正则);

4、Ctrl-H:当前文件查找、替换匹配的字符(支持正则,这里正则显得比较重要);

5、Ctrl-Shift-↑↓:光标所在行向上或者向下复制;

6、Ctrl-[:光标所在的位置首尾标识符之间移动({},ul );

7、Ctrl-K:插入当前文档或者当前方法里匹配相关的关键词;

8、Ctrl-B:跳到光标所在位置的函数定义说明文档所在的位置(与Ctrl-鼠标左键差不多);

9、Ctrl-G:输入数字跳到当前文档所在行;

10、Ctrl-Shift-1/2/3:显示当前文件所在项目/文件位置/添加到收藏;

11、Ctrl-D:删除当前行;

12、Ctrl-E:剪切当前行;

13、Ctrl-/:注释当前行或者注释所选的多行;

14、Ctrl-Shift-/:去掉注释当前行或者去掉注释所选的多行;

15、Alt-F7:查找当前函数使用实例;

16、Ctrl-Shift-F:当前打开项目查找匹配的字符(支持正则);

17、Ctrl-Shift-H:当前打开项目查找、替换匹配的字符(支持正则,这里正则显得比较重要);

18、Ctrl-P:显示光标所在方法的参数;

19、Alt-Shift-↑↓←→:当前行上下左右移动;

20、Ctrl-Shilt-Space:显示当前方法详细说明文档;

21、Alt-Enter:显示语法错误;

22、Ctrl-Shift-C:开启或者关闭当前注释;

23、Alt-←:上一个编辑的地方;

24、Alt-→:下一个编辑的地方;

25、Ctrl-Q:最后一个编辑的地方;

这里只介绍了平时常用到的,另外一些有关运行、编译、单元测试以及调试的快捷键都没有罗列。

phpMyAdmin密码设置

在使用phpMyAdmin操作数据库时,首先需要设置mysql的root用户的密码。具体操作参考前一篇博文。设置完mysql的root密码之后,需要对phpMyAdmin的登录进行一些配置。

未经配置的phpMyAdmin很不安全,容易受到攻击,或者根本无法正常使用,phpMyAdmin有3种授权模式:
– cookie: 显示一个web登录页面,输入mysql的用户名和密码,然后进入管理界面
– http: 显示1个windows登录框,输入mysql的用户名和密码,然和进入管理
– config: 把mysql用户名和密码直接填入config.inc.php,不显示登录界面,直接进入管理界面

具体的参数配置如下所示:

各参数的含义从命名中可以很清楚的看出来。根据自己的需要进行必要的配置即可。

mysql远程连接错误1130的解决方法

解决远程连接mysql错误1130代码的方法

今天在用远程连接Mysql服务器的数据库,不管怎么弄都是连接不到,错误代码是1130,ERROR 1130: Host 192.168.2.159 is not allowed to connect to this MySQL server
猜想是无法给远程连接的用户权限问题。结果这样子操作mysql库,即可解决。在本机登入mysql后,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从”localhost”改称’%’。。

第一句:以权限用户root登录
第二句:选择mysql库
第三句:查看mysql库中的user表的host值(即可进行连接访问的主机/IP名称)
第四句:修改host值(以通配符%的内容增加主机/IP地址),当然也可以直接增加IP地址
第五句:刷新MySQL的系统权限相关表
第六句:再重新查看user表时,有修改。。
重起mysql服务即可完成。


本机的mysql数据库中有两条user=’root’的记录,将其中一条host=’localhost’的host修改为’%’后,虽然可以通过远程访问数据库了,但是使用localhost或者127.0.0.1又无法访问数据库了。

经过一番折腾,发现可以通过创建用户的方法来解决这个问题。不需要修改user表中的任何数据,在本地用root登陆mysql后,执行下面的语句,创建用户名为’root’,密码为’123456’的用户。执行完以后,查看user表,发现新增了一条host=’%’,user=’root’的记录,并且各项权限与其它’root’一样,再次使用192.168.1.13进行访问,发现可以正常访问了。

如果访问还有问题,可以执行一下flush privileges;

MySQL修改root密码的各种方法整理

整理了以下四种在MySQL中修改root密码的方法,可能对大家有所帮助!

方法1: 用SET PASSWORD命令

方法2:用mysqladmin

如果root已经设置过密码,采用如下方法

方法3: 用UPDATE直接编辑user表

在丢失root密码的时候,可以这样

返回值 还是 异常?

返回值 还是 异常?

1 异常

1.1 好处
提高代码可读性

根据区块来区分开正常流程和异常处理

可迅速追溯到错误源头

类库定义的异常基类本身能提供很多的信息,如InnerException,StackTrace等

1.2 坏处
阅读代码时,人眼无法轻易辨认出隐藏的异常

假设DoSomething1中会抛出异常,通过代码无法一眼看出DoSomething2是否会被执行。
如果需要确认DoSomething2是否会被执行,你需要了解DoSomething1会抛出哪些异常。
如果DoSomething1有关于会抛出的异常说明,那还算容易,否则你需要查看整个DoSo-
mething1调用树结构。

性能开销大

语言通用性问题

假如各模块由不同的语言写成,则只能在模块内使用异常。换言之,各语言的异常处理不具备通用性。

2 返回值

2.1 好处
没有异常的性能问题

单看代码,很容易辨认程序处理流程

客户代码编写者看到返回值,会有去处理这些返回值的责任。

2.2 坏处
特定场景使用限制

构造函数,线程处理函数等不允许有返回值的情况,以及返回值被用作其他用途的情况

客户代码不够清晰

3 我的理解
追求 稳定 高性能 的程序,慎用异常。

团队应为异常处理方式建立规范,以保证项目的统一(Consistency)性。

正确的使用异常,避免异常混入程序控制流。

模块间接口应采用返回值方式。自己模块内的异常确保自己进行了处理。

4 参考文章
Cleaner, more elegant, and harder to recognize—By Raymond Chen
Making Wrong Code Look Wrong—Joel on software
“拥抱”异常,还是,”固守”返回值?—DCCMX