中山php|最优网络 :中山做网站 中山php建站
最优良人
Category Page for: 数据库
mysql STRICT_TRANS_TABLES严格模式下提示Field 'id' doesn't have a default value
2012/09/26 at 11:42 » Comments (431)
在别的服务器运行我的网站程序的时候,出现了Field 'id' doesn't have a default value 的提示,意思是这个值我没有提交数据,并且数据库结构没有设置默认值,由于对方的mysql服务器开启了STRICT_TRANS_TABLES严格模式,所以报错了 解决方法是: 如果自己的服务器,有权限修改my.ini的话,打开my.ini,查找 sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 修改为 sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 然后重启MYSQL 在别人的虚拟空间上当然不可能实现,所以根本的解决方法还是修改自己的数据结构,把非空的字段加上默认值,以后设计数据库要注意这一点,方便程序的移植 more »移植方便的php数据库操作类,建表增删改查
2012/05/30 at 17:46 » Comments (3)
<?php /** * * 数据操作类 * @author Xiaoqiang * @link // * @copyright Xiaoqiang * @version Svn $Id$ * @package */ class Db { var $links; // 构造函数,初始化数据库(主机,用户名,密码,数据库名) function __construct() { $this->links = mysql_connect(DB_HOST, DB_USER, DB_PWD); if(DEBUG){ mysql_select_db(DB_NAME) or die('ERROR:'.mysql_error()); } else{ mysql_select_db(DB_NAME); } $char_sql = "SET NAMES '" . CHARSET ...more »mysql字符串替换函数replace
2011/08/27 at 23:07 » Comments (323)
mysql替换字符串函数replace可以实现把某字段的某些字符串替换成其他字符串,例如 update dede_addonarticle set body=replace(body,'news/uploads/allimg/c110826','news/uploads/blank.gif?') 可以把dedecms的文章内容表所有的图片链接替换成空白图片,这样就可以去把已经上传的大量图片删除以节省空间了,在对采集回来的数据尤其有用。 more »phpmyadmin里MySQL字符集:cp1252 West European (latin1) ,解决乱码问题
2011/08/26 at 14:54 » Comments (296)
使用虚拟主机空间上的phpmyadmin操作数据库的时候,如果看到phpmyadmin首页上显示的MySQL 字符集为cp1252 West European (latin1),当我们导入数据时就会出现乱码,解决的方法是: 在phpmyadmin首页的右边有个Language选项,把默认的中文 - Chinese simplified-gb2312改成 中文 - Chinese simplified,则左边的MySQL 字符集会变成UTF-8 Unicode (utf8) ,乱码问题得到解决! more »phpmyadmin 默认数据库引擎修改为myisam
2011/08/25 at 12:24 » Comments (356)
phpmyadmin 默认创建的数据库默认的数据库引擎为innodb,如果希望修改为灵活性更高的myisam 在my.ini找到default-storage-engine=innodb,修改为myisam more »Mysql查询数据表中某字段重复出现的次数,并按照次数排序
2011/08/14 at 02:29 » Comments (419)
利用Mysql中的 的聚合函数 count(*) 可以实现这个功能,例如需要查询data表中name出现次数最多的记录,可以先按照group by name分组,用count算出分组里的条数,再按照count排序: select name,count(*) from data group by name order by count(*) DESC limit 1 不加limit限制将返回按照name重复次数排列的数据 more »Mysql Having的用法:对group by之后的分组加限制条件
2011/08/14 at 02:27 » Comments (683)
在使用聚合函数之前,我们可以通过where对查询加限制条件,那么如果在group by之后我们要对分组里面的数据再加限制条件怎么办呢?答案是having。 HAVING子句可以让我们筛选成组后的各组数据. WHERE子句在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前. 而 HAVING子句在聚合后对组记录进行筛选。 having子句出现的数据必须在group by 之后,order by 之后 例如在上一篇中对name按照出现次数排序之后,我们还想只查出名字里面含有lin的数据,可以这样写: select name ,count(*) from data group by name having name like '%lin%' order by couny(*) DESC more »Mysql 子查询的用法
2011/08/14 at 01:00 » Comments (337)
一,子选择基本用法 1,子选择的定义 子迭择允许把一个查询嵌套在另一个查询当中。比如说:一个考试记分项目把考试事件分为考试(T)和测验(Q)两种情形。下面这个查询就能只找出学生们的考试成绩 select * from score where event_id in (select event_id from event where type='T'); 2,子选择的用法(3种) 用子选择来生成一个参考值 在这种情况下,用内层的查询语句来检索出一个数据值,然后把这个数据值用在外层查询语句的比较操作中。比如说,如果要查询表中学生们在某一天的测验成绩,就应该使用一个内层查询先找到这一天的测验的事件号,然后在外层查询语句中用这个事件号在成绩表里面找到学生们的分数记录。具体语句为: select * from score where id=(select event_id from event where date='2002-03-21' and type='Q'); 需要注意的是:在应用这种内层查询的结果主要是用来进行比较操作的分法时,内层查询应该只有一个输出结果才对。看例子,如果想知道哪个美国总统的生日最小,构造下列查询 select * from president where birth=min(birth) 这个查询是错的!因为MySQL不允许在子句里面使用统计函数!min()函数应该有一个确定的参数才能工作!所以我们改用子选择: select ...more »mysql数据库的优化
2011/08/14 at 00:58 » Comments (293)
影响数据库性能的根源: 1,磁盘I/O读取 2,CPU使用率 3,资源竞争 优化的方式: 1,设计优化 2,操作优化 3,使用其他优化技术 1)设计优化: 分类拆分数据量大的表; 选取最适用的字段属性; 索引设计,为经常查询用到的字段建立索引,避免查询时查找其他重复无用的数据,避免了大范围扫描; 2)操作优化: 锁表操作; 尽量避免子查询,将子查询转化成连接查询; where子句查询条件尽量少使用运算操作; A>2与A>=3的效果有很大的区别了,因为A>2时数据库会先找出为2的记录索引再进行比较,而A>=3时ORACLE则直接找到=3的记录索引; ...more »mysql操作符in between
2011/08/14 at 00:57 » Comments (331)
以下三条sql语句的效果是等效的: SELECT * FROM `logs` WHERE id = 1 or id = 2 or id = 3 SELECT * FROM `logs` WHERE id between 1 and 3 SELECT * FROM `logs` WHERE id ...more »