帶你學夠浪:Go語言基礎系列 - 10分鐘學方法和介面
阿新 • • 發佈:2020-07-06
MYSQL
一.基本的命令列操作
show databases;--檢視所有的資料庫 use school;--切換資料庫 show tables;--檢視資料庫中所有的表 describe student;--顯示資料庫中表的資訊;查看錶結構 create database test;--建立資料庫 exit;--退出連線 --單行註釋 /* 多行註釋 */
DDL定義 DML操作 DQL查詢 DCL控制
二.操作資料庫
操作資料庫->操作資料庫中的表->操作資料庫中的資料
操作資料庫
mysql關鍵字不區分大小寫
1).建立資料庫
create database [if not exists] shool;
2).刪除資料庫
drop database [if exists] shool;
3).使用資料庫
use shool;
4).檢視資料庫
show databases;
資料庫的列型別
1)數值
- tinyint 十分小的資料 1個位元組
- smallint 較小的資料 2個位元組
- mediumint 中等大小的書庫 3個位元組
- int 標準的整數 4個位元組
- bigint 較大的資料 8個位元組
- float 浮點數 4個位元組
- double 浮點數 8個位元組(精度問題)
- decimal 字串形式的浮點數 金融計算一般使用decimal
2)字串
- char 字串固定大小 0-255
- varchar 可變字串 0-65535
- tinyrext 微型文字 2^8-1
- text 文字串 2^16-1
3)時間日期
- date YYYY-MM-DD 日期格式
- time HH:mm:ss 時間格式
- datetime YYYY-MM-DD HH:mm:ss 最常用的時間格式
- timestamp 時間戳 1970.1.1到現在的毫秒數
- year 年份
4)null
- 沒有值,未知
建立表
create table [if not exists] `teacher`( `id` int(4) not null auto_increment comment '學號', `name`varchar(30) not null default '匿名' comment '姓名',
primary key (`id`) )engine=innodb default charset=utf8
格式:
create table [if not exists] `表名`( `欄位名` 列型別 [屬性] [索引] [註釋], `欄位名` 列型別 [屬性] [索引] [註釋], `欄位名` 列型別 [屬性] [索引] [註釋] )[表型別][字符集][註釋]
show create database school;--檢視建立資料庫的語句 show create table student;--檢視建立表的語句 desc student;--查看錶的結構
資料表的型別
資料庫引擎:
MYISAM | INNODB(現在預設) | |
事務支援 | 不支援 | 支援 |
資料行鎖定 | 不支援 | 支援 |
外來鍵約束 | 不支援 | 支援 |
全文索引 | 支援 | 不支援 |
表空間大小 | 較小 | 較大,約為2倍 |
優點 | 節約空間,速度較快 | 安全性高,事務處理,多表多使用者操作 |
所有的資料庫檔案都存在data目錄下,本質還是檔案儲存
- innodb:在資料庫表中只有一個*.frm檔案,以及上級目錄下的ibdata1檔案
- myisam對應檔案:*.frm檔案:表結構定義檔案;*.MYD:資料檔案;*.MYI索引檔案
修改刪除表
1)修改表名
alter table student rename as student1;
2)增加欄位
alter table student add age int(10);
3)修改表字段
alter table student modify age varchar(10);--修改欄位約束,無法重新命名 alter table student change age age1 int(1);--重新命名欄位,無法修改約束
4)刪除表字段
alter table student drop age1;
5)刪除表
drop table if exists student;
所有的創建於刪除操作加上判斷;
三.資料管理
1)外來鍵
ALTER TABLE student ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`);
2)DML語言
資料操作語言
- insert
INSERT INTO teacher (id,NAME) VALUES(1,'dengwenxiong');--插入多個欄位 INSERT INTO teacher(name) VALUES('hxd'),('gdx');--同一欄位插入多個值
必須一一對應
- update
UPDATE teacher SET NAME="dyw" WHERE id=1;--更改一個屬性 UPDATE teacher SET NAME="dyw",email='[email protected]' WHERE id=1;--更改多個屬性
- delete
delete from student where id=1;
- truncate
truncate student;--完全清空一個表
delete與truncate的區別:
- 相同點:都能刪除資料,都不會刪除表結構
- 不同點:truncate重新設定自增列,計數器歸零 ,而delete不會;truncate不會影響事務
使用delete刪除後,重啟資料庫,若使用innodb引擎,則自增列會從1開始(存在記憶體中的,斷電就沒了),而使用Myisam引擎,則會繼續從上一個自增量開始(存在檔案中的,不會丟失)
四.DQL查詢資料
資料查詢語言
SELECT * FROM student -- 起別名 SELECT `studentno` AS 學號 FROM student -- 函式 Concat(a,b)字串拼接 SELECT CONCAT('學號:',studentno) AS 新學號 FROM student
-- 去重 SELECT DISTINCT studentno FROM result -- 查詢系統版本 SELECT VERSION()
模糊查詢
運算子
betweeen | a between b and c |
a在b,c之間結果為真 |
like | a like b | 如果a匹配b,結果為真 |
in | a in(a1,a2,..) | a為其中一個值,結果為真 |
-- 查詢姓鄧的 -- %代表0到任意個字元,_代表一個字元 SELECT studentnum FROM student WHERE studentnum LIKE '鄧%' SELECT studentnum FROM student WHERE studentnum LIKE '鄧_' -- 查詢學號為110,111,112的學生姓名,in跟著的是具體的值 SELECT studentnum FROM student WHERE studentno IN(110,111,112)
聯表查詢
-- 內聯inner join;左聯left join;右聯right join SELECT s.studentno,studentnum,subjectno,subjectresult FROM student AS s INNER JOIN result AS r ON s.studentnum=r.studentnum
自連線
把一張表拆為兩張一樣表
SELECT a.categroyname AS '父',b.categoryname AS '子' FROM category AS a,category AS b WHERE a.categoryid=b.category.pid
分頁limit和排序order by
升序asc,降序desc
limit 起始值,頁面大小 ;limit 0,5 顯示1-5條資料,第n頁:limit (n-1)*pagesize,pagesize ;n為當前頁,pagesize為頁面大小
子查詢
在where查詢條件裡巢狀使用select(先查裡面的查詢,再查詢外面的查詢)
五.常用函式
-- 數學運算 SELECT ABS(-9) -- 絕對值 SELECT CEILING(9.6) -- 向上取整 SELECT FLOOR(9.6) -- 向下取整 SELECT RAND() -- 返回一個0-1的隨機數 SELECT SIGN(-10) -- 判斷一個數的符號,0返回0,負數返回-1,正數返回1 -- 字串函式 SELECT CHAR_LENGTH('abcd') -- 字串長度 SELECT CONCAT('w','b','d') -- 拼接字串 SELECT INSERT('abcd',1,3,'789') -- 替換字串 SELECT LOWER() -- 小寫 SELECT UPPER() -- 大寫 SELECT REPLACE('abcd','b','e') -- 替換指定的字串 SELECT SUBSTR('abcdef',3,2) -- 擷取字串 SELECT REVERSE('abcdf') -- 反轉字串 -- 時間日期函式 SELECT NOW() -- 當前時間 SELECT LOCALTIME()-- 本地時間
六.聚合函式
count() | 計數 |
sum() | 求和 |
avg() | 平均值 |
max() | 最大值 |
min() | 最小值 |
SELECT COUNT(studentname) FROM student -- 會忽略null值 SELECT COUNT(*) FROM student -- 不會忽略null值 SELECT COUNT(1) FROM student -- 不會忽略null值
group by 分組 having 分組的條件
加密MD5('密碼')
七.事務
要麼都成功要麼都失敗
事務四個要素:acid
- Atomicity原子性:要麼都成功要麼都失敗
- Consistency一致性:事務前後資料儲存一致性
- Durability永續性:事務一旦提交不可逆,會持久化到資料庫中
- Isolation隔離性:資料庫為每個使用者開啟事務不能被其他事務干擾
set autocommit=0 -- 關閉事務自動提交 set sutocommit=1 -- 開啟事務自動提交(預設) -- 事務開啟 start transaction -- 標記一個事務的開始,這之後的sql都在一個事務中 -- 提交:持久化 commit -- 回滾:回到原來的樣子 rollback -- 事務結束 set autocommit=1 -- 開啟自動提交 -- 設定儲存點 savepoint 儲存點 -- 回滾到儲存點 rollback to savepoint 儲存點名 -- 撤銷儲存點 release savepoint 儲存點名
八.索引
索引是幫助Mysql高效獲取資料的資料結構
索引分類
- 主鍵索引(primary key):唯一的標識,主鍵不可重複,只能有一個列作為主鍵
- 唯一索引(unique key):避免出現重複的列,唯一索引可以重複,多個列都可以標識
- 常規索引(key/index):磨人的
- 全文索引(fulltext):特定的資料庫引擎才有,myisam,快速定位資料
Btree是innodb的預設資料結構
九.許可權管理
-- 建立使用者 create user hhh identified by '12345' -- 修改密碼(當前使用者) set password =password('24536') -- 修改指定使用者密碼 set password for hhh =password('1273') -- 重新命名 rename user hhh to xxx -- 授權(庫.表) grant all privileges on *.* to hhh -- 查詢許可權 show grants for hhh -- 撤銷許可權 revoke all privileges on *.* from hhh
十.三大正規化
第一正規化(1NF):
原子性:保證每一列不可再分
第二正規化(2NF):
前提:滿足第一正規化
每張表描述一個事情
第三正規化(3NF):
前提:滿足第一正規化和第二正規化
確保資料表中的沒列資料都和主鍵直接相關,而不能間接相關