幸福飞过海 - DB db,mysql,postgresql,redis,mariadb,memcache... 2013-12-06T09:39:42+00:00 Typecho https://fengqi.me/feed/atom/category/db/ <![CDATA[mysql非正常关闭导致InnoDB发生crash recover导致无法启动的解决办法]]> https://fengqi.me/db/174.html 2013-12-06T09:39:42+00:00 2013-12-06T09:39:42+00:00 风起 http://fengqi.me 参考链接: mysql非正常关闭导致InnoDB发生crash recover导致无法启动的解决办法

很暴力的解决, 寻找更好的方法...

]]>
<![CDATA[[转载]MySQL 中将一个表的数据插入另外一个表的方法]]> https://fengqi.me/db/155.html 2013-08-28T04:25:00+00:00 2013-08-28T04:25:00+00:00 风起 http://fengqi.me 参考地址: MySQL 中将一个表的数据插入另外一个表的方法

如果2张表的字段一致,并且希望插入全部数据,可以用这种方法:

INSERT INTO 目标表 SELECT  * FROM 来源表;

比如要将 articles 表插入到 newArticles 表中,则是:

INSERT INTO newArticles SELECT  * FROM articles;

如果只希望导入指定字段,可以用这种方法:

INSERT INTO 目标表 (字段1, 字段2, ...) SELECT  字段1, 字段2, ...  FROM 来源表;

注意字段的顺序必须一致。

]]>
<![CDATA[[记录]mysql的in查询, 查询结果按in集合顺序显示]]> https://fengqi.me/db/151.html 2013-08-22T08:42:00+00:00 2013-08-22T08:42:00+00:00 风起 http://fengqi.me 需求来自, 某些特定场景, 比如人工推荐, 编辑后台输入一串id, 前台需要按输入的id顺序显示.

mysql 的in语法如下:

SELECT * FROM `single` WHERE `single_id` IN ('987', '256', '381', '586');

正常情况下, 取出的数据, 会按照 256, 381, 586, 987排序, 而我需要的是987, 256, 381, 586.

所以需要对sql进行改造:

SELECT * FROM `single` WHERE `single_id` IN ('987', '256', '381', '586') ORDER BY FIELD (`single_id`, '987', '256', '381', '586'); 

这样就会按照in集合的顺序返回, 但是同时也带来一个问题:EXPLAIN会发现Using filesort, 大多数情况下这是sql语句性能低下的代表, 所以建议非特殊场景不要使用, 至于真正损失的性能, 有待测试.

另外, 也可以直接IN, 然后程序排序, 谁的综合效率谁更高呢??? 同样有待测试.

]]>
<![CDATA[[转载]mysql 给有重复记录的表添加唯一索引]]> https://fengqi.me/db/88.html 2012-08-07T01:08:00+00:00 2012-08-07T01:08:00+00:00 风起 http://fengqi.me 原文作者: 不详
转载地址: [[MySQL管理] mysql 给有重复记录的表添加唯一索引](http://bbs.linuxtone.org/forum.php?mod=viewthread&tid=7917)

不希望数据表中有重复记录的时候我们可以给表添加一个联合唯一索引,例如,user表中有user_id,user_name两个字段,如果不希望有两条一摸一样的的user_id和user_name,我们可以给user表添加两个字段的联合唯一索引:

alter table user add unique index(user_id,user_name);

这样当向表中添加相同记录的时候,会返回1062的添加失败信息。但是有一种情况是表中已经有n个重复的记录,这时候我们才想起来要添加唯一索引,再执行上面的操作时,数据库会告诉你已经有重复的记录了,建立索引失败,这时候,我们可以用下面的操作:

alter ignore table user add unique index(user_id,user_name);

[...]

]]>
<![CDATA[[技巧]MYSQL同一个表的两个字段值复制]]> https://fengqi.me/db/72.html 2011-11-15T07:38:00+00:00 2011-11-15T07:38:00+00:00 风起 http://fengqi.me 咳咳, 很简单, 直接贴代码吧, 已经知道的别鄙视我.

UPDATE table SET a=b

把b的值复制给a, 速度不错, 测试使用7w5k条数据, 耗时5.65秒, 还能忍受吧.

]]>