Mysql不常见的插入/更新SQL语句

本文章主要讲解INSERT ... SELECTINSERT ... ON DUPLICATE KEY UPDATE这种比较特殊的数据操作(data manipulation)的SQL。

INSERT … SELECT语句
使用该语句可以通过将select语句得到的结果快速插入到一个表中,该select语句可以查询一个或者多个表,比如:

INSERT INTO tbl_temp2 (fld_id)
  SELECT tbl_temp1.fld_order_id
  FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;

继续阅读“Mysql不常见的插入/更新SQL语句”

MySQL索引的一些见解

索引的两种

索引的类型:索引分为聚簇索引和非聚簇索引两种,聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。

索引的类型

创建索引时字段的length是指索引的长度,可以不指定,length只对字符串类型的字段有效。

继续阅读“MySQL索引的一些见解”

MySQL: Starting MySQL….. ERROR! The server quit without updating PID file解决办法

这个错误从字面上面看不出来到底是哪里出问题了,我是按照下面这么做解决问题的:

首先定位到自己的my.cnf,我发现我的系统里面有两个my.cnf,于是删掉了一个,在另外一个my.cnf的[mysqld_safe]里面加入了
log-error=/var/lib/mysql/mysqld.log

再次service mysqld start ,ok,查看/var/lib/mysqld.log,看到有如下错误:

Can’t find file: ‘./mysql/user.frm’ (errno: 13 – Permission denied)

如果看过mysql/data目录的人都知道这个是mysql用户的表目录,使用ll /usr/mysql/data看一下,发现所有者竟然是root,于是

sudo chown -R mysql.mysql /usr/mysql/data

然后再次 service mysqld start 就可以启动mysql了。