保护开源的数据库系统MYSQL和PostgreSQL免遭SQL injection攻击。

官方站点:  http://www.greensql.net/

GreenSQL is an Open Source database firewall used to protect databases from SQL injection attacks. GreenSQL works as a proxy and has built in support for MySQL. The logic is based on evaluation of ...

I had a latin1 collated MySQL 4.1 db that contained both English and Japanese text. I dumped the data and then tried to migrate it into my new MySQL 5.0.26 installation. Of course being a bit lazy I did not take the time to check things out properly and was not surprised to find that all Japanese te ...

2.6 根据数据项的键排序
Q: 针对某条件逻辑排序,如: job = 'SALESMAN' 按照 comm 排序,否则根据 sal 排序
A: 使用 case 表达式来动态改变如何对结果排序

select ename, sal, job, comm
from emp
order by case when job = 'SALESMAN' then comm else sal end

ename   | sal   |      job      | comm
--------+------+-----------+ ...

2.5 处理排序空值
     Q: 指定是否将空值字段行排在最后
     A: 使用 case 表达式在 order by 子句中增加标记列; 或 RDBMS 特殊方案

     DB2, MySQL, PostgreSQL, SQL Server, Oracle
     /* all nulls last */
     select ename, sal, comm, is_null
        from (
     select ename, sal, comm,
           case when com ...

2.4 对字母数字混合的数据排序
     Q: 现有字母和数字混合的数据,按照数字或字母部分来排序,建立如下视图:

     create view V
     as
     select ename ||' '|| deptno as data
        from emp ;

     select * from V ;

   data      
-----------
SMITH 20
ALLEN 30
WARD 30
JONES 20
MARTIN 30
BLAKE 30
CLARK 10
  ...

2.3 按子串排序
     Q: 按照字符串某一部分排序, 如按照某字段值的最后两个字符排序
     A: 使用 DBMS 内置函数

     DB2, MySQL, Oracle, PostgreSQL ( substr() )
     SELECT ename, job
        FROM emp
      ORDER BY substr(job, length(job) - 2)

+--------+-----------+
| ename   | job          |
+--------+--------- ...

     Q: 需要返回匹配特定子串或模式的行,比如在部门 10 和 20 中,返回名字有一个 "I", 或者职务中带有 "ER" 的员工行
     A: 使用 LIKE 运算符, 通配符 "%"

     Oracle,MySQL,PostgreSQL,MSSQL,DB2 (使用 LIKE)
     SELECT ename, job
        FROM emp
      WHERE deptno IN (10, 20)
         AND (ename LIKE '%I%' OR job LIK ...

     Q: 用非空值替换空值
     A: 使用 COALESCE

     Oracle,MySQL,PostgreSQL,MSSQL,DB2 (使用COALESCE())
     SELECT coalesce(comm, 0)
        FROM emp

+-------------------+
| coalesce(comm, 0) |
+-------------------+
| 0                         |
| 300                      |
| 500                      |
| 0                         ...

     Q: 查找某列值为空的行
     A: 使用 IS NULL,或者 IS NOT NULL

     Oracle,MySQL,PostgreSQL,MSSQL,DB2 (使用IS NULL, IS NOT NULL)
     SELECT *
        FROM emp
      WHERE comm IS NULL

Tables Used:
     for MySQL
           http://www.hooto.com/home/rui/doc/archives/5089.html
     for PostgreSQL
           http ...

     Q: 从表中随机返回 n 条记录,每次执行返回不同的结果集
     A: 使用DBMS内置函数生成随机数值,在 ORDER BY 中使用该函数随机排序

     DB2 ( 使用 RAND 内置函数 )
     SELECT ename, job
        FROM emp
      ORDER BY rand() FETCH FIRST 5 ROWS ONLY

     MySQL ( 使用 RAND 内置函数 )
     SELECT ename, job
        F ...