show databases;
use db;
show tables;
select * from stu;
-- 約束 : 主鍵約束 primary key 非空且唯一
-- 非空約束 not null
-- 唯一約束 unique
-- 外來鍵約束 foreign key
create table stu2 (id int primary key, name varchar(20) not null,address varchar(77));
select * from stu2;
insert into stu2 values ( 1, "liang","biejing");
-- 修改表中的約束
alter table stu2 modify address varchar(20) unique;
select * from stu2;
insert into stu2 values (2,"shu","beijing");
select * from stu2;
insert into stu2 values (3,"cheng", "shanghai");
select * from stu2;
-- 刪除 唯一約束 不能使用modify
alter table stu2 drop index address;
-- 再建立表之後新增唯一約束alter
alter table stu2 modify address varchar(20) unique;
-- 刪除主鍵
alter table stu2 drop primary key ;
-- 在建立表之後新增主鍵
alter table stu2 modify id int primary key;
-- 實現自動增長
alter table stu2 modify id int primary key auto_increment;
insert into stu2 values ( null,"python","nihao") ;
select * from stu2;
show create table stu2;
-- 外來鍵約束
-- 建立部門表(id,dep_name,dep_location) -- 一方,主表
create table department( id int primary key auto_increment, dep_name varchar(20), dep_location varchar(20) );
-- 建立員工表(id,name,age,dep_id) -- 多方,從表
create table employee( id int primary key auto_increment, name varchar(20), age int, dep_id int ,
constraint emp_dept_fk foreign key (dep_id) references department(id));
-- 新增2個部門
insert into department values(null, '研發部','廣州'),
(null, '銷售部', '深圳'); select * from department;
-- 新增員工,dep_id表示員工所在的部門
insert into employee (name, age, dep_id) values ('張三', 20, 1);
insert into employee (name, age, dep_id) values ('李四', 21, 1);
insert into employee (name, age, dep_id) values ('王五', 20, 1);
insert into employee (name, age, dep_id) values ('老王', 20, 2);
insert into employee (name, age, dep_id) values ('大王', 22, 2);
insert into employee (name, age, dep_id) values ('小王', 18, 2);
select *from employee;
drop table employee;
drop table department;
select * from employee;
select *from department;
alter table employee drop foreign key emp_dept_fk;
-- 新增外來鍵 一對多的時候 員工和部門之間就是 多對一的關係 我們在多的一地方放置一的主鍵 作為外來鍵
-- 並且設定級聯操作
alter table employee add constraint hhh_em foreign key (dep_id) references department(id) on update cascade on delete cascade;
1. 一對一的關係:人和身份證之間的關係
吧處理方式 :可以再任意一方新增外來鍵, 我個人認為 完全可以用一張表來表示 ,並且使得這個外來鍵唯一約束 unique
2. 一對多的關係 :例如員工和部門之間的關係 , 乙個員工對應乙個部門 , 乙個部門可以的對應個員我們在設計表的時候** 再多的一放建立外來鍵 放置一的一放的主鍵 讓他們產生關聯*
constraint 外鍵名 foreign key (從表的主鍵) references departement(主表的主鍵);
3. 多對多的關係: 例子:學生和課程之間 就是多對多的關係, 我們通過建立聯合主鍵的方式, (也就是建立第三張表 裡面放置對方的主鍵 )
## 第一正規化 ##
1. 每一列都是不可分割的原子項資料(列是唯一的 不存在兩個列,不是符合列
2. 存在的問題:資料冗餘重複的太多了 ,資料新增和刪除 會產生不合法的資料
----------
## 第二正規化 ##
### 在1nf的基礎上 非屬性碼 必須完全依賴於候選碼(消除非主屬性對主碼的部分函式依賴)消除部分依賴 ###
1. 函式依賴:如果a--> b 如果通過a的屬性推倒出唯一的b 就說b依賴於a;學號——> 姓名
2. 完全函式依賴: (學號, 課程名稱)--> 分數 前面的就是乙個屬性組
a---> b a是乙個屬性組則 b屬性推倒確定需要依據a中屬性組的所有d的屬性值
3.部分函式依賴:屬性組中的某乙個屬性組可以確定b屬性的的值---a(學號, 課程名稱)--> b分數
4. 傳遞函式依賴: a——>b b-->c 就可以說c傳遞函式與a;
學號————>院系名--> 院長
5.碼:屬性或者屬性組 被其他屬性完全依賴, 就說這個屬性(屬性組) 為該錶的碼
----------
## 第三正規化 ##(**消除傳遞依賴**)
如圖所示:1nf解決的是:保證列的原子性 保證沒有復合列 就變成了如下的**
mysql三大正規化 答案 資料庫三大正規化通俗理解
資料庫三大正規化通俗理解 1 原子性,要求屬性具有原子性,不可再分解。表 欄位1 欄位2 欄位2.1 欄位2.2 欄位3 如學生 學號,姓名,性別,出生年月日 如果認為最後一列還可以再分成 出生年,出生月,出生日 它就不是一正規化了,否則就是 2 唯一性,乙個表只能說明乙個事物,即實體的惟一性。表 ...
mysql三大正規化的概念 資料庫三大正規化
何為正規化 顧名思義,規範的方式。資料庫作為底層的儲存系統,直接影響業務層的效能,因此,為了能夠讓開發人員科學規範地使用資料庫,三大正規化應運而生。本文將以較為簡潔的文字並舉例描述三大正規化。第一正規化 1nf 第一正規化是指關係表r中的每列都是原子不可分的項,即每個屬性都是最基本的資料項。這裡用 ...
資料庫三大正規化和五大約束(概念)
1 資料表中的每一列 字段 必須是不可拆分的最小單元,即確保每一列的原子性。滿足第一正規化是關係模式規範化的最低要求。2 兩列的屬性相近或相似或一樣,盡量合併屬性一樣的列,確保不產生冗餘資料。滿足1nf後要求表中的所有列,每一行的資料只能與其中一列相關,即一行資料只做一件事。只要資料列 現資料重複,...