MySQL for Win7服务无法启动并提示1067错误的解决方案

安装MySQL for Win7,配置好最后点击 Execute 按钮了,但是进行不到 Start service 这一步。检查了下 MySQL 系统服务已添加,但是无法启动,手工也不行。这时候用事件查看器可以看到程序事件里有几个来自于 MySQL 的错误:

Plugin ‘InnoDB’ registration as a STORAGE ENGINE failed.
Unknown/unsupported table type: INNODB

原来是因为该版本 MySQL 默认使用了支持事物的 INNODB 引擎,打开 my.ini 文件,在 MySQL 的安装文件夹, 如 X:MySQL 中,看到:

default-storage-engine=InnoDB

解决办法是把该设置改为

default-storage-engine=MyISAM

仍然使用 MyISAM 作为默认的数据库引擎,保存 my.ini 文件,然后手工启动 MySQL 服务成功。

phpmyadmin导入sql文件超时的解决办法

有时候导入比较大的.sql文件时会出现超时而导致导入数据不全的问题,错误信息如下:

Fatal error: Maximum execution time of 300 seconds exceeded in G:\xampp\phpMyAdmin\libraries\import\sql.php on line XXX,通过以下方法可以解决:

修改phpMyAdmin\config.inc.php

把$cfg['ExecTimeLimit'] = 300;修改为$cfg['ExecTimeLimit'] = 3600;如果没有这一行添加就行了

如果这样还不能解决的话再修改php\php.ini

修改max_execution_time和max_input_time的值为更大值

最后别忘了重启apache和mysql哦。。。

解决phpMyAdmin导入mysql数据库超过2M的问题

在恢复一个网站的时候,由于我以前用phpMyAdmin导出的数据库文件超过2M而无法导入,由于又换了服务器,以前的数据都已经删了,没法再备份。
在网上搜索解决办法,有很多是修改php.ini配置文件,查找到php.ini配置文件里的“upload_max_filesize”;“memory_limit”;“post_max_size”三处,把值修改成稍大于导入的mysql数据库文件,这样重启PHP环境就可以成功导入数据库。但是对于使用虚拟主机的用户来说,没有服务器最高管理权限,无法修改php.ini文件。
于是我就自己想办法,首先在本地建一个php环境(现在有很多php环境配置安装包,我用的是phpnow),phpnow配置php环境成功后默认可导入的数据库限制是32M,当然你可以按照上面的方法修改php.ini文件,这样就可以导入你的mysql数据库文件到本地数据库;然后我们再把本地数据库导出,如果数据表不是非常庞杂的话可以用phpMyAdmin分段导出,但是如果数据表很多的话可以采用帝国备份王这个工具(这个工具安装很方便,只需要在第一次使用时配置链接好数据库就可以了),按“文件大小”或“记录数”两种分组备份方式导出数据库,导出的数据库是以php格式的文件形式存放的;最后,我们把帝国备份王安装到虚拟主机上,并把刚才在本地导出的数据库文件利用帝国备份王恢复到虚拟主机的数据库,这样数据库文件便成功导入了。
另外,在网上还有一个方法就是在phpMyAdmin目录下新建一个目录,如:einsect,再编辑phpMyAdmin目录下librariesconfig.default.php文件,查找$cfg['UploadDir'],将其值写为新建目录的名称,如下所示:

程序代码

将要导入到数据库的文件上传到刚才新建的einsect文件夹中,登录phpMyAdmin,选择你的数据库,在右侧窗口中点击“import(导入)”,这时你会发现导入界面中多了一个“网站服务器上载目录”选项,点击下拉箭头,列表里会有刚才上传的文件名称列表。选中文件,点击右下角的“执行”按钮,即可完成数据库文件的导入。

order by与limit的先后顺序

在mysql中,要先order by再limit。

limit后面的两个参数中,如果offset可以省略,默认为0;如果两个参数同时使用,offset在前,amount在后,且两个参数之间有逗号。

切记切记!

mysql替换语句 部分替换

update tabel(表名) set Fields(字段名)=replace( Fields,’原内容’,'替换成的内容’)

UPDATE `cdb_pms`

SET `subject` = REPLACE(`subject`, ‘Welcome to’, ‘欢迎光临’)

WHERE INSTR(`subject`,’Welcome to’) > 0
替换cdb_posts表的message字段,将“viewthread.php?tid=3989”替换成“viewthread.php?tid=16546”

UPDATE `cdb_posts`

SET `message`= REPLACE(`message`, ‘viewthread.php?tid=3989′, ‘viewthread.php?tid=16546′)

WHERE INSTR(`message`,’viewthread.php?tid=3989′) > 0 ;

删除所有的空格

UPDATE `es_product`   SET `pro_pub_time` = TRIM(`pro_pub_time`)

lower或者upper

删除所有饱含’['或者']‘或者’.'的字符

UPDATE `es_product`   SET `pro_pub_time` = REPLACE(`pro_pub_time`, ‘[','')   WHERE INSTR(`pro_pub_time`,'[') > 0

UPDATE `es_product`   SET `pro_pub_time` = REPLACE(`pro_pub_time`, ']‘,”)   WHERE INSTR(`pro_pub_time`,’]') > 0

UPDATE `es_product`   SET `pro_pub_time` = REPLACE(`pro_pub_time`, ‘.’,'-’)   WHERE INSTR(`pro_pub_time`,’.') > 0

替换所有含中文’-'的为英文’-’

UPDATE `es_product`   SET `pro_pub_time` = REPLACE(`pro_pub_time`, ‘-’,'-’)   WHERE INSTR(`pro_pub_time`,’-’) > 0

将所有的年月都替换成’-’

UPDATE `es_product`   SET `pro_pub_time` = REPLACE(`pro_pub_time`, ‘年’,'-’)   WHERE INSTR(`pro_pub_time`,’年’) > 0

UPDATE `es_product`   SET `pro_pub_time` = REPLACE(`pro_pub_time`, ‘月’,'-’)   WHERE INSTR(`pro_pub_time`,’月’) > 0

将所有’2005-04-’这种类型的替换成’2005-04-01′

UPDATE `es_product`   SET `pro_pub_time` = CONCAT( `pro_pub_time`, ’01′)   WHERE SUBSTRING_INDEX( `pro_pub_time`, ‘-’, -1) = ” AND LENGTH(`pro_pub_time`) > 0 AND LENGTH(`pro_pub_time`) > 5

将所有’2005-’这种类型替换成’2005-01-01′

UPDATE `es_product`   SET `pro_pub_time` = CONCAT( `pro_pub_time`, ’01-01′) WHERE INSTR(`pro_pub_time`,’-') > 0 AND   LENGTH(`pro_pub_time`) = 5

将所有 饱含’-',但是位数小于8的改成追加’-01′

UPDATE `es_product`   SET `pro_pub_time` = CONCAT( `pro_pub_time`, ‘-01′) WHERE INSTR(`pro_pub_time`,’-') > 0 AND   LENGTH(`pro_pub_time`) < 8

将所有’2005′这样的改成’2005-01-01′

UPDATE `es_product`   SET `pro_pub_time` = CONCAT(`pro_pub_time`,’-01-01′) WHERE INSTR(`pro_pub_time`,’-') = 0 AND   LENGTH(`pro_pub_time`) = 4

最后将所有’2005-01-01′格式化成’2005年01月’

UPDATE `es_product`   SET `pro_pub_time` = DATE_FORMAT(`pro_pub_time`,’%Y年%m月’) WHERE INSTR(`pro_pub_time`,’-') > 0

批量替换 MySQL 指定字段中的字符串是数据库mysql替换语句 部分替换应用中很常见的需求,但是有很多初学者在遇到这种需求时,通常都是用脚本来实现;其实,MySQL 内置的有批量替换语法,效率也会高很多;想了解具体方法mysql替换语句 部分替换,继续阅读本文吧 :)

批量替换的具体语法是:

Code:

UPDATE 表名 SET

指定字段 = replace(指定字段, ’要替换的字符串’, ’想要的字符串’)

WHERE 条件;

如果你想把 article 表中 ID 小于5000的记录,content 字段中“解决”替换成“解放”,那么语法就是:

Code:

UPDATE article SET

content = replace(content, ’解决’, ’解放’)

WHERE ID<5000;

UPDATE `fengsh_shoplist`

SET `s_clickurl`= REPLACE(`s_clickurl`, ’15252835′, ’10190773′)

MYSQL查询多余重复的记录

(一)
1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断
select * from people
where peopleId in (select  peopleId  from  people  group  by  peopleId  having  count(peopleId) > 1)

2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
delete from people
where peopleId  in (select  peopleId  from people  group  by  peopleId    having  count(peopleId) > 1)
and rowid not in (select min(rowid) from  people  group by peopleId  having count(peopleId )>1)

3、查找表中多余的重复记录(多个字段)
select * from vitae a
where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq  having count(*) > 1)

4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
delete from vitae a
where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录
select * from vitae a
where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

(二)
比方说
在A表中存在一个字段“name”,
而且不同记录之间的“name”值有可能会相同,
现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项;
Select Name,Count(*) From A Group By Name Having Count(*) > 1

如果还查性别也相同大则如下:
Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1

(三)
方法一

declare @max integer,@id integer

declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) >; 1

open cur_rows

fetch cur_rows into @id,@max

while @@fetch_status=0

begin

select @max = @max -1

set rowcount @max

delete from 表名 where 主字段 = @id

fetch cur_rows into @id,@max

end

close cur_rows

set rowcount 0

方法二

有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。

1、对于第一种重复,比较容易解决,使用

select distinct * from tableName

就可以得到无重复记录的结果集。

如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除

select distinct * into #Tmp from tableName

drop table tableName

select * into tableName from #Tmp

drop table #Tmp

发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。

2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下

假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集

select identity(int,1,1) as autoID, * into #Tmp from tableName

select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID

select * from #Tmp where autoID in(select autoID from #tmp2)

最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)

(四)
查询重复

select * from tablename where id in (

select id from tablename

group by id

having count(id) > 1

)

MYSQL的COUNT函数

数据库经常用于回答这个问题,“某个类型的数据在表中出现的频度?”例如,你可能想要知道你有多少宠物,或每位主人有多少宠物,或你可能想要对你的动物进行各种类型的普查。

计算你拥有动物的总数目与“在pet表中有多少行?”是同样的问题,因为每个宠物有一个记录。COUNT(*)函数计算行数,所以计算动物数目的查询应为:

mysql> SELECT COUNT(*) FROM pet;
+----------+
| COUNT(*) |
+----------+
|        9 |
+----------+

在前面,你检索了拥有宠物的人的名字。如果你想要知道每个主人有多少宠物,你可以使用COUNT( )函数:

mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner;
+--------+----------+
| owner  | COUNT(*) |
+--------+----------+
| Benny  |        2 |
| Diane  |        2 |
| Gwen   |        3 |
| Harold |        2 |
+--------+----------+

注意,使用GROUP BY对每个owner的所有记录分组,没有它,你会得到错误消息:

mysql> SELECT owner, COUNT(*) FROM pet;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)
with no GROUP columns is illegal if there is no GROUP BY clause

COUNT( )和GROUP BY以各种方式分类你的数据。下列例子显示出进行动物普查操作的不同方式。

每种动物的数量:

mysql> SELECT species, COUNT(*) FROM pet GROUP BY species;
+---------+----------+
| species | COUNT(*) |
+---------+----------+
| bird    |        2 |
| cat     |        2 |
| dog     |        3 |
| hamster |        1 |
| snake   |        1 |
+---------+----------+

每种性别的动物数量:

mysql> SELECT sex, COUNT(*) FROM pet GROUP BY sex;
+------+----------+
| sex  | COUNT(*) |
+------+----------+
| NULL |        1 |
| f    |        4 |
| m    |        4 |
+------+----------+

(在这个输出中,NULL表示“未知性别”。)

按种类和性别组合的动物数量:

mysql> SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex;

+---------+------+----------+
| species | sex  | COUNT(*) |
+---------+------+----------+

Mysql数据库like和REPLACE混用来实现字符查找替换

学习最好的方法莫过于实践,最快的途径莫过于示例,这段时间网站搬家,迫使我不断去看一些SQL操作方法,最终记载于此,以便将来参考。

1、时间操作

例:将GMT时间更改为GMT+8,可用INTERVAL把一段时间加到一个字段上。

UPDATE `wpcn_posts`
SET `post_date` = `post_date_gmt` + INTERVAL 8 HOUR
WHERE `post_date_gmt` = `post_date`

本例是为了对付Bo-Blog搬家到WP时大部分时间记录都没有被正确转换到GMT+8时区的问题。

2、字符查找替换

例:将某个图片的错误文件名更改为正确文件名。

UPDATE `wpcn_comments`
SET `comment_content` =
REPLACE ( `comment_content`, 'emot/ok', 'emot/pig' )
WHERE `comment_content` LIKE '%emot/ok%'

本例是为了对付Bo-Blog的pig.gif图片文件名被错误替换为ok.gif的问题,用到了REPLACE函数和LIKE操作符,注意LIKE后面的字段用%%匹配,而非*。

—————————————————-
继续阅读…