MySQL資料庫(五)外來鍵約束

2021-08-02 05:20:44 字數 3723 閱讀 1962

一、foreign key 的作用和要求

找到my.ini檔案,開啟,找到defult - stroage-engine = innodb,檢視引擎是否是innodb,如下圖:

案例

一、建立父類表和子類表,資料型別不一致導致150錯誤

mysql> create table sheng(

-> id smallint

unsigned

primary

keyauto_increment,

-> pname varchar(20) not

null

-> );

建立城市

案例二、建立父類表和子類表,符號不一致造成的錯誤

建立省份

mysql> create table sheng(

-> id smallint

unsigned

primary

keyauto_increment,

-> pname varchar(20) not

null

-> );

建立城市

案例三、正確的寫法

建立省份

mysql> create table sheng(

-> id smallint

unsigned

primary

keyauto_increment,

-> pname varchar(20) not

null

-> );

建立城市

mysql> create table city(

-> id smallint

unsigned

primary

keyauto_increment,

-> cname varchar(10) not

null,

-> pid smallint

unsigned,

-> foreign

key(pid) references sheng(id));

error 1005 (hy000): can't create table 't1.city' (errno: 150)

檢視我們父類是否新增了索引
mysql> show indexes from sheng\g;

*****

*****

*****

*****

*****

** 1. row **

*****

*****

*****

*****

*****

table: sheng

non_unique: 0

key_name: primary

seq_in_index: 1

column_name: id

collation: a

cardinality: 0

sub_part: null

packed: null

null:

index_type: btree

comment:

index_comment:

1 row in set (0.00 sec)

error:

no query specified

檢視我們外來鍵列city否新增了索引(們在驗證依賴列city,我們在建立pid的時候並沒有建立索引,檢視下有沒有建立)
mysql> show indexes from city\g;

*****

*****

*****

*****

*****

** 1. row **

*****

*****

*****

*****

*****

table: city

non_unique: 0

key_name: primary

seq_in_index: 1

column_name: id

collation: a

cardinality: 0

sub_part: null

packed: null

null:

index_type: btree

comment:

index_comment:

*****

*****

*****

*****

*****

** 2. row **

*****

*****

*****

*****

*****

table: city

non_unique: 1

key_name: pid

seq_in_index: 1

column_name: pid

collation: a

cardinality: 0

sub_part: null

packed: null

null: yes

index_type: btree

comment:

index_comment:

2 rows in set (0.00 sec)

error:

no query specified

Mysql資料庫主鍵 外來鍵等約束要點

檢視資料庫 show databases 建立資料庫 create database 資料庫名 刪除資料庫 drop database 資料庫名 單行注釋 注釋內容 多行注釋 內容 數值型 int tinyint微整型 smallint 小整型 小數型別 decimal 總位數,小數字 例 deci...

資料庫(外來鍵及其約束理解)

一 首先是外來鍵的定義 如果乙個欄位x在一張表 表一 中是主關鍵字,而在另外一張表 表二 中不是主關鍵字,則字段x稱為表二的外來鍵 換句話說如果關係模式r1中的某屬性集不是自己的主鍵,而是關係模式r2的主鍵,則該屬性集稱為是關係模式r1的外來鍵。二 主鍵表和外鍵表的理解 1 以公共關鍵字作主鍵的表為...

MySQL 資料庫外來鍵

如果表a的主關鍵字是表b中的字段,則該字段稱為表b的外來鍵,表a稱為主表,表b稱為從表。外來鍵是用來實現參照完整性的,不同的外來鍵約束方式將可以使兩張表緊密的結合起來,特別是修改或者刪除的級聯操作將使得日常的維護工作更加輕鬆。這裡以mysql為例,總結一下3種外來鍵約束方式的區別和聯絡。這裡以使用者...