表關係+表的詳細操作+欄位詳細操作+特殊表--day40
阿新 • • 發佈:2019-01-09
表的詳細操作
''' 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 ); '''