MySQL對數據 對錶 對數據操作
- 2020 年 12 月 4 日
- 筆記
————恢復內容開始————
MySQL
資料庫的操作
| 創建 | create database 資料庫名; |
|---|---|
| 指定字符集 | create database 資料庫名 character set 字符集; |
| 刪除資料庫 | drop datebase 資料庫名; |
| 修改字符集 | alter database 資料庫名 default character set 字符集; |
| 創建查詢是否存在 | create database if not exists 資料庫名; |
| 查看資料庫 | show databases; |
| 查看在使用的資料庫 | select database(); |
| 使用資料庫 | use 資料庫名; |
| 查看資料庫創建 | show create database 資料庫名; |
單表操作 增刪改查
| 創建表 | create table 表名(欄位名 欄位類型(欄位長度),···); |
|---|---|
| 創建相同的表 | create table 新表名 like 舊錶名; |
| 添加欄位 | alter table 表名 add 欄位名 欄位類型(欄位長度); |
| 刪除表 | drop table 表名; |
| 判斷存在並刪除 | drop table if exists 表名; |
| 刪除欄位 | alter table 表名 drop 欄位名; |
| 修改欄位 | alter table 表名 change 舊欄位名 新欄位名 欄位類型(欄位長度); |
| 修改字符集 | alter table 表名 character set 字符集; |
| 修改表名 | rename table 舊錶名 to 新表名; |
| 修改欄位類型 | alter table 表名 modify 欄位名 新類型(類型長度); |
| 快捷修改字符集 | set names 字符集; |
| 查看資料庫中的表 | show tables; |
| 查看錶結構 | desc 表名; |
| 查看錶的創建 | show create table 表名; |
數據
| 插入數據 | insert into 表名(欄位名1,…)value(值1,…); |
|---|---|
| 插入全部 | insert into 表名(欄位名1,…最後欄位)value(值1,…最後值); |
| 蠕蟲複製 | create table 表A like 被複制的表; insert into 新表 select * from 舊錶; |
| 建表時添加約束 | create table 表名(欄位名 欄位類型(欄位長度) 欄位約束區,···,全欄位約束區(欄位名)); |
| 插入全部 | insert into 表名 value(值1,…最後值); |
| 有條件刪除數據 | delete from 表名 where 欄位名=值; |
| 摧毀表再創建 | truncate table 表名; |
| 無條件修改 | update 表名 set 欄位名=新值; |
| 有條件修改 | update 表名 set 欄位名=新值,欄位名=新值 where 欄位=值; |
| 查詢所有數據 | select * from 表名; |
| 查詢部分 | select 欄位名1,欄位名2… from 表名; |
| 去重查詢 | select distinct 欄位名… from 表名; |
| 結果參與運算 | select 欄位名+固定值 from 表名; |
| 欄位間運算 | select 欄位名1+欄位名2 別名 from 表名; |
| null值運算 | select 欄位名1 ifnull(欄位名2,默認值) 別名 from 表名; |
| 條件查詢 | select 欄位名 from 表名 where 條件; and or notnull |
| 範圍查詢 | select 欄位名 from 表名 where 欄位名 between 值1 and 值2; |
| 模糊查詢 | select * from 表名 where 欄位名 like “通配符欄位”; _ % |
| 組合排序 | select 欄位名 from 表名 where 條件 order by 欄位名1 asc/desc,欄位名2 asc/desc; |
| 聚合函數 | select 聚合函數(欄位名) from 表名;select 聚合函數 from 表名; |
| 聚合函數 | count() 計數 ifnull (欄位,替換為) sum()求和 max () 最大值 min() 最小值 avg(*)平均值 cast(avg(欄位名)as decimal(5,2))保留幾位小數 |
| 分組 | select 欄位名 from 表名 where 條件 group by 欄位名 having 條件; |
| limit分頁 | select 欄位名 from 表名 where語句 group by語句 having語句 order by語句 limit 開始條目,每頁條目; |
多表查詢
| 隱內連 | select 欄位名 from 表1,表2 where 條件 |
|---|---|
| 顯內連 | select 欄位名 from 表1 join 表2 on 條件 |
| 左外連 | select 欄位名 from 表1 left join 表2 on 條件(以表1為主,表2沒內容填null) |
| 右外連 | select 欄位名 from 表1 right join 表2 on 條件(以表2為主,表1沒內容填null) |
子查詢
| 單列單行 | 結果作為篩選條件,放在where後面 |
|---|---|
| 單列多行 | 結果作為篩選條件,放在where後面 |
| 多列多行 | 結果作為查詢的表,放在from後面 |
事務
| 開啟 | start transaction 開啟手動事務,不提交和回滾事務不真正執行,而是放到快取區 |
|---|---|
| 提交 | commit將快取區中的事務統一執行 |
| 回滾 | rollback回到事務語句開始時的狀態 |
| 回滾點 | savepoint 回滾點名字,回到回滾點語法:rollback to 回滾點名 |
| 查詢 | show variables like “%commit%” |
| 關閉自動 | set autocommit = 0,設置為1為自動 |
事務的特性
| 1原子性 | 事務不可分割,一個事務中的操作要麼都發生,要麼都不發生 |
|---|---|
| 2一致性 | 事務前後數據的完整性必須保持一致 |
| 3隔離性 | 多用戶並發訪問資料庫時,一個用戶的事務不能唄其他用戶的事務所干擾,多個並發事務之間要相互格力,不能互相影響 |
| 4持久性 | 一個事物一旦提交,對資料庫中的改變是永久性的,接下來資料庫發生故障也不會對其有任何影響 |
隔離級別
| 讀未提交 | read uncommitted 隔離級別最低,效率最高 |
|---|---|
| 讀已提交 | read committed 避免臟讀,Oracle 和 SQL Server |
| 可重複讀 | repeatable read 避免不可重複讀 MySQL |
| 串列化 | serializable 可避免一切並發訪問問題,效率最低 |
| 查詢 | show variables like “%isolation%” |
|---|---|
| 設置 | set global transaction isolation level 級別 |
概念
| 一對一 | 操作多的表加外鍵 |
|---|---|
| 一對多 | 多表加外鍵 |
| 多對多 | 建立中間表,兩個外鍵 |
| 外鍵約束 | 從表的某個欄位引用主表的主鍵(外鍵可以重複) |
| 建表時 | constraint 外鍵名 foreign key(外鍵欄位) references 主表名(主表主鍵) |
| 後增加 | alter table 從表 add constraint 外鍵名 foreign key(外鍵欄位)references 主表(主表主鍵) |
| 外鍵刪除 | alter table 從表 drop foreign key 外鍵名 |
| 第一 | 每個欄位不可再拆分 |
| 第二 | 表內有主鍵,一張表只描述一件事 |
| 第三 | 從表的外鍵必須使用主表的主鍵 |
| 產生 | 查詢多個表時,會把每個表數據與另一個表數據一一對應產生新的表 |
| 消除 | 找到兩個表的關聯條件並進行篩選 |
用戶許可權
| 創建用戶 | create user ‘用戶名’@’主機名’ identified by ‘密碼’; |
|---|---|
| 查詢許可權 | show grants for ‘用戶名’@’主機名’ |
| 授權用戶 | grant create,alter,drop,insert,update,delete,select on 資料庫名.表名 to ‘用戶名’@’主機名’;(可以用all代表所有許可權,*.*代表所有資料庫和所有表) |
| 撤銷授權 | revoke 許可權1,… on 資料庫名.表名 from ‘用戶名’@’主機名'(可以用all代表所有許可權,*.*代表所有資料庫和所有表) |
| 刪除用戶 | drop user ‘用戶名’@’主機名’; |
| 修改普通密碼 | set password for ‘用戶名’@’主機名’ = password(‘新密碼’); |
| 修改管理員密碼 | 先退出登錄,mysqladmin -uroot -p password 新密碼(沒有引號) 按提示輸入舊密碼 |
————恢復內容結束————

