1. 程式人生 > >表關係+表的詳細操作+欄位詳細操作+特殊表--day40

表關係+表的詳細操作+欄位詳細操作+特殊表--day40

表的詳細操作

'''
1.修改表名
alter table 舊錶名 rename 新表名;
​
2.修改表的引擎與字元編碼
alter table 表名 engine="引擎名" charset="編碼名";
​
3.複製表 *
# 結構
create table 新表名 like 舊錶名;
eg:1
# 將tt的表結構複製到新表nt中, 約束條件一併複製
create table nt like tt;

eg:2
# 將tt的表結構複製到新表nt1中, 約束條件不會複製
create table nt1 select * from tt where 1=2; 
​
# 結構+資料
create table 新表名 select * from 舊錶名;
注: 會複製表結構+資料, 但不會複製約束條件
​
4.清空表
truncate 表名;
#注:表被重置,自增欄位重置
''' 表中欄位的詳細操作(****) create table t2( id int primary key auto_increment, x int, y int ); insert into t2(x, y) values(10, 20), (100, 200), (1000, 2000); ​ ''' 1.修改欄位資訊 alter table 表名 modify 欄位名 型別[(寬度) 約束]; alter table t2 modify x bigint default 0; # 模式不同, 涉及精度問題 ​ 2.修改欄位名及資訊 alter table 表名 change 舊欄位名 新欄位名 型別[(寬度) 約束]; alter table t2 change y c char(10) not null; # 模式不同, 涉及型別轉換問題 ​ 3.新增欄位名 # 末尾新增 alter table 表名 add 欄位名 型別[(寬度) 約束], ..., add 欄位名 型別[(寬度) 約束]; alter table t2 add age int, add gender enum("male", "female", "wasai") default "wasai"; ​ # 首尾新增 alter table 表名 add 欄位名 型別[(寬度) 約束] first; # 指定位新增:指定欄位後 alter table 表名 add 欄位名 型別[(寬度) 約束] after 舊欄位名; alter table t2 add y int after x; ​ 4.刪除欄位名 alter table 表名 drop 欄位名; alter table t2 drop y;
'''

特殊表 (mysql.user) => 使用者管理(*****)

'''
# 操作前提:登入root使用者
​
1.重要欄位
Host | User | Password
​
2.新建使用者
create user 使用者名稱@主機名 identified by '密碼'; # 正確
create user [email protected] identified by 'zero';

# 錯誤​
注:insert into mysql.user(Host,User,Password) values("主機名","使用者名稱",password("密碼")); 
​
3.設定使用者許可權
grant 許可權們 on 資料庫名.表名 to 使用者名稱@主機名 [with grant option];
grant create on db1.* to 
[email protected]
with grant option; 注:許可權有select,delete,update,insert,drop..., all代表所有許可權 注:資料庫名,表名可以用*替換,代表所有 注:設定許可權時如果沒有當前使用者,會自動建立使用者,提倡使用 重點: grant all on db1.* to [email protected] identified by 'owen'; # (建立使用者)設定許可權 ​ 4.撤銷許可權 revoke 許可權名 on 資料庫名.表名 from 使用者名稱@主機名; revoke delete on db1.* from [email protected]; ​ 5.修改密碼 set password for 使用者名稱@主機名 = password('新密碼'); set password for [email protected] = password('123'); ​ 6.刪除使用者 drop user 使用者名稱@主機名;
'''

表關係

社會中儲存需要可以構建成表的資料, 它們形成的表,往往之間儲存某種或某些社會關係,
mysql資料庫建立表結構就是社會中產生的各種資料, 分門別類管理 但mysql建立的(程式碼層次的)表之間, 同樣需要處理表與表之間的關係 形成了 多對一
| 多對多 | 一對一 三種關係 多對一 ''' 案例:員工employees表 | 部門department表 ​ 建表規則: 先建立主表,再建立從表,在從表中設定主表的唯一欄位(通常為主鍵)作為外來鍵 ​ 建表語法: create table 主表( id int primary key auto_increment, ... ); create table dep( id int primary key auto_increment, name varchar(16), work varchar(16) ); create table 從表( id int primary key auto_increment, ... 主表_id int, # 只是在從表中起了一個名字, 該名字和主表主鍵對應,所有起了個見名知義的名字 foreign key(主表_id) references 主表(唯一欄位名id) on update cascade on delete cascade ); create table emp( id int primary key auto_increment, name varchar(16), salary float, dep_id int, foreign key(dep_id) references dep(id) # 設定關聯 on update cascade # 設定級聯 on delete cascade ); ​ 插入記錄規則: 先插入主表資料,再插入從表資料 insert into dep values(1, '市場部', '銷售'), (2, '教學部', '授課'); insert into emp(name, salary, dep_id) values('egon', 3.0, 2), ('yanghuhu', 2.0, 2),('sanjiang', 10.0, 1),('owen', 88888.0, 2), ('liujie', 8.0, 1); ​ 更新刪除資料: 兩表間相互影響,先從依賴資料入手,再進行更新刪除操作 eg:1 刪除主表dep中一個部門 delete from dep where id=1; => 從表emp中屬於該部門的員工都被刪除了 ​ 更新從表emp中一個員工的部門 update emp set dep_id=3 where name='egon'; <= 部門必須存在 insert into dep values(3, '管理部', '吃飯睡覺打豆豆, 明確團隊方針'); '''

多對多

'''
案例:作者author表 | 書book表
​
建表規則:
新建第三張表,通過兩個外來鍵形成多對多關係
​
建表語法:
create table 表1(
id int primary key auto_increment,
...
);
create table book(
id int primary key auto_increment,
name varchar(16),
price int
);
create table 表2(
id int primary key auto_increment,
...
);
create table author(
id int primary key auto_increment,
name varchar(16)
);
create table 關係表(
id int primary key auto_increment,
表1_id int,
表2_id int,
foreign key(表1_id) references 表1(id)
on update cascade
on delete cascade,
foreign key(表2_id) references 表2(id)
on update cascade
on delete cascade
);
create table book_author(
id int primary key auto_increment,
book_id int,
author_id int,
foreign key(book_id) references book(id) # 設定關聯
on update cascade
on delete cascade,
foreign key(author_id) references author(id) # 設定關聯
on update cascade
on delete cascade
);
'''

一對一

'''
案例:丈夫husband表 | 妻子wife表
​
建表規則:
未存放外來鍵的表被依賴,稱之為左表;存放外來鍵的表示依賴表,稱之為右表;先操作左邊再操作右表
​
建表語法:
create table 左表(
id int primary key auto_increment,
...
);
create table husband(
id int primary key auto_increment,
name varchar(16)
);
create table 右表(
id int primary key auto_increment,
...
左表_id int unique, # 一對一的外來鍵需要唯一性
foreign key(左表_id) references 左表(id)
on update cascade
on delete cascade
);
create table wife(
id int primary key auto_increment,
name varchar(16),
husband_id int unique, # 一對一的外來鍵需要唯一性
foreign key(husband_id) references husband(id)
on update cascade
on delete cascade
);
'''