Mysql主鍵外來鍵操作

2021-10-10 08:44:38 字數 3084 閱讀 3073

級聯操作:

外來鍵:·一對多

·多對多

·一對一

·修改表

·複製表

主鍵:primary key auto_increment(primary key是主鍵通常和auto_increment自動增加混合使用)

把所有資料存放到一張表中的弊端:

組織結構不清晰

浪費硬碟空間

擴充套件性差

create table school(

id int primary key auto_increment, #primary key設定主鍵

school_name char(60)

);create table class(

id int primary key auto_increment,

class_name char(40),

school_id int,

foreign key(school_id) references school(id) #設定外來鍵

on update cascade #允許資料更新

on delete cascade #允許資料刪除

);insert into school(school_name) values

('上海虹橋校區'),

('上海康橋校區');

insert into class(class_name,school_id) values

('python1班',1),

('python2班',2),

('python3班',1);

刪除資料

mysql> delete from school where id=2;
刪除資料後school中的id欄位為2的資料和class表中school_id欄位為2的資料都會刪除掉。

更新資料:

mysql> update school set id=3 where school='上海虹橋校區';
更新主鍵school中的id資料後,應為和class主外來鍵繫結,外來鍵class中的school_id欄位也進行更新。

針對多對多這樣的情況不能直接進行兩個表關係繫結,不論怎麼建立都會報錯,新增一張表,這個表來進行兩個表的關係繫結

圖書表與作者表之間的關係

在兩張表的角度:

1、在圖書的角度:一本書可以對應乙個作者也可以對應多個作者

2、在作者角度:乙個作者可以寫多本書

雙方都能根據一條資料記錄對應對方多條記錄,這種關係就是多對多

面對這種雙方相互對應沒有辦法直接建立關係,解決辦法是另外建立一張關係表

create table author(

id int primary key auto_increment,

name char(16)

);create table book(

id int primary key auto_increment,

book_name char(16),

price int

);insert into author(name) values('egon'),('alex'),('***');

insert into book(book_name,price) values('python',20000),

('降龍十八掌',99.99),

('葵花寶典',9.9),

('九陰真經',8.8);

create table author_to_book(

id int primary key auto_increment,

author_id int,

book_id int,

foreign key(author_id) references author(id)

on update cascade

on delete cascade,

foreign key(book_id) references book(id)

on update cascade

on delete cascade

);insert into author_to_book(author_id,book_id) values

(1,3),

(1,4),

(2,1),

(2,3),

(2,4),

(3,4);

#一對一

一張表強制拆分成為了兩張表

create table customer(

id int primary key auto_increment,

name char(20) not null,

qq char(10) not null,

phone char(11) not null default '11111111111'

);create table student(

id int primary key auto_increment,

class_name char(20) not null,

customer_id int unique, #該欄位唯一

foreign key(customer_id) references customer(id)

on delete cascade

on update cascade

);insert into customer(name,qq,phone) values

('egon','107170955','13579035789'),

('own','107170966','13579035469'),

('***','100000000','13333035789'),

('tank','106171955','13579035789')

;insert into student(class_name,customer_id) values

('語文','1'),

('數學','2'),

('英語','3'),

('地理','4');

mysql 主鍵 外來鍵

1 候選鍵 關係中的乙個屬性組,其值能唯一標識乙個元組,若從該屬性組中去掉任何乙個屬性,它就不具有這一性質了,這樣的屬性組稱作候選碼。比如人的自然屬性 身高,體重,年齡,指紋樣式.2 主鍵 當有多個候選碼時,可以選定乙個作為主碼,選定的候選碼稱主鍵。主鍵是能確定一條記錄的唯一標識 比如上面例子中的指...

mysql主鍵 外來鍵

主鍵是能確定一條記錄的唯一標識,主鍵字段必須唯一,必須非空,乙個表中只能有乙個主鍵,主鍵可以包含乙個或多個字段。打個比方,一條記錄包括身份正號,姓名,年齡,學校,國籍,性別等。身份證號是唯一能確定你這個人的,其他都可能有重複,所以,身份證號是主鍵。外來鍵表示了兩個關係之間的相關聯絡。以另乙個關係的外...

mysql的主鍵 外來鍵約束 MySQL 主鍵外來鍵

笛卡兒積 多表查詢 多個表變成乙個表 完整性約束條件 primary key 標識該屬性為該錶的主鍵,可以唯一的標識對應的元組 foreign key 標識該屬性為該錶的外來鍵,是與之聯絡的某錶的主鍵 not null 標識該屬性不能為空 unique 標識該屬性的值是唯一的 auto increm...