<!DOCTYPE HTML>
< html lang = "" >
< head >
< meta charset = "UTF-8" >
< meta content = "text/html; charset=utf-8" http-equiv = "Content-Type" >
< title > ( 三) SQL语句 · GitBook< / title >
< meta http-equiv = "X-UA-Compatible" content = "IE=edge" / >
< meta name = "description" content = "" >
< meta name = "generator" content = "GitBook 3.2.3" >
< link rel = "stylesheet" href = "../gitbook/style.css" >
< link rel = "stylesheet" href = "../gitbook/gitbook-plugin-prism/prism.css" >
< link rel = "stylesheet" href = "../gitbook/gitbook-plugin-search/search.css" >
< link rel = "stylesheet" href = "../gitbook/gitbook-plugin-fontsettings/website.css" >
< link rel = "stylesheet" href = "../styles/website.css" >
< meta name = "HandheldFriendly" content = "true" / >
< meta name = "viewport" content = "width=device-width, initial-scale=1, user-scalable=no" >
< meta name = "apple-mobile-web-app-capable" content = "yes" >
< meta name = "apple-mobile-web-app-status-bar-style" content = "black" >
< link rel = "apple-touch-icon-precomposed" sizes = "152x152" href = "../gitbook/images/apple-touch-icon-precomposed-152.png" >
< link rel = "shortcut icon" href = "../gitbook/images/favicon.ico" type = "image/x-icon" >
< link rel = "next" href = "ORM映射.html" / >
< link rel = "prev" href = "索引规约.html" / >
< / head >
< body >
< div class = "book" >
< div class = "book-summary" >
< div id = "book-search-input" role = "search" >
< input type = "text" placeholder = "Type to search" / >
< / div >
< nav role = "navigation" >
< ul class = "summary" >
< li class = "chapter " data-level = "1.1" data-path = "../" >
< a href = "../" >
前言
< / a >
< / li >
< li class = "chapter " data-level = "1.2" >
< span >
一、编程规约
< / span >
< ul class = "articles" >
< li class = "chapter " data-level = "1.2.1" data-path = "../编程规约/命名风格.html" >
< a href = "../编程规约/命名风格.html" >
(一)命名风格
< / a >
< / li >
< li class = "chapter " data-level = "1.2.2" data-path = "../编程规约/常量定义.html" >
< a href = "../编程规约/常量定义.html" >
(二)常量定义
< / a >
< / li >
< li class = "chapter " data-level = "1.2.3" data-path = "../编程规约/代码格式.html" >
< a href = "../编程规约/代码格式.html" >
(三)代码格式
< / a >
< / li >
< li class = "chapter " data-level = "1.2.4" data-path = "../编程规约/OOP规范.html" >
< a href = "../编程规约/OOP规范.html" >
( 四) OOP规范
< / a >
< / li >
< li class = "chapter " data-level = "1.2.5" data-path = "../编程规约/集合处理.html" >
< a href = "../编程规约/集合处理.html" >
(五)集合处理
< / a >
< / li >
< li class = "chapter " data-level = "1.2.6" data-path = "../编程规约/并发处理.html" >
< a href = "../编程规约/并发处理.html" >
(六)并发处理
< / a >
< / li >
< li class = "chapter " data-level = "1.2.7" data-path = "../编程规约/控制语句.html" >
< a href = "../编程规约/控制语句.html" >
(七)控制语句
< / a >
< / li >
< li class = "chapter " data-level = "1.2.8" data-path = "../编程规约/注释规约.html" >
< a href = "../编程规约/注释规约.html" >
(八)注释规约
< / a >
< / li >
< / ul >
< / li >
< li class = "chapter " data-level = "1.3" >
< span >
二、异常日志
< / span >
< ul class = "articles" >
< li class = "chapter " data-level = "1.3.1" data-path = "../异常日志/异常处理.html" >
< a href = "../异常日志/异常处理.html" >
(一)异常处理
< / a >
< / li >
< li class = "chapter " data-level = "1.3.2" data-path = "../异常日志/日志规约.html" >
< a href = "../异常日志/日志规约.html" >
(二)日志规范
< / a >
< / li >
< li class = "chapter " data-level = "1.3.3" data-path = "../异常日志/其他.html" >
< a href = "../异常日志/其他.html" >
(三)其他
< / a >
< / li >
< / ul >
< / li >
< li class = "chapter " data-level = "1.4" data-path = "../单元测试.html" >
< a href = "../单元测试.html" >
三、单元测试
< / a >
< / li >
< li class = "chapter " data-level = "1.5" data-path = "../安全规约.html" >
< a href = "../安全规约.html" >
四、安全规约
< / a >
< / li >
< li class = "chapter " data-level = "1.6" >
< span >
五、MySQL数据库
< / span >
< ul class = "articles" >
< li class = "chapter " data-level = "1.6.1" data-path = "建表规约.html" >
< a href = "建表规约.html" >
(一)建表规约
< / a >
< / li >
< li class = "chapter " data-level = "1.6.2" data-path = "索引规约.html" >
< a href = "索引规约.html" >
(二)索引规约
< / a >
< / li >
< li class = "chapter active" data-level = "1.6.3" data-path = "SQL语句.html" >
< a href = "SQL语句.html" >
( 三) SQL语句
< / a >
< / li >
< li class = "chapter " data-level = "1.6.4" data-path = "ORM映射.html" >
< a href = "ORM映射.html" >
( 四) ORM映射
< / a >
< / li >
< / ul >
< / li >
< li class = "chapter " data-level = "1.7" >
< span >
六、工程结构
< / span >
< ul class = "articles" >
< li class = "chapter " data-level = "1.7.1" data-path = "../工程结构/应用分层.html" >
< a href = "../工程结构/应用分层.html" >
(一)应用分层
< / a >
< / li >
< li class = "chapter " data-level = "1.7.2" data-path = "../工程结构/二方库依赖.html" >
< a href = "../工程结构/二方库依赖.html" >
(二)二方库依赖
< / a >
< / li >
< li class = "chapter " data-level = "1.7.3" data-path = "../工程结构/服务器.html" >
< a href = "../工程结构/服务器.html" >
(三)服务器
< / a >
< / li >
< / ul >
< / li >
< li class = "chapter " data-level = "1.8" data-path = "../版本历史.html" >
< a href = "../版本历史.html" >
附1: 版本历史
< / a >
< / li >
< li class = "chapter " data-level = "1.9" data-path = "../本手册专有名词.html" >
< a href = "../本手册专有名词.html" >
附2: 本手册专有名词
< / a >
< / li >
< li class = "divider" > < / li >
< li >
< a href = "https://www.gitbook.com" target = "blank" class = "gitbook-link" >
Published with GitBook
< / a >
< / li >
< / ul >
< / nav >
< / div >
< div class = "book-body" >
< div class = "body-inner" >
< div class = "book-header" role = "navigation" >
<!-- Title -->
< h1 >
< i class = "fa fa-circle-o-notch fa-spin" > < / i >
< a href = ".." > ( 三) SQL语句< / a >
< / h1 >
< / div >
< div class = "page-wrapper" tabindex = "-1" role = "main" >
< div class = "page-inner" >
< div id = "book-search-results" >
< div class = "search-noresults" >
< section class = "normal markdown-section" >
< h2 id = "三-sql语句" > (三 ) SQL语 句 < / h2 >
< ol >
< li > 【 强 制 】 不 要 使 用 count(列 名 )或 count(常 量 )来 替 代 count(< em > ), count(< / em > )是 SQL92定 义 的 标 准 统 计 行 数 的 语 法 , 跟 数 据 库 无 关 , 跟 NULL和 非 NULL无 关 。
< br > < span style = "color:orange" > 说 明 < / span > : count(*)会 统 计 值 为 NULL的 行 , 而 count(列 名 )不 会 统 计 此 列 为 NULL值 的 行 。 < / li >
< li > 【 强 制 】 count(distinct col) 计 算 该 列 除 NULL之 外 的 不 重 复 行 数 , 注 意 count(distinct col1, col2) 如 果 其 中 一 列 全 为 NULL, 那 么 即 使 另 一 列 有 不 同 的 值 , 也 返 回 为 0。 < / li >
< li > 【 强 制 】 当 某 一 列 的 值 全 是 NULL时 , count(col)的 返 回 结 果 为 0, 但 sum(col)的 返 回 结 果 为 NULL, 因 此 使 用 sum()时 需 注 意 NPE问 题 。
< br > < span style = "color:green" > 正 例 < / span > : 可 以 使 用 如 下 方 式 来 避 免 sum的 NPE问 题 : < pre class = "language-" > SELECT IF(ISNULL(SUM(g)),0,SUM(g)) FROM table; < / pre > < / li >
< li > 【 强 制 】 使 用 < code > ISNULL()< / code > 来 判 断 是 否 为 NULL值 。 说 明 : NULL与 任 何 值 的 直 接 比 较 都 为 NULL。 < br > 1) < code > NULL< > NULL< / code > 的 返 回 结 果 是 NULL, 而 不 是 < code > false< / code > 。 < br > 2) < code > NULL=NULL< / code > 的 返 回 结 果 是 NULL, 而 不 是 < code > true< / code > 。 < br > 3) < code > NULL< > 1< / code > 的 返 回 结 果 是 NULL, 而 不 是 < code > true< / code > 。 < / li >
< li > 【 强 制 】 在 代 码 中 写 分 页 查 询 逻 辑 时 , 若 count为 0应 直 接 返 回 , 避 免 执 行 后 面 的 分 页 语 句 。 < / li >
< li > 【 强 制 】 不 得 使 用 外 键 与 级 联 , 一 切 外 键 概 念 必 须 在 应 用 层 解 决 。
< br > < span style = "color:orange" > 说 明 < / span > : 以 学 生 和 成 绩 的 关 系 为 例 , 学 生 表 中 的 student_id是 主 键 , 那 么 成 绩 表 中 的 student_id则 为 外 键 。 如 果 更 新 学 生 表 中 的 student_id, 同 时 触 发 成 绩 表 中 的 student_id更 新 , 即 为 级 联 更 新 。 外 键 与 级 联 更 新 适 用 于 单 机 低 并 发 , 不 适 合 分 布 式 、 高 并 发 集 群 ; 级 联 更 新 是 强 阻 塞 , 存 在 数 据 库 更 新 风 暴 的 风 险 ; 外 键 影 响 数 据 库 的 插 入 速 度 。 < / li >
< li > 【 强 制 】 禁 止 使 用 存 储 过 程 , 存 储 过 程 难 以 调 试 和 扩 展 , 更 没 有 移 植 性 。 < / li >
< li > 【 强 制 】 数 据 订 正 ( 特 别 是 删 除 、 修 改 记 录 操 作 ) 时 , 要 先 select, 避 免 出 现 误 删 除 , 确 认 无 误 才 能 执 行 更 新 语 句 。 < / li >
< li > 【 推 荐 】 in操 作 能 避 免 则 避 免 , 若 实 在 避 免 不 了 , 需 要 仔 细 评 估 in后 边 的 集 合 元 素 数 量 , 控 制 在 1000个 之 内 。 < / li >
< li > 【 参 考 】 如 果 有 全 球 化 需 要 , 所 有 的 字 符 存 储 与 表 示 , 均 以 utf-8编 码 , 注 意 字 符 统 计 函 数 的 区 别 。
< br > < span style = "color:orange" > 说 明 < / span > :
< pre class = "language-" > SELECT LENGTH(" 轻 松 工 作 " ); 返 回 为 12
SELECT CHARACTER_LENGTH(" 轻 松 工 作 " ); 返 回 为 4< / pre >
如 果 需 要 存 储 表 情 , 那 么 选 择 utf8mb4来 进 行 存 储 , 注 意 它 与 utf-8编 码 的 区 别 。 < / li >
< li > 【 参 考 】 TRUNCATE TABLE 比 DELETE 速 度 快 , 且 使 用 的 系 统 和 事 务 日 志 资 源 少 , 但 TRUNCATE无 事 务 且 不 触 发 trigger, 有 可 能 造 成 事 故 , 故 不 建 议 在 开 发 代 码 中 使 用 此 语 句 。
< br > < span style = "color:orange" > 说 明 < / span > : TRUNCATE TABLE 在 功 能 上 与 不 带 WHERE 子 句 的 DELETE 语 句 相 同 。 < / li >
< / ol >
< / section >
< / div >
< div class = "search-results" >
< div class = "has-results" >
< h1 class = "search-results-title" > < span class = 'search-results-count' > < / span > results matching "< span class = 'search-query' > < / span > "< / h1 >
< ul class = "search-results-list" > < / ul >
< / div >
< div class = "no-results" >
< h1 class = "search-results-title" > No results matching "< span class = 'search-query' > < / span > "< / h1 >
< / div >
< / div >
< / div >
< / div >
< / div >
< / div >
< a href = "索引规约.html" class = "navigation navigation-prev " aria-label = "Previous page: (二)索引规约" >
< i class = "fa fa-angle-left" > < / i >
< / a >
< a href = "ORM映射.html" class = "navigation navigation-next " aria-label = "Next page: ( 四) ORM映射" >
< i class = "fa fa-angle-right" > < / i >
< / a >
< / div >
< script >
var gitbook = gitbook || [];
gitbook.push(function() {
gitbook.page.hasChanged({"page":{"title":"( 三) SQL语句","level":"1.6.3","depth":2,"next":{"title":"( 四) ORM映射","level":"1.6.4","depth":2,"path":"MySQL数据库/ORM映射.md","ref":"MySQL数据库/ORM映射.md","articles":[]},"previous":{"title":"(二)索引规约","level":"1.6.2","depth":2,"path":"MySQL数据库/索引规约.md","ref":"MySQL数据库/索引规约.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["book-summary-scroll-position-saver","github","prism","-sharing","-highlight"],"pluginsConfig":{"github":{"url":"https://github.com/alibaba/p3c"},"book-summary-scroll-position-saver":{},"prism":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css"}},"file":{"path":"MySQL数据库/SQL语句.md","mtime":"2018-01-13T07:52:52.580Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-01-15T14:41:43.583Z"},"basePath":"..","book":{"language":""}});
});
< / script >
< / div >
< script src = "../gitbook/gitbook.js" > < / script >
< script src = "../gitbook/theme.js" > < / script >
< script src = "../gitbook/gitbook-plugin-book-summary-scroll-position-saver/book-summary-scroll-position-saver.js" > < / script >
< script src = "../gitbook/gitbook-plugin-github/plugin.js" > < / script >
< script src = "../gitbook/gitbook-plugin-search/search-engine.js" > < / script >
< script src = "../gitbook/gitbook-plugin-search/search.js" > < / script >
< script src = "../gitbook/gitbook-plugin-lunr/lunr.min.js" > < / script >
< script src = "../gitbook/gitbook-plugin-lunr/search-lunr.js" > < / script >
< script src = "../gitbook/gitbook-plugin-fontsettings/fontsettings.js" > < / script >
< / body >
< / html >