tft每日頭條

 > 科技

 > mysql的外鍵可以保證什麼

mysql的外鍵可以保證什麼

科技 更新时间:2024-07-01 07:38:22

mysql的外鍵可以保證什麼?在數據庫中,數據表是數據庫中最重要、最基本的操作對象,是數據存儲的基本單位數據表被定義為列的集合,數據在表中是按照行和列的格式來存儲的每一行代表一條唯一的記錄,每一列代表記錄中的一個域,我來為大家講解一下關于mysql的外鍵可以保證什麼?跟着小編一起來看一看吧!

mysql的外鍵可以保證什麼(三分鐘了解mysql中主鍵)1

mysql的外鍵可以保證什麼

在數據庫中,數據表是數據庫中最重要、最基本的操作對象,是數據存儲的基本單位。數據表被定義為列的集合,數據在表中是按照行和列的格式來存儲的。每一行代表一條唯一的記錄,每一列代表記錄中的一個域。

一、操作前提

創建數據表必須是在已經有數據庫的前提下的哈,首先需要切換到數據庫中,使用use命令進行切換。

mysql> use yunweijia; Database changed mysql>

二、mysql創建/新建表

create table <表名> ( 字段1,數據類型 [列級别約束條件] [默認值], 字段2,數據類型 [列級别約束條件] [默認值], 字段3,數據類型 [列級别約束條件] [默認值], ------ [表級别約束條件] )

例如我們創建一個表結構如下:

字段名稱數據類型備注idINT員工編号nameVARCHAR(25)員工名稱deptidINT所在部門編号moneyFLOAT工資

1、首先我們需要創建一個數據庫;

mysql> create database test_db; Query OK, 1 row affected (0.02 sec) mysql>

2、然後進入這個數據庫;

mysql> use test_db; Database changed mysql>

3、創建表;

mysql> CREATE TABLE `test_user` ( -> `id` int(0) NULL DEFAULT NULL COMMENT '員工編号', -> `name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '員工姓名', -> `deptid` int(0) NULL DEFAULT NULL COMMENT '所在部門編号', -> `money` float NULL DEFAULT NULL COMMENT '工資' -> ); Query OK, 0 rows affected, 2 warnings (0.03 sec) mysql>

4、查看表;

mysql> show tables; ------------------- | Tables_in_test_db | ------------------- | test_user | ------------------- 1 row in set (0.00 sec) mysql> desc test_user; -------- ------------- ------ ----- --------- ------- | Field | Type | Null | Key | Default | Extra | -------- ------------- ------ ----- --------- ------- | id | int | YES | | NULL | | | name | varchar(25) | YES | | NULL | | | deptid | int | YES | | NULL | | | money | float | YES | | NULL | | -------- ------------- ------ ----- --------- ------- 4 rows in set (0.00 sec) mysql>

釋義:

desc命令是查看mysql表結構的命令;

三、使用主鍵約束

主鍵,又稱主碼,是表中一列或多列的組合。主鍵約束(Primary KeyCONSTRAINT)要求主鍵列的數據唯一,并且不允許為空。主鍵能夠唯一地标識表中的一條記錄,可以結合外鍵來定義不同數據表之間的關系,并且可以加快數據庫查詢的速度。主鍵和記錄之間的關系如同身份證和人之間的關系,它們之間是一一對應的。主鍵分為兩種類型:單字段主鍵多字段聯合主鍵

1、單字段主鍵

主鍵由一個字段組成,SQL語句格式分為以下兩種情況。

(1.1)在定義列的時候指定主鍵

語法:

字段名 數據類型 PRIMARY KEY [默認值]

示例:

mysql> CREATE TABLE `test_user_2` ( -> `id` int(0) PRIMARY KEY COMMENT '員工編号' , -> `name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '員工姓名', -> `deptid` int(0) NULL DEFAULT NULL COMMENT '所在部門編号', -> `money` float NULL DEFAULT NULL COMMENT '工資' -> ); Query OK, 0 rows affected, 2 warnings (0.03 sec) mysql>

看下結果:

mysql> show tables; ------------------- | Tables_in_test_db | ------------------- | test_user | | test_user_2 | ------------------- 2 rows in set (0.00 sec) mysql> desc test_user_2; -------- ------------- ------ ----- --------- ------- | Field | Type | Null | Key | Default | Extra | -------- ------------- ------ ----- --------- ------- | id | int | NO | PRI | NULL | | | name | varchar(25) | YES | | NULL | | | deptid | int | YES | | NULL | | | money | float | YES | | NULL | | -------- ------------- ------ ----- --------- ------- 4 rows in set (0.00 sec) mysql>

(1.2)在定義完所有列之後指定主鍵;

語法:

[CONSTRAINT <約束名>] PRIMARY KEY [字段名]

示例:

mysql> CREATE TABLE `test_user_3` ( -> `id` int(0) COMMENT '員工編号' , -> `name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '員工姓名', -> `deptid` int(0) NULL DEFAULT NULL COMMENT '所在部門編号', -> `money` float NULL DEFAULT NULL COMMENT '工資', -> PRIMARY KEY(id) -> ); Query OK, 0 rows affected, 2 warnings (0.03 sec) mysql>

看下結果:

mysql> show tables; ------------------- | Tables_in_test_db | ------------------- | test_user | | test_user_2 | | test_user_3 | ------------------- 3 rows in set (0.00 sec) mysql> desc test_user_3; -------- ------------- ------ ----- --------- ------- | Field | Type | Null | Key | Default | Extra | -------- ------------- ------ ----- --------- ------- | id | int | NO | PRI | NULL | | | name | varchar(25) | YES | | NULL | | | deptid | int | YES | | NULL | | | money | float | YES | | NULL | | -------- ------------- ------ ----- --------- ------- 4 rows in set (0.00 sec) mysql>

2、多字段聯合主鍵

主鍵由多個字段聯合組成,語法規則如下:

PRIMARY KEY [字段1, 字段2, ...,字段n]

示例:

mysql> CREATE TABLE `test_user_4` ( -> `id` int(0) COMMENT '員工編号' , -> `name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT '員工姓名', -> `deptid` int(0) COMMENT '所在部門編号', -> `money` float NULL DEFAULT NULL COMMENT '工資', -> PRIMARY KEY(name, deptid) -> ); Query OK, 0 rows affected, 2 warnings (0.03 sec) mysql>

看下結果:

mysql> show tables; ------------------- | Tables_in_test_db | ------------------- | test_user | | test_user_2 | | test_user_3 | | test_user_4 | ------------------- 4 rows in set (0.00 sec) mysql> desc test_user_4; -------- ------------- ------ ----- --------- ------- | Field | Type | Null | Key | Default | Extra | -------- ------------- ------ ----- --------- ------- | id | int | YES | | NULL | | | name | varchar(25) | NO | PRI | NULL | | | deptid | int | NO | PRI | NULL | | | money | float | YES | | NULL | | -------- ------------- ------ ----- --------- ------- 4 rows in set (0.00 sec) mysql>

語句執行後,便創建了一個名為test_user_4的數據表,name字段和deptid字段組合在一起成為test_user_4的多字段聯合主鍵。

四、使用外鍵約束

外鍵用來在兩個表的數據之間建立連接,可以是一列或者多列。一個表可以有一個或多個外鍵。外鍵對應的是參照完整性,一個表的外鍵可以是空值,若不為空值,則每一個外鍵值必須等于另一個表中主鍵的某個值

mysql中外鍵是什麼?

外鍵:首先他是表中的一個字段,雖可以不是本表的主鍵,但要對應另外一個表的主鍵。外鍵的主要作用是保證數據引用的完整性,定義外鍵後,不允許删除在另一個表中具有關聯關系的行。外鍵的作用是保持數據的一緻性、完整性。

什麼是主表?什麼是從表?

主表(父表):對于兩個具有關聯關系的表而言,相關聯字段中主鍵所在的那個表是主表

從表(子表):對于兩個具有關聯關系的表而言,相關聯字段中外鍵所在的那個表是從表

如何在mysql中創建外鍵呢?

語法:

[CONSTRAINT <外鍵名>] FOREIGN KEY 字段名1 [ ,字段名2,…] REFERENCES <主表名> 主鍵列1 [ ,主鍵列2,…]

外鍵名為定義的外鍵約束的名稱,一個表中不能有相同名稱的外鍵

字段名表示子表需要添加外鍵約束的字段列;

主表名即被字表外鍵所依賴的表的名稱;

主鍵列表示主表中定義的主鍵列,或者列組合。

例如我們新建一個test_dept的表,表結構如下:

字段名稱數據類型備注idINT部門編号nameVARCHAR(30)部門名稱locationVARCHAR(50)部門位置

首先我們創建一下這個表:

mysql> CREATE TABLE `test_dept` ( -> `id` int(0) PRIMARY KEY COMMENT '部門編号', -> `name` varchar(30) CHARACTER set utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT '部門名稱', -> `localhost` varchar(50) CHARACTER set utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT '部門位置' -> ); Query OK, 0 rows affected, 1 warning (0.03 sec) mysql> show tables; ------------------- | Tables_in_test_db | ------------------- | test_dept | | test_user | | test_user_2 | | test_user_3 | | test_user_4 | ------------------- 5 rows in set (0.00 sec) mysql>

定義數據表test_user_5,讓他的鍵deptid作為外鍵關聯到test_dept中的主鍵id,那麼我們的SQL語句應該這麼寫;

mysql> CREATE TABLE `test_user_5` ( -> `id` int(0) PRIMARY KEY COMMENT '員工編号' , -> `name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT '員工姓名', -> `deptid` int(0) COMMENT '所在部門編号', -> `money` float NULL DEFAULT NULL COMMENT '工資', -> CONSTRAINT fk_user_dept FOREIGN KEY(deptid) REFERENCES test_dept(id) -> ); Query OK, 0 rows affected, 2 warnings (0.07 sec) mysql>

通過上面的語句,可以看到,我們創建了一個名為test_user_5的表,主鍵為id,且創建了一個名為fk_user_dapt的外鍵約束,外鍵名稱為deptid,其依賴于test_dept表中的主鍵ID。

注意點

子表的外鍵必須關聯父表的主鍵,且關聯字段的數據類型必須匹配,如果類型不一樣,則創建子表時,就會出現錯誤ERROR 1005 (HY000):Can't create table 'database.tablename'(errno: 150)。

五、使用非空約束

非空約束(Not Null Constraint)指字段的值不能為空。對于使用了非空約束的字段,如果用戶在添加數據時沒有指定值,數據庫系統會報錯。

語法:

剩餘内容請轉至VX公衆号 “運維家” ,回複 “193” 查看。

------ “運維家” ,回複 “193” ------

------ “運維家” ,回複 “193” ------

------ “運維家” ,回複 “193” ------

linux入門pdf,linux對硬件要求,配置linux時間服務器,linux系統盤滿了,linux多次執行,linuxcrc命令;

linux拷出文件命令,linux可以下載遊戲嘛,linux修改書時間,linux導入表csv文件,如何切換linux的圖形界面;

linux查看是否安裝db2,linux找不到進程目 錄,linux怎樣看端口号,linuxgcc4.8,linux系統主機布局,linux傳文件除了ssh,配置橋接linux;

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved