607 lines
471 KiB
HTML
607 lines
471 KiB
HTML
|
<!DOCTYPE html>
|
|||
|
<html><head><title>基础语法</title><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta property="og:title" content="基础语法"/><meta property="og:description" content="SQL 基础语法."/><meta property="og:image" content="https://wiki.7wate.com/static/og-image.png"/><meta property="og:width" content="1200"/><meta property="og:height" content="675"/><link rel="icon" href="../../../static/icon.png"/><meta name="description" content="SQL 基础语法."/><meta name="generator" content="Quartz"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com"/><script async src="https://umami.7wate.com/script.js" data-website-id="c061efdc-95dd-4d21-9d04-a1ffda0a85b9"></script><script>
|
|||
|
var _hmt = _hmt || [];
|
|||
|
(function() {
|
|||
|
var hm = document.createElement("script");
|
|||
|
hm.src = "https://hm.baidu.com/hm.js?94d8ccb156eb7c65abf317e6e01cdba9";
|
|||
|
var s = document.getElementsByTagName("script")[0];
|
|||
|
s.parentNode.insertBefore(hm, s);
|
|||
|
})();
|
|||
|
</script><script async src="https://www.googletagmanager.com/gtag/js?id=G-MHMEL0F832"></script><script>
|
|||
|
(function() {
|
|||
|
window.dataLayer = window.dataLayer || [];
|
|||
|
function gtag() {
|
|||
|
window.dataLayer.push(arguments);
|
|||
|
}
|
|||
|
gtag('js', new Date());
|
|||
|
gtag('config', 'G-MHMEL0F832');
|
|||
|
})();
|
|||
|
</script><link href="../../../index.css" rel="stylesheet" type="text/css" spa-preserve/><link href="https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/katex.min.css" rel="stylesheet" type="text/css" spa-preserve/><link href="https://fonts.googleapis.com/css2?family=IBM Plex Mono&family=Schibsted Grotesk:wght@400;700&family=Source Sans Pro:ital,wght@0,400;0,600;1,400;1,600&display=swap" rel="stylesheet" type="text/css" spa-preserve/><script src="../../../prescript.js" type="application/javascript" spa-preserve></script><script type="application/javascript" spa-preserve>const fetchData = fetch(`../../../static/contentIndex.json`).then(data => data.json())</script></head><body data-slug="Tech/database-system/SQL-语言/基础语法"><div id="quartz-root" class="page"><div id="quartz-body"><div class="left sidebar"><h1 class="page-title "><a href="../../..">📚 X·Eden</a></h1><div class="spacer mobile-only"></div><div class="search "><div id="search-icon"><p>Search</p><div></div><svg tabIndex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search</title><desc id="desc">Search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"></path><circle cx="8" cy="8" r="7"></circle></g></svg></div><div id="search-container"><div id="search-space"><input autocomplete="off" id="search-bar" name="search" type="text" aria-label="Search for something" placeholder="Search for something"/><div id="results-container"></div></div></div></div><div class="darkmode "><input class="toggle" id="darkmode-toggle" type="checkbox" tabIndex="-1"/><label id="toggle-label-light" for="darkmode-toggle" tabIndex="-1"><svg xmlns="http://www.w3.org/2000/svg" xmlnsXlink="http://www.w3.org/1999/xlink" version="1.1" id="dayIcon" x="0px" y="0px" viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xmlSpace="preserve"><title>Light mode</title><path d="M6,17.5C6,16.672,5.328,16,4.5,16h-3C0.672,16,0,16.672,0,17.5 S0.672,19,1.5,19h3C5.328,19,6,18.328,6,17.5z M7.5,26c-0.414,0-0.789,0.168-1.061,0.439l-2,2C4.168,28.711,4,29.086,4,29.5 C4,30.328,4.671,31,5.5,31c0.414,0,0.789-0.168,1.06-0.44l2-2C8.832,28.289,9,27.914,9,27.5C9,26.672,8.329,26,7.5,26z M17.5,6 C18.329,6,19,5.328,19,4.5v-3C19,0.672,18.329,0,17.5,0S16,0.672,16,1.5v3C16,5.328,16.671,6,17.5,6z M27.5,9 c0.414,0,0.789-0.168,1.06-0.439l2-2C30.832,6.289,31,5.914,31,5.5C31,4.672,30.329,4,29.5,4c-0.414,0-0.789,0.168-1.061,0.44 l-2,2C26.168,6.711,26,7.086,26,7.5C26,8.328,26.671,9,27.5,9z M6.439,8.561C6.711,8.832,7.086,9,7.5,9C8.328,9,9,8.328,9,7.5 c0-0.414-0.168-0.789-0.439-1.061l-2-2C6.289,4.168,5.914,4,5.5,4C4.672,4,4,4.672,4,5.5c0,0.414,0.168,0.789,0.439,1.06 L6.439,8.561z M33.5,16h-3c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5h3c0.828,0,1.5-0.672,1.5-1.5S34.328,16,33.5,16z M28.561,26.439C28.289,26.168,27.914,26,27.5,26c-0.828,0-1.5,0.672-1.5,1.5c0,0.414,0.168,0.789,0.439,1.06l2,2 C28.711,30.832,29.086,31,29.5,31c0.828,0,1.5-0.672,1.5-1.5c0-0.414-0.168-0.789-0.439-1.061L28.561,26.439z M17.5,29 c-0.829,0-1.5,0.672-1.5,1.5v3c0,0.828,0.671,1.5,1.5,1.5s1.5-0.672,1.5-1.5v-3C19,29.672,18.329,29,17.5,29z M17.5,7 C11.71,7,7,11.71,7,17.5S11.71,28,17.5,28S28,23.29,28,17.5S23.29,7,17.5,7z M17.5,25c-4.136,0-7.5-3.364-7.5-7.5 c0-4.136,3.364-7.5,7.5-7.5c4.136,0,7.5,3.364,7.5,7.5C25,21.636,21.636,25,17.5,25z"></path></svg></label><label id="toggle-label-dark" for="darkmode-toggle" tabIndex="-1"><svg xmlns="http://www.w3.org/2000/svg" xmlnsXlink="http://www.w3.org/1999/xlink" version="1.1" id="nightIcon" x="0px" y="0px" viewBox="0 0 100 100" style="enable-background='new 0 0 100 100'" xmlSpace="preserve"><title>Dark mode</title><path d="M96.76,66.458c-0.853-0.852-2.15-1.064-3.23-0.534c-6.063,2.991-12.858,4.571-19.655,4.571 C62.022,70.495,50.88,65.88,42.5,57.5C29.043,44.043,25.658,23.536,34.076,6.47c0.532-1.08,0.318-2.379-0.534-3.23 c-0.851-0.852-2.15-1.064-3.23-0.534c-4.918,2.427-9.375,5.619-13.246,9.491c-9.447,9.447-14.65,22.008-14.65,35.369 c0,13.36,5.
|
|||
|
<p>SQL(Structured Query Language)是一种用于管理关系型数据库的强大语言。它的历史可以追溯到 1970 年,当时 IBM 的研究员 Edgar F. Codd 发表了论文 A Relational Model of Data for Large Shared Data Banks 中首次提出。最初,SQL 被称为 SEQUEL(Structured English Query Language),后来被简化为 SQL。</p>
|
|||
|
<p>SQL 语句根据其功能主要分为四类:DDL、DML、DQL、DCL。</p>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<table><thead><tr><th align="left">分类</th><th align="left">全拼</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">DDL</td><td align="left">Data Definition Language</td><td align="left">数据定义语言,用来定义数据库对象 (数据库,表,字段)。</td></tr><tr><td align="left">DML</td><td align="left">Data Manipulation Language</td><td align="left">数据操作语言,用来对数据库表中的数据进行增删改。</td></tr><tr><td align="left">DQL</td><td align="left">Data Query Language</td><td align="left">数据查询语言,用来查询数据库中表的记录。</td></tr><tr><td align="left">DCL</td><td align="left">Data Control Language</td><td align="left">数据控制语言,用来创建数据库用户、控制数据库的访问权限。</td></tr></tbody></table>
|
|||
|
<h2 id="语法图">语法图<a aria-hidden="true" tabindex="-1" href="#语法图" class="internal"> §</a></h2>
|
|||
|
<pre><code class="mermaid">graph TD
|
|||
|
QUERY --> SELECT
|
|||
|
QUERY --> FROM
|
|||
|
QUERY --> WHERE
|
|||
|
QUERY --> GROUPBY
|
|||
|
QUERY --> ORDERBY
|
|||
|
SELECT --> Column1[Column1]
|
|||
|
SELECT --> Column2[Column2]
|
|||
|
...
|
|||
|
FROM --> Table1[Table1]
|
|||
|
FROM --> Table2[Table2]
|
|||
|
FROM --> JOIN
|
|||
|
JOIN --> Type[Type: INNER JOIN/LEFT JOIN/...]
|
|||
|
JOIN --> On[On: condition]
|
|||
|
WHERE --> Condition1[Condition1]
|
|||
|
WHERE --> Condition2[Condition2]
|
|||
|
...
|
|||
|
GROUPBY --> GroupColumn1[Column1]
|
|||
|
...
|
|||
|
ORDERBY --> OrderColumn1[Column1 ASC/DESC]
|
|||
|
...
|
|||
|
|
|||
|
</code></pre>
|
|||
|
<h2 id="数据库操作">数据库操作<a aria-hidden="true" tabindex="-1" href="#数据库操作" class="internal"> §</a></h2>
|
|||
|
<h3 id="查询数据库列表">查询数据库列表<a aria-hidden="true" tabindex="-1" href="#查询数据库列表" class="internal"> §</a></h3>
|
|||
|
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="sql" data-theme="default"><code data-language="sql" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);">-- 查询所有数据库</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-color-text);">SHOW DATABASES;</span></span></code></pre></div>
|
|||
|
<h3 id="创建和选择数据库">创建和选择数据库<a aria-hidden="true" tabindex="-1" href="#创建和选择数据库" class="internal"> §</a></h3>
|
|||
|
<p>要创建一个新的数据库,使用 <code>CREATE DATABASE</code> 语句。如果数据库已经存在,可以使用 <code>IF NOT EXISTS</code> 来避免错误。</p>
|
|||
|
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="sql" data-theme="default"><code data-language="sql" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);">-- 创建 my_database 数据库</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">CREATE</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">DATABASE</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-function);">IF</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">NOT</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">EXISTS</span><span style="color:var(--shiki-color-text);"> my_database </span><span style="color:var(--shiki-token-keyword);">DEFAULT</span><span style="color:var(--shiki-color-text);"> CHARSET utf8mb4 </span><span style="color:var(--shiki-token-keyword);">COLLATE</span><span style="color:var(--shiki-color-text);"> utf8mb4_general_ci;</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 选择使用 my_database 数据库</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">USE</span><span style="color:var(--shiki-color-text);"> my_database;</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 查询当前数据库</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">SELECT</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">DATABASE</span><span style="color:var(--shiki-color-text);">(); </span><span style="color:var(--shiki-token-comment);">-- 输出可能为 my_database</span></span></code></pre></div>
|
|||
|
<h3 id="删除数据库">删除数据库<a aria-hidden="true" tabindex="-1" href="#删除数据库" class="internal"> §</a></h3>
|
|||
|
<p>如果需要删除一个数据库,可以使用 <code>DROP DATABASE</code> 语句。请谨慎使用,因为这将永久删除数据库及其数据。</p>
|
|||
|
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="sql" data-theme="default"><code data-language="sql" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);">-- 删除 my_database 数据库</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">DROP</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">DATABASE</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">IF</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">EXISTS</span><span style="color:var(--shiki-color-text);"> my_database;</span></span></code></pre></div>
|
|||
|
<h2 id="数据表操作">数据表操作<a aria-hidden="true" tabindex="-1" href="#数据表操作" class="internal"> §</a></h2>
|
|||
|
<h3 id="数据类型">数据类型<a aria-hidden="true" tabindex="-1" href="#数据类型" class="internal"> §</a></h3>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<table><thead><tr><th>数据类型</th><th>描述</th><th>示例</th></tr></thead><tbody><tr><td>INT</td><td>整数</td><td><code>12345</code>, <code>-12345</code></td></tr><tr><td>VARCHAR</td><td>可变长度字符串</td><td><code>"Hello"</code>, <code>"SQL"</code>, <code>"Database"</code></td></tr><tr><td>CHAR</td><td>固定长度字符串</td><td><code>CHAR(5)</code> 可以存储 <code>"Hello"</code></td></tr><tr><td>DATE</td><td>日期</td><td><code>"2023-09-06"</code></td></tr><tr><td>DATETIME</td><td>日期和时间</td><td><code>"2023-09-06 14:45:00"</code></td></tr><tr><td>FLOAT</td><td>单精度浮点数</td><td><code>3.14</code>, <code>2.71</code></td></tr><tr><td>DOUBLE</td><td>双精度浮点数</td><td><code>3.14159265359</code></td></tr><tr><td>DECIMAL</td><td>精确小数,用于金融</td><td><code>DECIMAL(5,2)</code> 可存储范围为 <code>-999.99</code> 到 <code>999.99</code> 的数字</td></tr><tr><td>BLOB</td><td>二进制数据</td><td>用于存储图像、音频等</td></tr><tr><td>TEXT</td><td>长文本数据</td><td>用于存储较大的字符串</td></tr><tr><td>BOOLEAN</td><td>布尔值</td><td><code>TRUE</code> 或 <code>FALSE</code></td></tr><tr><td>ENUM</td><td>枚举,预定义的值集合</td><td><code>ENUM('small', 'medium', 'large')</code></td></tr></tbody></table>
|
|||
|
<h3 id="常见约束">常见约束<a aria-hidden="true" tabindex="-1" href="#常见约束" class="internal"> §</a></h3>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<table><thead><tr><th>约束</th><th>描述</th></tr></thead><tbody><tr><td>PRIMARY KEY</td><td>主键</td></tr><tr><td>FOREIGN KEY</td><td>外键</td></tr><tr><td>UNIQUE</td><td>唯一约束</td></tr><tr><td>NOT NULL</td><td>非空约束</td></tr><tr><td>DEFAULT</td><td>默认值约束</td></tr><tr><td>CHECK</td><td>条件检查约束</td></tr></tbody></table>
|
|||
|
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="sql" data-theme="default"><code data-language="sql" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);">-- 1.创建 Users 表</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">CREATE</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">TABLE</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-function);">Users</span><span style="color:var(--shiki-color-text);"> (</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-color-text);"> UserID </span><span style="color:var(--shiki-token-keyword);">INT</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">PRIMARY KEY</span><span style="color:var(--shiki-color-text);"> AUTO_INCREMENT,</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-color-text);"> Username </span><span style="color:var(--shiki-token-keyword);">VARCHAR</span><span style="color:var(--shiki-color-text);">(</span><span style="color:var(--shiki-token-constant);">50</span><span style="color:var(--shiki-color-text);">) COMMENT </span><span style="color:var(--shiki-token-string-expression);">'用户名称'</span><span style="color:var(--shiki-color-text);">,</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-color-text);"> Email </span><span style="color:var(--shiki-token-keyword);">VARCHAR</span><span style="color:var(--shiki-color-text);">(</span><span style="color:var(--shiki-token-constant);">100</span><span style="color:var(--shiki-color-text);">) COMMENT </span><span style="color:var(--shiki-token-string-expression);">'电子邮件'</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-color-text);">) COMMENT </span><span style="color:var(--shiki-token-string-expression);">'用户信息表'</span><span style="color:var(--shiki-color-text);">;</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 2.查询 users 表创建语句</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-color-text);">SHOW </span><span style="color:var(--shiki-token-keyword);">CREATE</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">TABLE</span><span style="color:var(--shiki-color-text);"> Users;</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 3.查询表结构</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">DESC</span><span style="color:var(--shiki-color-text);"> Users;</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 4.查询当前数据库所有表</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-color-text);">SHOW TABLES; </span><span style="color:var(--shiki-token-comment);">-- 输出可能包括 users</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 5.users 表添加 age 字段</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">ALTER</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">TABLE</span><span style="color:var(--shiki-color-text);"> Users </span><span style="color:var(--shiki-token-keyword);">ADD</span><span style="color:var(--shiki-color-text);"> Age </span><span style="color:var(--shiki-token-keyword);">INT</span><span style="color:var(--shiki-color-text);"> COMMENT </span><span style="color:var(--shiki-token-string-expression);">'用户年龄'</span><span style="color:var(--shiki-color-text);">;</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 6.users 表修改 age 字段数据类型</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">ALTER</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">TABLE</span><span style="color:var(--shiki-color-text);"> Users </span><span style="color:var(--shiki-token-keyword);">MODIFY</span><span style="color:var(--shiki-color-text);"> Age </span><span style="color:var(--shiki-token-keyword);">SMALLINT</span><span style="color:var(--shiki-color-text);">; </span><span style="color:var(--shiki-token-comment);">-- 将年龄字段类型改为 SMALLINT</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 7.users 表删除 Age 字段</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">ALTER</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">TABLE</span><span style="color:var(--shiki-color-text);"> Users </span><span style="color:var(--shiki-token-keyword);">DROP</span><span style="color:var(--shiki-color-text);"> Age;</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 8.users 表修改表名 NewUsers</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">ALTER</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">TABLE</span><span style="color:var(--shiki-color-text);"> Users RENAME </span><span style="color:var(--shiki-token-keyword);">TO</span><span style="color:var(--shiki-color-text);"> NewUsers;</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 9.清空表内容,保留结构</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">TRUNCATE</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">TABLE</span><span style="color:var(--shiki-color-text);"> NewUsers;</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 10.删除 NewUsers 表</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">DROP</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">TABLE</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">IF</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">EXISTS</span><span style="color:var(--shiki-color-text);"> NewUsers;</span></span></code></pre></div>
|
|||
|
<h3 id="查询表结构">查询表结构<a aria-hidden="true" tabindex="-1" href="#查询表结构" class="internal"> §</a></h3>
|
|||
|
<p>要查看表的结构(列、数据类型、约束等),可以使用 <code>DESC</code> 命令。</p>
|
|||
|
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="sql" data-theme="default"><code data-language="sql" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);">-- 查询 Users 表结构</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">DESC</span><span style="color:var(--shiki-color-text);"> Users;</span></span></code></pre></div>
|
|||
|
<h3 id="查询当前数据库中的所有表">查询当前数据库中的所有表<a aria-hidden="true" tabindex="-1" href="#查询当前数据库中的所有表" class="internal"> §</a></h3>
|
|||
|
<p>使用 <code>SHOW TABLES;</code> 命令可以列出当前数据库中的所有表。</p>
|
|||
|
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="sql" data-theme="default"><code data-language="sql" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);">-- 查询当前数据库中的所有表</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-color-text);">SHOW TABLES; </span><span style="color:var(--shiki-token-comment);">-- 输出可能包括 Users 表</span></span></code></pre></div>
|
|||
|
<h3 id="修改表结构">修改表结构<a aria-hidden="true" tabindex="-1" href="#修改表结构" class="internal"> §</a></h3>
|
|||
|
<p>可以使用 <code>ALTER TABLE</code> 命令来修改表的结构,包括添加、修改和删除列等操作。</p>
|
|||
|
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="sql" data-theme="default"><code data-language="sql" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);">-- 1. 添加列 Age 到 Users 表</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">ALTER</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">TABLE</span><span style="color:var(--shiki-color-text);"> Users </span><span style="color:var(--shiki-token-keyword);">ADD</span><span style="color:var(--shiki-color-text);"> Age </span><span style="color:var(--shiki-token-keyword);">INT</span><span style="color:var(--shiki-color-text);">;</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 2. 修改列 Age 的数据类型为 SMALLINT</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">ALTER</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">TABLE</span><span style="color:var(--shiki-color-text);"> Users </span><span style="color:var(--shiki-token-keyword);">MODIFY</span><span style="color:var(--shiki-color-text);"> Age </span><span style="color:var(--shiki-token-keyword);">SMALLINT</span><span style="color:var(--shiki-color-text);">;</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 3. 删除列 Age</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">ALTER</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">TABLE</span><span style="color:var(--shiki-color-text);"> Users </span><span style="color:var(--shiki-token-keyword);">DROP</span><span style="color:var(--shiki-color-text);"> COLUMN Age;</span></span></code></pre></div>
|
|||
|
<h3 id="清空表内容">清空表内容<a aria-hidden="true" tabindex="-1" href="#清空表内容" class="internal"> §</a></h3>
|
|||
|
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="sql" data-theme="default"><code data-language="sql" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);">-- 清空表内容,保留结构</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">TRUNCATE</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">TABLE</span><span style="color:var(--shiki-color-text);"> Users;</span></span></code></pre></div>
|
|||
|
<h3 id="删除表">删除表<a aria-hidden="true" tabindex="-1" href="#删除表" class="internal"> §</a></h3>
|
|||
|
<p>要删除一个表及其数据,可以使用 <code>DROP TABLE</code> 命令。</p>
|
|||
|
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="sql" data-theme="default"><code data-language="sql" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);">-- 删除 Users 表</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">DROP</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">TABLE</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">IF</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">EXISTS</span><span style="color:var(--shiki-color-text);"> Users;</span></span></code></pre></div>
|
|||
|
<h2 id="数据操纵语言dml">数据操纵语言(DML)<a aria-hidden="true" tabindex="-1" href="#数据操纵语言dml" class="internal"> §</a></h2>
|
|||
|
<p>数据操纵语言(DML)是用于操作数据库中的数据的一组 SQL 命令。与数据定义语言(DDL)不同,<strong>DML 主要用于管理和控制数据库中的数据</strong>,涉及数据的插入、更新和删除操作。</p>
|
|||
|
<h3 id="插入数据">插入数据<a aria-hidden="true" tabindex="-1" href="#插入数据" class="internal"> §</a></h3>
|
|||
|
<p>使用 <code>INSERT INTO</code> 命令来插入数据。</p>
|
|||
|
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="sql" data-theme="default"><code data-language="sql" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);">-- 插入完整行数据</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">INSERT INTO</span><span style="color:var(--shiki-color-text);"> Users (UserID, Username, Email, Age) </span><span style="color:var(--shiki-token-keyword);">VALUES</span><span style="color:var(--shiki-color-text);"> (</span><span style="color:var(--shiki-token-constant);">1</span><span style="color:var(--shiki-color-text);">, </span><span style="color:var(--shiki-token-string-expression);">'John Doe'</span><span style="color:var(--shiki-color-text);">, </span><span style="color:var(--shiki-token-string-expression);">'johndoe@example.com'</span><span style="color:var(--shiki-color-text);">, </span><span style="color:var(--shiki-token-constant);">28</span><span style="color:var(--shiki-color-text);">);</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 插入部分列数据</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">INSERT INTO</span><span style="color:var(--shiki-color-text);"> Users (Username, Email) </span><span style="color:var(--shiki-token-keyword);">VALUES</span><span style="color:var(--shiki-color-text);"> (</span><span style="color:var(--shiki-token-string-expression);">'Jane Doe'</span><span style="color:var(--shiki-color-text);">, </span><span style="color:var(--shiki-token-string-expression);">'janedoe@example.com'</span><span style="color:var(--shiki-color-text);">);</span></span></code></pre></div>
|
|||
|
<h3 id="更新数据">更新数据<a aria-hidden="true" tabindex="-1" href="#更新数据" class="internal"> §</a></h3>
|
|||
|
<p>使用 <code>UPDATE</code> 命令来更新数据。</p>
|
|||
|
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="sql" data-theme="default"><code data-language="sql" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);">-- 更新指定行数据</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">UPDATE</span><span style="color:var(--shiki-color-text);"> Users </span><span style="color:var(--shiki-token-keyword);">SET</span><span style="color:var(--shiki-color-text);"> Age </span><span style="color:var(--shiki-token-keyword);">=</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">30</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">WHERE</span><span style="color:var(--shiki-color-text);"> UserID </span><span style="color:var(--shiki-token-keyword);">=</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">1</span><span style="color:var(--shiki-color-text);">;</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 更新整表数据(例如为所有用户年龄加1)</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">UPDATE</span><span style="color:var(--shiki-color-text);"> Users </span><span style="color:var(--shiki-token-keyword);">SET</span><span style="color:var(--shiki-color-text);"> Age </span><span style="color:var(--shiki-token-keyword);">=</span><span style="color:var(--shiki-color-text);"> Age </span><span style="color:var(--shiki-token-keyword);">+</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">1</span><span style="color:var(--shiki-color-text);">;</span></span></code></pre></div>
|
|||
|
<h3 id="删除数据">删除数据<a aria-hidden="true" tabindex="-1" href="#删除数据" class="internal"> §</a></h3>
|
|||
|
<p>使用 <code>DELETE</code> 命令来删除数据。</p>
|
|||
|
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="sql" data-theme="default"><code data-language="sql" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);">-- 删除指定行数据</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">DELETE</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">FROM</span><span style="color:var(--shiki-color-text);"> Users </span><span style="color:var(--shiki-token-keyword);">WHERE</span><span style="color:var(--shiki-color-text);"> UserID </span><span style="color:var(--shiki-token-keyword);">=</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">1</span><span style="color:var(--shiki-color-text);">;</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 删除整表数据(慎用!这将删除所有用户)</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">DELETE</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">FROM</span><span style="color:var(--shiki-color-text);"> Users;</span></span></code></pre></div>
|
|||
|
<h2 id="数据查询语言dql">数据查询语言(DQL)<a aria-hidden="true" tabindex="-1" href="#数据查询语言dql" class="internal"> §</a></h2>
|
|||
|
<p>数据查询语言(DQL)是用于查询和检索数据库中存储的数据的一组 SQL 命令。DQL 使用户能够访问并操作数据,不会更改数据库中的任何内容,主要涉及数据的检索和显示。</p>
|
|||
|
<h3 id="基本查询">基本查询<a aria-hidden="true" tabindex="-1" href="#基本查询" class="internal"> §</a></h3>
|
|||
|
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="sql" data-theme="default"><code data-language="sql" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);">-- 1. SELECT - 选择列</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">SELECT</span><span style="color:var(--shiki-color-text);"> Username, Email </span><span style="color:var(--shiki-token-keyword);">FROM</span><span style="color:var(--shiki-color-text);"> Users; </span><span style="color:var(--shiki-token-comment);">-- 选择用户名和电子邮件列</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 2. FROM - 选择表</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">SELECT</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">*</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">FROM</span><span style="color:var(--shiki-color-text);"> Users; </span><span style="color:var(--shiki-token-comment);">-- 选择 Users 表的所有列</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 3. WHERE - 条件过滤</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">SELECT</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">*</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">FROM</span><span style="color:var(--shiki-color-text);"> Users </span><span style="color:var(--shiki-token-keyword);">WHERE</span><span style="color:var(--shiki-color-text);"> Age </span><span style="color:var(--shiki-token-keyword);">></span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">18</span><span style="color:var(--shiki-color-text);">; </span><span style="color:var(--shiki-token-comment);">-- 选择年龄大于18的记录</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 4. ORDER BY - 排序结果集</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">SELECT</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">*</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">FROM</span><span style="color:var(--shiki-color-text);"> Users </span><span style="color:var(--shiki-token-keyword);">ORDER BY</span><span style="color:var(--shiki-color-text);"> Age </span><span style="color:var(--shiki-token-keyword);">DESC</span><span style="color:var(--shiki-color-text);">; </span><span style="color:var(--shiki-token-comment);">-- 按年龄降序排列</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 5. GROUP BY - 对结果集进行分组</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">SELECT</span><span style="color:var(--shiki-color-text);"> Age, </span><span style="color:var(--shiki-token-function);">COUNT</span><span style="color:var(--shiki-color-text);">(</span><span style="color:var(--shiki-token-keyword);">*</span><span style="color:var(--shiki-color-text);">) </span><span style="color:var(--shiki-token-keyword);">FROM</span><span style="color:var(--shiki-color-text);"> Users </span><span style="color:var(--shiki-token-keyword);">GROUP BY</span><span style="color:var(--shiki-color-text);"> Age; </span><span style="color:var(--shiki-token-comment);">-- 按年龄分组,并统计每个年龄段的用户数</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 6. HAVING - 对分组后的结果进行过滤</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">SELECT</span><span style="color:var(--shiki-color-text);"> Age, </span><span style="color:var(--shiki-token-function);">COUNT</span><span style="color:var(--shiki-color-text);">(</span><span style="color:var(--shiki-token-keyword);">*</span><span style="color:var(--shiki-color-text);">) </span><span style="color:var(--shiki-token-keyword);">FROM</span><span style="color:var(--shiki-color-text);"> Users </span><span style="color:var(--shiki-token-keyword);">GROUP BY</span><span style="color:var(--shiki-color-text);"> Age </span><span style="color:var(--shiki-token-keyword);">HAVING</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-function);">COUNT</span><span style="color:var(--shiki-color-text);">(</span><span style="color:var(--shiki-token-keyword);">*</span><span style="color:var(--shiki-color-text);">) </span><span style="color:var(--shiki-token-keyword);">></span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">5</span><span style="color:var(--shiki-color-text);">; </span><span style="color:var(--shiki-token-comment);">-- 选择用户数大于5的年龄段</span></span>
|
|||
|
<span data-line> </span></code></pre></div>
|
|||
|
<h3 id="高级查询">高级查询<a aria-hidden="true" tabindex="-1" href="#高级查询" class="internal"> §</a></h3>
|
|||
|
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="sql" data-theme="default"><code data-language="sql" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);">-- JOIN - 连接查询</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">SELECT</span><span style="color:var(--shiki-color-text);"> Users.Username, Orders.OrderID</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">FROM</span><span style="color:var(--shiki-color-text);"> Users</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">JOIN</span><span style="color:var(--shiki-color-text);"> Orders </span><span style="color:var(--shiki-token-keyword);">ON</span><span style="color:var(--shiki-color-text);"> Users.UserID </span><span style="color:var(--shiki-token-keyword);">=</span><span style="color:var(--shiki-color-text);"> Orders.UserID; </span><span style="color:var(--shiki-token-comment);">-- 连接 Users 和 Orders 表,基于 UserID</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 子查询 - 嵌套 SELECT 语句</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">SELECT</span><span style="color:var(--shiki-color-text);"> Username </span><span style="color:var(--shiki-token-keyword);">FROM</span><span style="color:var(--shiki-color-text);"> Users </span><span style="color:var(--shiki-token-keyword);">WHERE</span><span style="color:var(--shiki-color-text);"> Age </span><span style="color:var(--shiki-token-keyword);">=</span><span style="color:var(--shiki-color-text);"> (</span><span style="color:var(--shiki-token-keyword);">SELECT</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-function);">MAX</span><span style="color:var(--shiki-color-text);">(Age) </span><span style="color:var(--shiki-token-keyword);">FROM</span><span style="color:var(--shiki-color-text);"> Users); </span><span style="color:var(--shiki-token-comment);">-- 使用子查询来找到年龄最大的用户</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 聚合函数 - 如 COUNT, SUM, AVG 等</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">SELECT</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-function);">AVG</span><span style="color:var(--shiki-color-text);">(Age) </span><span style="color:var(--shiki-token-keyword);">FROM</span><span style="color:var(--shiki-color-text);"> Users; </span><span style="color:var(--shiki-token-comment);">-- 计算所有用户的平均年龄</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 分页查询 - LIMIT, OFFSET</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">SELECT</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">*</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">FROM</span><span style="color:var(--shiki-color-text);"> Users </span><span style="color:var(--shiki-token-keyword);">LIMIT</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">10</span><span style="color:var(--shiki-color-text);"> OFFSET </span><span style="color:var(--shiki-token-constant);">5</span><span style="color:var(--shiki-color-text);">; </span><span style="color:var(--shiki-token-comment);">-- 查询第6至第15条用户记录</span></span></code></pre></div>
|
|||
|
<h2 id="索引">索引<a aria-hidden="true" tabindex="-1" href="#索引" class="internal"> §</a></h2>
|
|||
|
<p>索引是数据库中的一种特殊的数据结构,<strong>旨在加速查询操作</strong>。通过为表中的一列或多列建立索引,查询操作可以更快地找到数据,而无需逐行扫描整个表。</p>
|
|||
|
<p><strong>优点</strong>:</p>
|
|||
|
<ol>
|
|||
|
<li><strong>查询速度</strong>:索引大大提高了查询速度,减少了数据库的查询时间。</li>
|
|||
|
<li><strong>数据检索效率</strong>:有了索引,数据的检索变得更加高效。</li>
|
|||
|
<li><strong>加速表连接</strong>:在进行 JOIN 操作时,如果涉及到的字段已经被索引,该操作会更加迅速。</li>
|
|||
|
</ol>
|
|||
|
<p><strong>缺点</strong>:</p>
|
|||
|
<ol>
|
|||
|
<li><strong>占用空间</strong>:索引虽然可以提高查询速度,但也占据了额外的磁盘空间。</li>
|
|||
|
<li><strong>维护成本</strong>:每当有数据插入、更新或删除时,索引也需要进行相应的更新,这可能导致这些操作的速度变慢。</li>
|
|||
|
</ol>
|
|||
|
<p>在实际操作中,<strong>索引的使用主要是为了优化查询效率</strong>。当数据表中的数据量较大,或需要频繁查询特定列数据时,使用索引是明智的。那些经常需要排序的列或在 <code>WHERE</code> 子句中经常被查询的列,建议创建索引。</p>
|
|||
|
<p>然而,对于数据量较小的表,或数据在某列上有大量重复值的表,以及对于经常进行大量的 INSERT、UPDATE 和 DELETE 操作的表,过多的索引可能并不合适,因为维护索引会带来额外的开销。</p>
|
|||
|
<h3 id="创建索引">创建索引<a aria-hidden="true" tabindex="-1" href="#创建索引" class="internal"> §</a></h3>
|
|||
|
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="sql" data-theme="default"><code data-language="sql" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);">-- 创建名为 idx_Username 的索引,用于 Users 表的 Username 列</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">CREATE</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">INDEX</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-function);">idx_Username</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">ON</span><span style="color:var(--shiki-color-text);"> Users(Username);</span></span></code></pre></div>
|
|||
|
<h3 id="删除索引">删除索引<a aria-hidden="true" tabindex="-1" href="#删除索引" class="internal"> §</a></h3>
|
|||
|
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="sql" data-theme="default"><code data-language="sql" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);">-- 删除名为 idx_Username 的索引</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">DROP</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">INDEX</span><span style="color:var(--shiki-color-text);"> idx_Username </span><span style="color:var(--shiki-token-keyword);">ON</span><span style="color:var(--shiki-color-text);"> Users;</span></span></code></pre></div>
|
|||
|
<h3 id="索引种类">索引种类<a aria-hidden="true" tabindex="-1" href="#索引种类" class="internal"> §</a></h3>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<table><thead><tr><th><strong>索引种类</strong></th><th><strong>描述</strong></th></tr></thead><tbody><tr><td><strong>唯一索引 (UNIQUE INDEX)</strong></td><td>确保每行数据在索引列上的值是唯一的。</td></tr><tr><td><strong>主键索引 (PRIMARY INDEX)</strong></td><td>唯一索引的一种特殊类型,通常在主键上自动创建。</td></tr><tr><td><strong>全文索引 (FULLTEXT INDEX)</strong></td><td>用于在表中执行全文搜索。</td></tr><tr><td><strong>组合索引 (COMPOSITE INDEX)</strong></td><td>在两个或多个列上创建的索引。</td></tr><tr><td><strong>空间索引 (SPATIAL INDEX)</strong></td><td>在地理空间数据上创建的索引,例如:经纬度。</td></tr></tbody></table>
|
|||
|
<h2 id="视图">视图<a aria-hidden="true" tabindex="-1" href="#视图" class="internal"> §</a></h2>
|
|||
|
<p>视图是数据库中的一个虚拟表,它的内容由查询定义。不同于普通的表,视图不包含数据,而只保存描述其内容或结构的 SQL 查询。当视图被引用时,其内部的查询被执行,从而产生结果集。视图的主要目的是提供一种机制,使用户可以查看数据的逻辑表示,而不必关心数据的物理存储和实现。</p>
|
|||
|
<p><strong>优点</strong>:</p>
|
|||
|
<ol>
|
|||
|
<li><strong>简化复杂查询</strong>: 对于经常被查询的数据,可以使用视图简化查询的复杂性。</li>
|
|||
|
<li><strong>安全性</strong>: 通过视图可以限制对数据的访问,只显示某些部分,而不是完整的表。</li>
|
|||
|
<li><strong>独立性</strong>: 对于应用程序,使用视图提供了数据的逻辑独立性。原始表的结构发生变化时,不会影响到使用视图的应用程序。</li>
|
|||
|
</ol>
|
|||
|
<p><strong>缺点</strong>:</p>
|
|||
|
<ol>
|
|||
|
<li><strong>性能</strong>: 一些视图可能会导致性能下降,特别是当视图基于多个表和复杂查询时。</li>
|
|||
|
<li><strong>更新限制</strong>: 不是所有的视图都可以进行更新操作。</li>
|
|||
|
</ol>
|
|||
|
<h3 id="创建视图">创建视图<a aria-hidden="true" tabindex="-1" href="#创建视图" class="internal"> §</a></h3>
|
|||
|
<p>使用 <code>CREATE VIEW</code> 命令来创建视图。</p>
|
|||
|
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="sql" data-theme="default"><code data-language="sql" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);">-- 创建名为 TopUsers 的视图,显示 Users 表中年龄最大的用户</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">CREATE</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">VIEW</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-function);">TopUsers</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">AS</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">SELECT</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">*</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">FROM</span><span style="color:var(--shiki-color-text);"> Users </span><span style="color:var(--shiki-token-keyword);">ORDER BY</span><span style="color:var(--shiki-color-text);"> Age </span><span style="color:var(--shiki-token-keyword);">DESC</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">LIMIT</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">5</span><span style="color:var(--shiki-color-text);">;</span></span></code></pre></div>
|
|||
|
<h3 id="修改视图">修改视图<a aria-hidden="true" tabindex="-1" href="#修改视图" class="internal"> §</a></h3>
|
|||
|
<p>要修改视图,可以使用 <code>ALTER VIEW</code> 命令。</p>
|
|||
|
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="sql" data-theme="default"><code data-language="sql" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);">-- 修改名为 TopUsers 的视图,更改为显示前10个年龄最大的用户</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">ALTER</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">VIEW</span><span style="color:var(--shiki-color-text);"> TopUsers </span><span style="color:var(--shiki-token-keyword);">AS</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">SELECT</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">*</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">FROM</span><span style="color:var(--shiki-color-text);"> Users </span><span style="color:var(--shiki-token-keyword);">ORDER BY</span><span style="color:var(--shiki-color-text);"> Age </span><span style="color:var(--shiki-token-keyword);">DESC</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">LIMIT</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">10</span><span style="color:var(--shiki-color-text);">;</span></span></code></pre></div>
|
|||
|
<h3 id="删除视图">删除视图<a aria-hidden="true" tabindex="-1" href="#删除视图" class="internal"> §</a></h3>
|
|||
|
<p>如果不再需要视图,可以使用 <code>DROP VIEW</code> 命令删除它。</p>
|
|||
|
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="sql" data-theme="default"><code data-language="sql" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);">-- 删除名为 TopUsers 的视图</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">DROP</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">VIEW</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">IF</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">EXISTS</span><span style="color:var(--shiki-color-text);"> TopUsers;</span></span></code></pre></div>
|
|||
|
<h2 id="事务">事务<a aria-hidden="true" tabindex="-1" href="#事务" class="internal"> §</a></h2>
|
|||
|
<p>事务是数据库管理系统中的一个单元操作,由一个以上的相关操作组成。它可以确保被其包含的<strong>数据库操作要么全部成功,要么全部失败,确保数据库的完整性和一致性。</strong></p>
|
|||
|
<h3 id="acid">ACID<a aria-hidden="true" tabindex="-1" href="#acid" class="internal"> §</a></h3>
|
|||
|
<ul>
|
|||
|
<li><strong>原子性 (Atomicity)</strong>: 事务被视为一个单独的单元,它要么完全地执行,要么完全地不执行。</li>
|
|||
|
<li><strong>一致性 (Consistency)</strong>: 事务确保数据库从一个一致性状态转换到另一个一致性状态。</li>
|
|||
|
<li><strong>隔离性 (Isolation)</strong>: 在并发环境中,事务的执行不应由其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,反之亦然。</li>
|
|||
|
<li><strong>持久性 (Durability)</strong>: 一旦事务被提交,它对数据库的改变就是永久的,接下来的其他操作或故障不应该对其有任何影响。</li>
|
|||
|
</ul>
|
|||
|
<p>事务在数据库管理中扮演了关键的角色,特别是在处理复杂的业务逻辑时,如涉及多个表的插入、更新或删除操作。这确保了<strong>所有相关操作要么全部成功执行,要么全部不执行,从而保障了数据的完整性。</strong></p>
|
|||
|
<p>一个典型的例子是在银行应用中进行的转账操作,其中从一个账户扣款和向另一个账户存款这两个动作都必须成功完成,否则都应该被撤销,以确保资金的准确性。此外,在高并发的环境中,如多用户同时访问数据库,事务还能确保所有用户都能看到一致和准确的数据视图,避免了因并发操作导致的数据不一致性。</p>
|
|||
|
<h3 id="示例">示例<a aria-hidden="true" tabindex="-1" href="#示例" class="internal"> §</a></h3>
|
|||
|
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="sql" data-theme="default"><code data-language="sql" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);">-- 开始事务</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">BEGIN</span><span style="color:var(--shiki-color-text);">;</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-color-text);">......</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 提交事务</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">COMMIT</span><span style="color:var(--shiki-color-text);">;</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 回滚事务</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">ROLLBACK</span><span style="color:var(--shiki-color-text);">;</span></span></code></pre></div>
|
|||
|
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="sql" data-theme="default"><code data-language="sql" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);">-- 开始一个新的事务</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">START TRANSACTION</span><span style="color:var(--shiki-color-text);">;</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 扣款操作:从账户A减少100元</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">UPDATE</span><span style="color:var(--shiki-color-text);"> Accounts </span><span style="color:var(--shiki-token-keyword);">SET</span><span style="color:var(--shiki-color-text);"> Balance </span><span style="color:var(--shiki-token-keyword);">=</span><span style="color:var(--shiki-color-text);"> Balance </span><span style="color:var(--shiki-token-keyword);">-</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">100</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">WHERE</span><span style="color:var(--shiki-color-text);"> AccountNumber </span><span style="color:var(--shiki-token-keyword);">=</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string-expression);">'A'</span><span style="color:var(--shiki-color-text);">;</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 存款操作:向账户B增加100元</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">UPDATE</span><span style="color:var(--shiki-color-text);"> Accounts </span><span style="color:var(--shiki-token-keyword);">SET</span><span style="color:var(--shiki-color-text);"> Balance </span><span style="color:var(--shiki-token-keyword);">=</span><span style="color:var(--shiki-color-text);"> Balance </span><span style="color:var(--shiki-token-keyword);">+</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">100</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">WHERE</span><span style="color:var(--shiki-color-text);"> AccountNumber </span><span style="color:var(--shiki-token-keyword);">=</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string-expression);">'B'</span><span style="color:var(--shiki-color-text);">;</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 如果上述两个操作都成功执行,提交事务</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">COMMIT</span><span style="color:var(--shiki-color-text);">;</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 如果发生错误或需要撤销操作,回滚事务</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">ROLLBACK</span><span style="color:var(--shiki-color-text);">;</span></span></code></pre></div>
|
|||
|
<h2 id="数据控制语言dcl">数据控制语言(DCL)<a aria-hidden="true" tabindex="-1" href="#数据控制语言dcl" class="internal"> §</a></h2>
|
|||
|
<p>数据控制语言(DCL,Data Control Language)是 SQL 的一个子集,主要关注于访问权限和数据的安全性。DCL 提供了设置或撤回用户权限的工具,从而确保只有经授权的用户才能执行特定的活动。</p>
|
|||
|
<h3 id="用户管理">用户管理<a aria-hidden="true" tabindex="-1" href="#用户管理" class="internal"> §</a></h3>
|
|||
|
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="sql" data-theme="default"><code data-language="sql" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);">-- 1.查询用户</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">use</span><span style="color:var(--shiki-color-text);"> mysql;</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">select</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">*</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">from</span><span style="color:var(--shiki-color-text);"> user;</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 2.创建用户,主机名 % 通配符号</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">CREATE</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">USER</span><span style="color:var(--shiki-color-text);"> '</span><span style="color:var(--shiki-token-function);">用户名</span><span style="color:var(--shiki-color-text);">'@</span><span style="color:var(--shiki-token-string-expression);">'主机名'</span><span style="color:var(--shiki-color-text);"> IDENTIFIED </span><span style="color:var(--shiki-token-keyword);">BY</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string-expression);">'密码'</span><span style="color:var(--shiki-color-text);">;</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 3.修改用户密码</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">ALTER</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">USER</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string-expression);">'用户名'</span><span style="color:var(--shiki-color-text);">@</span><span style="color:var(--shiki-token-string-expression);">'主机名'</span><span style="color:var(--shiki-color-text);"> IDENTIFIED </span><span style="color:var(--shiki-token-keyword);">WITH</span><span style="color:var(--shiki-color-text);"> mysql_native_password </span><span style="color:var(--shiki-token-keyword);">BY</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string-expression);">'新密码'</span><span style="color:var(--shiki-color-text);">;</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 4.删除用户</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">DROP</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">USER</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string-expression);">'用户名'</span><span style="color:var(--shiki-color-text);">@</span><span style="color:var(--shiki-token-string-expression);">'主机名'</span><span style="color:var(--shiki-color-text);">;</span></span></code></pre></div>
|
|||
|
<h3 id="权限管理">权限管理<a aria-hidden="true" tabindex="-1" href="#权限管理" class="internal"> §</a></h3>
|
|||
|
<p>数据库权限的设置应该遵循最小权限原则,即只赋予用户完成其任务所必需的最小权限。同时定期审查用户的权限并作必要的调整,确保数据安全性。</p>
|
|||
|
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="sql" data-theme="default"><code data-language="sql" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);">-- 查询权限:</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-color-text);">SHOW GRANTS FOR </span><span style="color:var(--shiki-token-string-expression);">'用户名'</span><span style="color:var(--shiki-color-text);">@</span><span style="color:var(--shiki-token-string-expression);">'主机名'</span><span style="color:var(--shiki-color-text);">;</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 授予权限:</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">GRANT</span><span style="color:var(--shiki-color-text);"> 权限列表 </span><span style="color:var(--shiki-token-keyword);">ON</span><span style="color:var(--shiki-color-text);"> 数据库名.表名 </span><span style="color:var(--shiki-token-keyword);">TO</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string-expression);">'用户名'</span><span style="color:var(--shiki-color-text);">@</span><span style="color:var(--shiki-token-string-expression);">'主机名'</span><span style="color:var(--shiki-color-text);">;</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">GRANT</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">SELECT</span><span style="color:var(--shiki-color-text);">, </span><span style="color:var(--shiki-token-keyword);">INSERT</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">ON</span><span style="color:var(--shiki-color-text);"> database_name.table_name </span><span style="color:var(--shiki-token-keyword);">TO</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string-expression);">'username'</span><span style="color:var(--shiki-color-text);">@</span><span style="color:var(--shiki-token-string-expression);">'hostname'</span><span style="color:var(--shiki-color-text);">;</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 撤销权限:</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">REVOKE</span><span style="color:var(--shiki-color-text);"> 权限列表 </span><span style="color:var(--shiki-token-keyword);">ON</span><span style="color:var(--shiki-color-text);"> 数据库名.表名 </span><span style="color:var(--shiki-token-keyword);">FROM</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string-expression);">'用户名'</span><span style="color:var(--shiki-color-text);">@</span><span style="color:var(--shiki-token-string-expression);">'主机名'</span><span style="color:var(--shiki-color-text);">;</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">REVOKE</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">SELECT</span><span style="color:var(--shiki-color-text);">, </span><span style="color:var(--shiki-token-keyword);">INSERT</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">ON</span><span style="color:var(--shiki-color-text);"> database_name.table_name </span><span style="color:var(--shiki-token-keyword);">FROM</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string-expression);">'username'</span><span style="color:var(--shiki-color-text);">@</span><span style="color:var(--shiki-token-string-expression);">'hostname'</span><span style="color:var(--shiki-color-text);">;</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 注意:</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 多个权限用逗号分隔</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 授权时,数据库名和表名可以用 * 进行通配,代表所有</span></span></code></pre></div>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<table><thead><tr><th><strong>权限类型</strong></th><th><strong>描述</strong></th></tr></thead><tbody><tr><td>SELECT</td><td>允许读取数据</td></tr><tr><td>INSERT</td><td>允许插入新数据</td></tr><tr><td>UPDATE</td><td>允许更新现有数据</td></tr><tr><td>DELETE</td><td>允许删除数据</td></tr><tr><td>EXECUTE</td><td>允许执行存储过程或函数</td></tr><tr><td>ALTER</td><td>允许修改数据库对象 (如表或索引)</td></tr><tr><td>DROP</td><td>允许删除数据库对象</td></tr><tr><td>CREATE</td><td>允许创建数据库对象</td></tr><tr><td>GRANT OPTION</td><td>允许用户授予权限给其他用户</td></tr><tr><td>INDEX</td><td>允许用户在表上创建索引</td></tr><tr><td>REFERENCES</td><td>允许用户在表上创建外键约束</td></tr></tbody></table>
|
|||
|
<h2 id="sql-函数">SQL 函数<a aria-hidden="true" tabindex="-1" href="#sql-函数" class="internal"> §</a></h2>
|
|||
|
<p>SQL 函数提供了处理数据的方便方法,允许我们在查询过程中对数据进行操作和转换。以下是一些常见的 SQL 函数分类及其示例。</p>
|
|||
|
<h3 id="字符串函数">字符串函数<a aria-hidden="true" tabindex="-1" href="#字符串函数" class="internal"> §</a></h3>
|
|||
|
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="sql" data-theme="default"><code data-language="sql" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);">-- 合并两个或多个字符串</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">SELECT</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-function);">CONCAT</span><span style="color:var(--shiki-color-text);">(</span><span style="color:var(--shiki-token-string-expression);">'Hello'</span><span style="color:var(--shiki-color-text);">, </span><span style="color:var(--shiki-token-string-expression);">' World!'</span><span style="color:var(--shiki-color-text);">) </span><span style="color:var(--shiki-token-keyword);">AS</span><span style="color:var(--shiki-color-text);"> Result; </span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 从字符串中提取子字符串</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">SELECT</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-function);">SUBSTRING</span><span style="color:var(--shiki-color-text);">(</span><span style="color:var(--shiki-token-string-expression);">'Hello World!'</span><span style="color:var(--shiki-color-text);">, </span><span style="color:var(--shiki-token-constant);">1</span><span style="color:var(--shiki-color-text);">, </span><span style="color:var(--shiki-token-constant);">5</span><span style="color:var(--shiki-color-text);">) </span><span style="color:var(--shiki-token-keyword);">AS</span><span style="color:var(--shiki-color-text);"> ExtractString;</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 去掉字符串开始或结束处的空白字符</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">SELECT</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-function);">TRIM</span><span style="color:var(--shiki-color-text);">(</span><span style="color:var(--shiki-token-string-expression);">' Hello World! '</span><span style="color:var(--shiki-color-text);">) </span><span style="color:var(--shiki-token-keyword);">AS</span><span style="color:var(--shiki-color-text);"> TrimmedString;</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 转换字符串大小写</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">SELECT</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-function);">UPPER</span><span style="color:var(--shiki-color-text);">(</span><span style="color:var(--shiki-token-string-expression);">'Hello'</span><span style="color:var(--shiki-color-text);">), </span><span style="color:var(--shiki-token-function);">LOWER</span><span style="color:var(--shiki-color-text);">(</span><span style="color:var(--shiki-token-string-expression);">'WORLD!'</span><span style="color:var(--shiki-color-text);">) </span><span style="color:var(--shiki-token-keyword);">AS</span><span style="color:var(--shiki-color-text);"> Result;</span></span></code></pre></div>
|
|||
|
<h3 id="数值函数">数值函数<a aria-hidden="true" tabindex="-1" href="#数值函数" class="internal"> §</a></h3>
|
|||
|
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="sql" data-theme="default"><code data-language="sql" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);">-- 对数字进行四舍五入</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">SELECT</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-function);">ROUND</span><span style="color:var(--shiki-color-text);">(</span><span style="color:var(--shiki-token-constant);">123</span><span style="color:var(--shiki-color-text);">.</span><span style="color:var(--shiki-token-constant);">4567</span><span style="color:var(--shiki-color-text);">, </span><span style="color:var(--shiki-token-constant);">2</span><span style="color:var(--shiki-color-text);">) </span><span style="color:var(--shiki-token-keyword);">AS</span><span style="color:var(--shiki-color-text);"> RoundedNumber; </span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 向下和向上取整</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">SELECT</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-function);">FLOOR</span><span style="color:var(--shiki-color-text);">(</span><span style="color:var(--shiki-token-constant);">123</span><span style="color:var(--shiki-color-text);">.</span><span style="color:var(--shiki-token-constant);">4567</span><span style="color:var(--shiki-color-text);">) </span><span style="color:var(--shiki-token-keyword);">AS</span><span style="color:var(--shiki-color-text);"> FloorValue, CEIL(</span><span style="color:var(--shiki-token-constant);">123</span><span style="color:var(--shiki-color-text);">.</span><span style="color:var(--shiki-token-constant);">4567</span><span style="color:var(--shiki-color-text);">) </span><span style="color:var(--shiki-token-keyword);">AS</span><span style="color:var(--shiki-color-text);"> CeilValue;</span></span></code></pre></div>
|
|||
|
<h3 id="日期函数">日期函数<a aria-hidden="true" tabindex="-1" href="#日期函数" class="internal"> §</a></h3>
|
|||
|
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="sql" data-theme="default"><code data-language="sql" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);">-- 格式化日期/时间值</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">SELECT</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">DATE_FORMAT</span><span style="color:var(--shiki-color-text);">(</span><span style="color:var(--shiki-token-keyword);">NOW</span><span style="color:var(--shiki-color-text);">(), </span><span style="color:var(--shiki-token-string-expression);">'%Y-%m-%d %H:%i:%s'</span><span style="color:var(--shiki-color-text);">) </span><span style="color:var(--shiki-token-keyword);">AS</span><span style="color:var(--shiki-color-text);"> FormattedDate;</span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 返回当前日期和时间</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">SELECT</span><span style="color:var(--shiki-color-text);"> CURDATE() </span><span style="color:var(--shiki-token-keyword);">AS</span><span style="color:var(--shiki-color-text);"> TodayDate, CURTIME() </span><span style="color:var(--shiki-token-keyword);">AS</span><span style="color:var(--shiki-color-text);"> CurrentTime;</span></span></code></pre></div>
|
|||
|
<h3 id="转换函数">转换函数<a aria-hidden="true" tabindex="-1" href="#转换函数" class="internal"> §</a></h3>
|
|||
|
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="sql" data-theme="default"><code data-language="sql" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);">-- 将一个数据类型转换为另一个数据类型</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">SELECT</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-function);">CAST</span><span style="color:var(--shiki-color-text);">(</span><span style="color:var(--shiki-token-string-expression);">'123'</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">AS</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">INT</span><span style="color:var(--shiki-color-text);">) </span><span style="color:var(--shiki-token-keyword);">AS</span><span style="color:var(--shiki-color-text);"> IntegerType; </span></span>
|
|||
|
<span data-line> </span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-comment);">-- 类似于CAST,但提供了更多的格式选项</span></span>
|
|||
|
<span data-line><span style="color:var(--shiki-token-keyword);">SELECT</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-function);">CONVERT</span><span style="color:var(--shiki-color-text);">(</span><span style="color:var(--shiki-token-string-expression);">'123'</span><span style="color:var(--shiki-color-text);">, </span><span style="color:var(--shiki-token-keyword);">INT</span><span style="color:var(--shiki-color-text);">) </span><span style="color:var(--shiki-token-keyword);">AS</span><span style="color:var(--shiki-color-text);"> IntegerType;</span></span></code></pre></div></article></div><div class="right sidebar"><div class="graph "><h3>Graph View</h3><div class="graph-outer"><div id="graph-container" data-cfg="{"drag":true,"zoom":true,"depth":1,"scale":1.1,"repelForce":0.5,"centerForce":0.3,"linkDistance":30,"fontSize":0.6,"opacityScale":1,"showTags":true,"removeTags":[]}"></div><svg version="1.1" id="global-graph-icon" xmlns="http://www.w3.org/2000/svg" xmlnsXlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 55 55" fill="currentColor" xmlSpace="preserve"><path d="M49,0c-3.309,0-6,2.691-6,6c0,1.035,0.263,2.009,0.726,2.86l-9.829,9.829C32.542,17.634,30.846,17,29,17
|
|||
|
s-3.542,0.634-4.898,1.688l-7.669-7.669C16.785,10.424,17,9.74,17,9c0-2.206-1.794-4-4-4S9,6.794,9,9s1.794,4,4,4
|
|||
|
c0.74,0,1.424-0.215,2.019-0.567l7.669,7.669C21.634,21.458,21,23.154,21,25s0.634,3.542,1.688,4.897L10.024,42.562
|
|||
|
C8.958,41.595,7.549,41,6,41c-3.309,0-6,2.691-6,6s2.691,6,6,6s6-2.691,6-6c0-1.035-0.263-2.009-0.726-2.86l12.829-12.829
|
|||
|
c1.106,0.86,2.44,1.436,3.898,1.619v10.16c-2.833,0.478-5,2.942-5,5.91c0,3.309,2.691,6,6,6s6-2.691,6-6c0-2.967-2.167-5.431-5-5.91
|
|||
|
v-10.16c1.458-0.183,2.792-0.759,3.898-1.619l7.669,7.669C41.215,39.576,41,40.26,41,41c0,2.206,1.794,4,4,4s4-1.794,4-4
|
|||
|
s-1.794-4-4-4c-0.74,0-1.424,0.215-2.019,0.567l-7.669-7.669C36.366,28.542,37,26.846,37,25s-0.634-3.542-1.688-4.897l9.665-9.665
|
|||
|
C46.042,11.405,47.451,12,49,12c3.309,0,6-2.691,6-6S52.309,0,49,0z M11,9c0-1.103,0.897-2,2-2s2,0.897,2,2s-0.897,2-2,2
|
|||
|
S11,10.103,11,9z M6,51c-2.206,0-4-1.794-4-4s1.794-4,4-4s4,1.794,4,4S8.206,51,6,51z M33,49c0,2.206-1.794,4-4,4s-4-1.794-4-4
|
|||
|
s1.794-4,4-4S33,46.794,33,49z M29,31c-3.309,0-6-2.691-6-6s2.691-6,6-6s6,2.691,6,6S32.309,31,29,31z M47,41c0,1.103-0.897,2-2,2
|
|||
|
s-2-0.897-2-2s0.897-2,2-2S47,39.897,47,41z M49,10c-2.206,0-4-1.794-4-4s1.794-4,4-4s4,1.794,4,4S51.206,10,49,10z"></path></svg></div><div id="global-graph-outer"><div id="global-graph-container" data-cfg="{"drag":true,"zoom":true,"depth":-1,"scale":0.9,"repelForce":0.5,"centerForce":0.3,"linkDistance":30,"fontSize":0.6,"opacityScale":1,"showTags":true,"removeTags":[]}"></div></div></div><div class="toc desktop-only"><button type="button" id="toc" class><h3>Table of Contents</h3><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="fold"><polyline points="6 9 12 15 18 9"></polyline></svg></button><div id="toc-content"><ul class="overflow"><li class="depth-0"><a href="#概述" data-for="概述">概述</a></li><li class="depth-0"><a href="#语法图" data-for="语法图">语法图</a></li><li class="depth-0"><a href="#数据库操作" data-for="数据库操作">数据库操作</a></li><li class="depth-1"><a href="#查询数据库列表" data-for="查询数据库列表">查询数据库列表</a></li><li class="depth-1"><a href="#创建和选择数据库" data-for="创建和选择数据库">创建和选择数据库</a></li><li class="depth-1"><a href="#删除数据库" data-for="删除数据库">删除数据库</a></li><li class="depth-0"><a href="#数据表操作" data-for="数据表操作">数据表操作</a></li><li class="depth-1"><a href="#数据类型" data-for="数据类型">数据类型</a></li><li class="depth-1"><a href="#常见约束" data-for="常见约束">常见约束</a></li><li class="depth-1"><a href="#查询表结构" data-for="查询表结构">查询表结构</a></li><li class="depth-1"><a href="#查询当前数据库中的所有表" data-for="查询当前数据库中的所有表">查询当前数据库中的所有表</a></li><li class="depth-1"><a href="#修改表结构" data-for="修改表结构">修改表结构</a></li><li class="depth-1"><a href="#清空表内容" data-for="清空表内容">清空表内容</a></li><li class="depth-1"><a href="#删除表" data-for="删除表">删除表</a></li><li class="depth-0"><a href="#数据操纵语言dml" data-for="数据操纵语言dml">数据操纵语言(DML)</a></li><li class="depth-1"><a href="#插入数据" data-for="插入数据">插入数据</a></li><li class="depth-1"><a href="#更新数据" data-for="更新数据">更新数据</a></li><li class="depth-1"><a href="#删除数据" data-for="删除数据">删除数据</a></li><li class="depth-0"><a href="#数据查询语言dql" data-for="数据查询语言dql">数据查询语言(DQL)</a></li><li class="depth-1"><a href="#基本查询" data-for="基本查询">基本查询</a></li><li class="depth-1"><a href="#高级查询" data-for="高级查询">高级查询</a></li><li class="depth-0"><a href="#索引" data-for="索引">索引</a></li><li class="depth-1"><a href="#创建索引" data-for="创建索引">创建索引</a></li><li class="depth-1"><a href="#删除索引" data-for="删除索引">删除索引</a></li><li class="depth-1"><a href="#索引种类" data-for="索引种类">索引种类</a></li><li class="depth-0"><a href="#视图" data-for="视图">视图</a></li><li class="depth-1"><a href="#创建视图" data-for="创建视图">创建视图</a></li><li class="depth-1"><a href="#修改视图" data-for="修改视图">修改视图</a></li><li class="depth-1"><a href="#删除视图" data-for="删除视图">删除视图</a></li><li class="depth-0"><a href="#事务" data-for="事务">事务</a></li><li class="depth-1"><a href="#acid" data-for="acid">ACID</a></li><li class="depth-1"><a href="#示例" data-for="示例">示例</a></li><li class="depth-0"><a href="#数据控制语言dcl" data-for="数据控制语言dcl">数据控制语言(DCL)</a></li><li class="depth-1"><a href="#用户管理" data-for="用户管理">用户管理</a></li><li class="depth-1"><a
|
|||
|
function toggleCallout() {
|
|||
|
const outerBlock = this.parentElement;
|
|||
|
outerBlock.classList.toggle(`is-collapsed`);
|
|||
|
const collapsed = outerBlock.classList.contains(`is-collapsed`);
|
|||
|
const height = collapsed ? this.scrollHeight : outerBlock.scrollHeight;
|
|||
|
outerBlock.style.maxHeight = height + `px`;
|
|||
|
let current = outerBlock;
|
|||
|
let parent = outerBlock.parentElement;
|
|||
|
while (parent) {
|
|||
|
if (!parent.classList.contains(`callout`)) {
|
|||
|
return;
|
|||
|
}
|
|||
|
const collapsed2 = parent.classList.contains(`is-collapsed`);
|
|||
|
const height2 = collapsed2 ? parent.scrollHeight : parent.scrollHeight + current.scrollHeight;
|
|||
|
parent.style.maxHeight = height2 + `px`;
|
|||
|
current = parent;
|
|||
|
parent = parent.parentElement;
|
|||
|
}
|
|||
|
}
|
|||
|
function setupCallout() {
|
|||
|
const collapsible = document.getElementsByClassName(
|
|||
|
`callout is-collapsible`
|
|||
|
);
|
|||
|
for (const div of collapsible) {
|
|||
|
const title = div.firstElementChild;
|
|||
|
if (title) {
|
|||
|
title.removeEventListener(`click`, toggleCallout);
|
|||
|
title.addEventListener(`click`, toggleCallout);
|
|||
|
const collapsed = div.classList.contains(`is-collapsed`);
|
|||
|
const height = collapsed ? title.scrollHeight : div.scrollHeight;
|
|||
|
div.style.maxHeight = height + `px`;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
document.addEventListener(`nav`, setupCallout);
|
|||
|
window.addEventListener(`resize`, setupCallout);
|
|||
|
</script><script type="module">
|
|||
|
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs';
|
|||
|
const darkMode = document.documentElement.getAttribute('saved-theme') === 'dark'
|
|||
|
mermaid.initialize({
|
|||
|
startOnLoad: false,
|
|||
|
securityLevel: 'loose',
|
|||
|
theme: darkMode ? 'dark' : 'default'
|
|||
|
});
|
|||
|
document.addEventListener('nav', async () => {
|
|||
|
await mermaid.run({
|
|||
|
querySelector: '.mermaid'
|
|||
|
})
|
|||
|
});
|
|||
|
</script><script src="https://cdn.jsdelivr.net/npm/katex@0.16.7/dist/contrib/copy-tex.min.js" type="application/javascript"></script><script src="../../../postscript.js" type="module"></script></html>
|