mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2025-06-10 07:54:06 +08:00
27 lines
3.8 KiB
HTML
27 lines
3.8 KiB
HTML
<div class="m-bg">
|
||
<h1>SQL FOREIGN KEY 约束</h1>
|
||
<h2>SQL FOREIGN KEY 约束</h2> <p>一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。</p> <p>让我们通过一个实例来解释外键。请看下面两个表:</p> <p>"Persons" 表:</p> <table class="reference notranslate">
|
||
<tr>
|
||
<th align="left">P_Id</th> <th align="left">LastName</th> <th align="left">FirstName</th> <th align="left">Address</th> <th align="left">City</th> </tr>
|
||
<tr>
|
||
<td>1</td> <td>Hansen</td> <td>Ola</td> <td>Timoteivn 10</td> <td>Sandnes</td> </tr>
|
||
<tr>
|
||
<td>2</td> <td>Svendson</td> <td>Tove</td> <td>Borgvn 23</td> <td>Sandnes</td> </tr>
|
||
<tr>
|
||
<td>3</td> <td>Pettersen</td> <td>Kari</td> <td>Storgt 20</td> <td>Stavanger</td> </tr>
|
||
</table>
|
||
<p>"Orders" 表:</p> <table class="reference notranslate">
|
||
<tr>
|
||
<th align="left" width="15%">O_Id</th> <th align="left" width="20%">OrderNo</th> <th align="left" width="15%">P_Id</th> </tr>
|
||
<tr>
|
||
<td>1</td> <td>77895</td> <td>3</td> </tr>
|
||
<tr>
|
||
<td>2</td> <td>44678</td> <td>3</td> </tr>
|
||
<tr>
|
||
<td>3</td> <td>22456</td> <td>2</td> </tr>
|
||
<tr>
|
||
<td>4</td> <td>24562</td> <td>1</td> </tr>
|
||
</table>
|
||
<p>请注意,"Orders" 表中的 "P_Id" 列指向 "Persons" 表中的 "P_Id" 列。</p> <p>"Persons" 表中的 "P_Id" 列是 "Persons" 表中的 PRIMARY KEY。</p> <p>"Orders" 表中的 "P_Id" 列是 "Orders" 表中的 FOREIGN KEY。</p> <p>FOREIGN KEY 约束用于预防破坏表之间连接的行为。</p> <p>FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。</p> <h2>CREATE TABLE 时的 SQL FOREIGN KEY 约束</h2> <p>下面的 SQL 在 "Orders" 表创建时在 "P_Id" 列上创建 FOREIGN KEY 约束:</p> <p><b>MySQL:</b></p> <div class="code notranslate"><pre><div> CREATE TABLE Orders<br/> (<br/> O_Id int NOT NULL,<br/> OrderNo int NOT NULL,<br/> P_Id int,<br/> PRIMARY KEY (O_Id),<br/> FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)<br/> )</div></pre></div> <p><b>SQL Server / Oracle / MS Access:</b></p> <div class="code notranslate"><pre><div> CREATE TABLE Orders<br/> (<br/> O_Id int NOT NULL PRIMARY KEY,<br/> OrderNo int NOT NULL,<br/> P_Id int FOREIGN KEY REFERENCES Persons(P_Id)<br/> )</div></pre></div> <p>如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束,请使用下面的 SQL 语法:</p> <p><b>MySQL / SQL Server / Oracle / MS Access:</b></p> <div class="code notranslate"><pre><div> CREATE TABLE Orders<br/> (<br/> O_Id int NOT NULL,<br/> OrderNo int NOT NULL,<br/> P_Id int,<br/> PRIMARY KEY (O_Id),<br/> CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)<br/> REFERENCES Persons(P_Id)<br/> )</div></pre></div> <h2>ALTER TABLE 时的 SQL FOREIGN KEY 约束</h2> <p>当 "Orders" 表已被创建时,如需在 "P_Id" 列创建 FOREIGN KEY 约束,请使用下面的 SQL:</p> <p><b>MySQL / SQL Server / Oracle / MS Access:</b></p> <div class="code notranslate"><pre><div> ALTER TABLE Orders<br/> ADD FOREIGN KEY (P_Id)<br/> REFERENCES Persons(P_Id)</div></pre></div> <p>如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束,请使用下面的 SQL 语法:</p> <p><b>MySQL / SQL Server / Oracle / MS Access:</b></p> <div class="code notranslate"><pre><div> ALTER TABLE Orders<br/> ADD CONSTRAINT fk_PerOrders<br/> FOREIGN KEY (P_Id)<br/> REFERENCES Persons(P_Id)</div></pre></div> <h2>撤销 FOREIGN KEY 约束</h2> <p>如需撤销 FOREIGN KEY 约束,请使用下面的 SQL:</p> <p><b>MySQL:</b></p> <div class="code notranslate"><pre><div> ALTER TABLE Orders<br/> DROP FOREIGN KEY fk_PerOrders</div></pre></div> <p><b>SQL Server / Oracle / MS Access:</b></p> <div class="code notranslate"><pre><div> ALTER TABLE Orders<br/> DROP CONSTRAINT fk_PerOrders</div></pre></div> <br/><div class="text-center padding-10 margin-t-5">
|
||
</div>
|
||
</div> |