級聯操作:
外來鍵:·一對多
·多對多
·一對一
·修改表
·複製表
主鍵: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...