分类 SQL 下的文章

mysql - LOW_PRIORITY 降低写操作的优先级

由于 mysql 默认写操作会优先于读操作,这会造成某些更新非常频繁的字段影响了查询的速度,所以对于类似于点击次数这样的字段,可以用

LOW_PRIORITY

来降低此更新的优先级,让查询操作优先,这样会增加网站读取的速度。在 dz 和 phpwind 中有很多这样的用法。例如:

$db->query("UPDATE LOW_PRIORITY {$tablepre}threads SET views=views+1 WHERE tid='$tid'", 'UNBUFFERED');

这就是 discuz 中记录贴子点击次数的语句。

mysql 删除数据库中的所有的表

前言

在现实中经常碰到数据库版本改动过大,然后需要重新导一遍数据库和数据库中的数据情况。当然你可以直接把原来的数据库直接删除,重新创建一个新的,再导入数据。或者在导出表结构和数据的时候,同时插入 drop 语句。但如今只讨论不想删除原来数据库但是想要删除其中的所有的表的情况

解决方案

网上找了一个 sql,通过查询 information_schma 表,获取对应数据库的表名信息,然后用 concat() 拼接 drop 语句。最后将其查询结果复制出来,再执行一下就删掉了。

以下是查询 sql:

SELECT concat('DROP TABLE IF EXISTS ', table_name, ';') as sentence
FROM information_schema.tables
WHERE table_schema = 'your_database_name';

"Truncated incorrect DOUBLE value: .." 错误解析

在 update 语句中碰到了这个问题 "Truncated incorrect DOUBLE value: .."

第一次遇到这个错误,是比较懵的。

只好去求百度。

网上呼声最高的原因是类型不一致,即表中的字段与设置的值的类型不一致。检查一遍,发现报错的地方并没有类型不一致,字段为varchar,传入的值为字符串。

一圈兜兜转转,不说了,直接上我这种情况的解决方案。

  • 修改了多个列的值而各列之间用逗号连接而不要用 and
  • SQL 语句在拼接字符串时使用函数 CONCAT() 而不要用 +

也就是说,我在 set 设置多个值时,错误的使用了 and。正确的形式应该是英文逗号 ,

Fatal error: Call to undefined function mysqli_result()

本地 php 的 mysql 的数据库连接扩展只能使用 mysqli(可能因为只有 mysqli 扩展,也可能 php7 不再支持mysql)。

针对 mysqli 的一些特性和变化,框架处理的是比较好的,但是现阶段维护的项目是一个基于 destoon B2B 的网站管理系统。内部是直接对 mysqli 扩展方法进行的封装。mysql 是可以使用 mysql_result() 方法的,但是在 mysqli 中这个方法被废弃了。

为了继续使用类似的 mysqli_result() 方法,需要自定义这个方法,或者使用其他方法代替。

自定义方法

    // 修复 mysqli_result() 在 mysqli 中未定义的错误
    function mysqli_result($res, $row, $field) {
        $res->data_seek($row);
        $datarow = $res->fetch_array();
        return $datarow[$field];
    }

mysqli_fetch_array 和 mysqli_fectch_row 的异同

mysqli_fetch_arraymysqli_fectch_row 的异同
相同点,都是获取结果集中的一条。
不同点,mysqli_fetch_array 是对 mysqli_fetch_row 的扩展,可以根据第二个参数的不同,返回不通格式类型的数据。
$resulttype 可取值 MYSQLI_ASSOCMYSQLI_NUMMYSQLI_BOTHmysqli_fetch_row 只返回记录的数据部分。

  • $resulttype = MYSQLI_ASSOC 时,mysqli_fetch_array($query, MYSQLI_ASSOC) 等价于 mysqli_fetch_assoc($query),返回关联数组;
  • $resulttype = MYSQLI_NUM 时,mysqli_fetch_array($query, MYSQLI_NUM) 等价于 mysqli_fetch_row($query),返回数字数组;
  • $resulttype = MYSQLI_BOTH 时,mysqli_fetch_array($query, MYSQLI_BOTH) 返回数字索引和关联索引的结合体。