存档

文章标签 ‘MySQL’

【MySQL】Warning(1265)Data truncated for column ‘XXX’ at row 1的解决方案

2017年6月11日 没有评论

遇到PhpMyAdmin打开所有页面都跳“Warning(1265)Data truncated for column 'XXX' at row 1”

原因:XXX字段定义不正确;我的是因为int字段结果设了默认值Null

解决方案:修改成正确的字段定义;我的将默认值Null去掉改为默认值0就好了

 

分类: 站点建设 标签: 232次阅读

【MySQL】索引优化说明

2017年6月1日 没有评论

总结几点

  1. where条件字段的顺序与索引是否命中无关,只要索引前几个字段都在where条件中即可命中
  2. order by字段顺序与索引条件有关,必须与索引字段顺序一致
  3. 如果有多个单字段索引命中,会变成合并索引,但效率还是会低于直接的复合索引
  4. 查看索引效果,可以用explain关键字加sql语句的方式查看

参考

  1. MySQL 优化之 index merge(索引合并)
  2. 要提高SQL查询效率where语句条件的先后次序应如何写
  3. sql查询调优之where条件排序字段以及limit使用索引的奥秘
分类: 程序开发 标签: 306次阅读

【MySQL】事务与分库分表

2016年7月3日 没有评论

事务

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

分库分表

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

阅读全文...

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

【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,193次阅读

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

2016年7月3日 没有评论

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

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

阅读全文...

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

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,099次阅读

【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,502次阅读

【MySQL】修改时区设置

2011年12月30日 没有评论

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

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

阅读全文...

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

【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,619次阅读

【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,881次阅读

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