存档

文章标签 ‘MySQL’

【MySQL】事务与分库分表

2016年7月3日 没有评论

事务

  • 满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)
  • 开始事务、保持点、提交、回滚

分库分表

  • 做MySQL集群,利用amoeba做透明访问
  • 有主从复制、垂直分区、水平分片几种方式

阅读全文...

分类: 程序开发, 站点建设 标签: 1,319次阅读

【MySQL】MyISAM与InnoDB的区别

2016年7月3日 没有评论

MyISAM与InnoDB主要区别如下:

  1. MySQL默认采用的是MyISAM。MyISAM不支持事务,而InnoDB支持。
  2. InnoDB不支持FULLTEXT类型的索引。
  3. InnoDB支持外键,MyISAM不支持。
  4. InnoDB的主键范围更大,最大是MyISAM的2倍。
  5. MyISAM支持GIS数据,InnoDB不支持.即MyISAM支持以下空间数据对象:Point,Line,Polygon,Surface等。
  6. InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。
  7. 对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
  8. DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
  9. LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。
  10. InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”

阅读全文...

分类: 程序开发, 站点建设 标签: 1,069次阅读

【MySQL】数据库设计与索引使用

2016年7月3日 没有评论

考虑到性能优化,设计数据库时建议采用以下原则:

  1. 越小的数据类型越好,因为存储和处理都会更快
  2. 简单的数据类型更好:整型数据比起字符,处理开销更小;日期、时间类型优于字符串,用数值类型存储IP等
  3. 尽量避免NULL:应该指定列为NOT NULL,除非你想存储NULL。应该用0、一个特殊的值或者一个空串代替空值。NULL值会影响索引使用

阅读全文...

分类: 程序开发, 站点建设 标签: 858次阅读

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’

2015年6月17日 没有评论

Centos启动mysql 报错,解决方法见最后一部分.

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)

1、先查看 /etc/rc.d/init.d/mysqld status 看看m y s q l 是否已经启动.
另外看看是不是权限问题.

阅读全文...

分类: 软件技巧 标签: 2,011次阅读

【MySQL】查询所有数据库占用磁盘空间大小和单个库中所有表的大小

2013年3月27日 没有评论

查询所有数据库占用磁盘空间大小的SQL语句:

select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2),' MB') as data_size,
concat(truncate(sum(index_length)/1024/1024,2),'MB') as index_size
from information_schema.tables
group by TABLE_SCHEMA
order by data_length desc;   

阅读全文...

分类: 程序开发 标签: 3,413次阅读

【MySQL】修改时区设置

2011年12月30日 没有评论

实践中遇到的一个问题,开发环境的时间数据一切正常,但正式环境数据库中的时间数据与实际相比差了8个小时。根据以往的PHP时区问题经验,断定问题处在MySQL的时区设定上。

用命令行连上去看一下时间,可以确认问题

阅读全文...

分类: 程序开发, 软件技巧 标签: 5,108次阅读

【PHP】获取MySQL数据库里所有表的方法

2011年4月3日 没有评论

获取某个MySQL数据库中所有表的PHP代码如下:

function list_tables($database)
{
    $rs = mysql_list_tables($database);
    $tables = array();
    while ($row = mysql_fetch_row($rs)) {
        $tables[] = $row[0];
    }
    mysql_free_result($rs);
    return $tables;
}

但由于mysql_list_tables方法已经过时,运行以上程序时会给出方法过时的提示信息,如下:

Deprecated: Function mysql_list_tables() is deprecated in ... on line xxx

阅读全文...

分类: 程序开发 标签: , 5,567次阅读

【SQL】随机读取N条记录(MySQL、SQL Server、Access、Oracle、postgreSQL)

2010年3月24日 2 条评论

利用一条SQL语句从数据库Table表中随机获取N条记录,各数据库的SQL语句略有不同,如下:

1、MySql

Select * From TABLE Order By Rand() Limit N

以上代码效率不高,自己对1000条数据表随机取10条的测试结果为耗时0.125s,有网友推荐改为以下代码效率有大幅提高,耗时为0.005s,不过结果是随机从某个位置开始取N条记录,而不是随机取N条记录,略有差异。详细说明见mysql使用rand随机查询记录效率测试

SELECT * FROM `TABLE` a join (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `TABLE`)-(SELECT MIN(id) FROM `TABLE`))+(SELECT MIN(id) FROM `TABLE`)) AS id) AS b WHERE a.id >= b.id ORDER BY a.id LIMIT N;

2、SQL Server

Select TOP N * From TABLE Order By NewID()

阅读全文...

分类: 程序开发 标签: , , , , , 10,799次阅读

【MySQL】Query failed: Unknown table engine ‘InnoDb’的解决办法

2010年3月13日 2 条评论

今儿个安装在线客服应用Mibew Messenger来玩,安装过程中断,提示了

Query failed: Unknown table engine 'InnoDb'

提示信息明显,缺少InnoDb数据库引擎。

命令行下查看一下可用数据库引擎:

阅读全文...

分类: 软件技巧 标签: 15,661次阅读

【MySQL】File ‘c:\mysql\share\charsets\?.conf’ not found (Errcode: 22)的解决方法

2010年3月10日 没有评论

PHP 4.4.1+MySQL 5.1的环境下出现了如下的提示:

File 'c:\mysql\share\charsets\?.conf' not found (Errcode: 22) Character set '#33' is not a compiled character set and is not specified in the 'c:\mysql\share\charsets\Index' file

查阅一番后基本可以确定原因为低版本的PHP和高版本的MySQL之间的兼容性导致的。

最简单的办法是升级PHP到PHP5.3版本即可搞定,未知测试。因服务器不是我配的,不敢乱动,怕搞出麻烦,于是保留低版本的PHP,另寻其他方法。

以下试验了多种网络上查到的解决方法,供大家参考:

阅读全文...

分类: 软件技巧 标签: 5,131次阅读

无觅相关文章插件,快速提升流量