MySQL - 做与不做

1 mysql

我目前正在学习MySQL,并注意到很多不同的做法和注意事项.

有什么地方我可以找到你所经历或从中学到的最佳实践的绝对列表吗?

谢谢你的时间.

bob*_*nce 5

使用InnoDB; 不要使用MyISAM.

(好吧,好吧,除非你必须这样做,通常是由于InnoDB中没有提供全文匹配.即便如此,你最好还是将InnoDB中的规范数据和全文索引放在一个单独的MyISAM searchbait表上,你可以然后进行干预.)

如果需要严格的字符串匹配,请使用BINARY列,否则默认情况下会进行不区分大小写的比较.为字符集正确设置排序规则(最好:UTF-8)或不区分大小写的比较会表现得很奇怪.

如果希望代码可移植,请使用ANSI SQL模式.ANSI_QUOTES允许您使用标准的双引号"identifier"(表,列等)名称来避免保留字; MySQL的默认方式是反引用,但它们是非标准的,在其他地方不起作用.如果你不能控制这样的设置,省略任何标识符引用并尽量避免保留字(这很烦人,因为在不同的数据库中有很多).

使用您的数据访问层的MySQL字符串文字转义或查询参数化功能; 不要试图自己创建转义文字,因为它们的规则比你想象的复杂得多,如果你弄错了,你就有了一个SQL注入漏洞.

当您选择对GROUP BY列没有功能依赖性的列时,不要依赖MySQL返回特定行的行为.这是其他数据库中的错误,可以轻松隐藏仅在数据库中的内部存储发生更改时弹出的错误,从而导致返回不同的行.

SELECT productid, MIN(cost)
FROM products
GROUP BY productcategory  -- this doesn't do what you think
Run Code Online (Sandbox Code Playgroud)