最简SELECT语句必须含FROM子句,如SELECT * FROM users;WHERE中数字用纯数字、字符串用单引号;ORDER BY在WHERE后LIMIT前;NULL须用IS NULL判断,不可用=。

SELECT 最简形式怎么写
不加任何修饰的 SELECT 语句只能用于常量或表达式,不能直接查表。比如 SELECT 1 + 1; 或 SELECT NOW(); 是合法的;但 SELECT *; 单独执行会报错 ERROR 1096 (HY000): No tables used。
真正查数据必须带 FROM 子句,哪怕只查一个表:
SELECT * FROM users;
常见错误是漏掉 FROM,尤其在快速测试时容易手误。
WHERE 条件里字符串和数字怎么写才安全
MySQL 会隐式转换,但依赖它容易出问题。比如 WHERE id = '123' 看似没问题,但如果 id 是 BIGINT 类型,而传入超长字符串(如 '123abc'),MySQL 可能截断后匹配,也可能报错,行为不稳定。
正确做法是类型严格对应:
- 数字字段用纯数字字面量:
WHERE age = 25 - 字符串字段用单引号包裹:
WHERE name = '张三' - 避免用双引号,除非已设置
SQL_MODE包含ANSI_QUOTES - 日期建议用标准格式字符串:
WHERE created_at >= '2024-01-01',不要用函数包裹条件(如DATE(created_at) = '2024-01-01')以免索引失效
ORDER BY 和 LIMIT 的位置与性能影响
ORDER BY 必须在 WHERE 之后、LIMIT 之前;LIMIT 必须在最后。顺序写错会直接报语法错误。
系统功能强大、操作便捷并具有高度延续开发的内容与知识管理系统,并可集合系统强大的新闻、产品、下载、人才、留言、搜索引擎优化、等功能模块,为企业部门提供一个简单、易用、开放、可扩展的企业信息门户平台或电子商务运行平台。开发人员为脆弱页面专门设计了防刷新系统,自动阻止恶意访问和攻击;安全检查应用于每一处代码中,每个提交到系统查询语句中的变量都经过过滤,可自动屏蔽恶意攻击代码,从而全面防止SQL注入攻击
性能上要注意:
-
ORDER BY字段如果没有索引,大表排序会非常慢,可能触发Using filesort -
LIMIT 10不代表只扫描 10 行——MySQL 仍需先找到所有满足WHERE的行,再排序取前 10 - 分页深翻(如
LIMIT 10000, 20)效率低,应改用游标方式(基于上一页最大id查询)
SELECT 中的 NULL 和空字符串容易混淆的点
NULL 不等于空字符串 '',也不等于数字 0。用 = 判断 NULL 永远返回 NULL(即 false),必须用 IS NULL 或 IS NOT NULL。
实际查询中常见陷阱:
-
WHERE email = ''查不到NULL邮箱,要分开写:WHERE email = '' OR email IS NULL -
COALESCE(email, '未知')可以把NULL转成默认值,但对''无效 -
聚合函数如
COUNT(email)会忽略NULL,但不会忽略''
建表时就该明确字段是否允许 NULL,避免业务逻辑里反复处理两种“空”状态。









