1. 程式人生 > >MySQL 個人學習筆記

MySQL 個人學習筆記

最早之前學習了Mysql,不知道是多長時間了 O(∩_∩)O,今天突然發現之前學習過程中的這個筆記,於是,就分享給大家,希望,能幫助到有需要的朋友,有不足的地方歡迎大家多多交流  

b( ̄▽ ̄)d

1. 資料庫(datebase): 儲存有組織的資料的容器(通常是一個檔案或一組檔案)。

2. 表(table):是一種結構化的檔案,可用來儲存某種特定型別的資料

3. 列(column):表中的一個欄位。所有表都是由一個或多個列組成的 

4. 資料型別(datetype): 所允許的資料的型別。每個表列都有相應的資料型別,它限制(或允許)該列中儲存的資料。

5. 行(row): 表中的一個記錄。

表中的資料是按行儲存的,所儲存的每個記錄儲存在自己的行內。如果將表想象為網格,網格中垂直的列為表列,水平行為錶行。

說明:是記錄還是行?

你可能聽到使用者在提到行時稱其為資料庫記錄(record)。這兩個術語多半是可以交替使用的,但從技術上說,行才是正確的術語。

6.主鍵(primary key): 一列(或一組列),其值能夠唯一標識表中每一行。(方便資料操作和管理)

表中的任何列都可以作為主鍵,只要它滿足以下條件:

1)任意兩行都不具有相同的主鍵值;

2)每一行都必須具有一個主鍵值(主鍵列不允許NULL值);

3)主鍵列中的值不允許修改或更新;

4)主鍵值不能重用(如果某行從表中刪除,它的主鍵不能賦給以後的新行)

7. SQL是一種專門用來與資料庫溝通的語言。與其他語言(如英語或Java、C、PHP這樣的程式語言)不一樣,SQL中只有很少的詞,這是有意而為的。設計SQL的目的是很好地完成一項 任務——提供一種從資料庫中讀寫資料的簡單有效的方法。

8. 欄位(column)的資料型別

小數型別

字串

日期時間型

欄位的修飾詞

auto_increament在插入行的時候會自動增加一行供其使用

9. SQL中的運算子

between 1 and 5 在1到5之間

in(1,2)屬於括號裡面任一的一個東西

10. SQL語句的分類

庫表結構指的就是對資料庫和表的操作

一 、DDL(資料定義語言)

add中如果只增加一行則不需要括號(注意括號裡面的逗號)

alter table users add passward1 varchar(10) not null

(after username);括號代表可省略表示新增在哪一行之後

二 、DML(資料操作語言)

上面的也可以是隻有列二和列四與之對應

也可以insert into 表名 values(所有的值一一對應)

 

update中的set一定不要忘記

delete from 表名; 清空所有,但是如果使用insert into時會接著上一次的id往下排

truncate 表名; 清空所有,但是如果使用insert into時會重新按id往下排(0開始)

三、DCL(資料控制語言)

flush privileges 重新整理許可權表

修改密碼:

  1. use mysql;
  2. select user,host,authentication_string from user;
  3. update user set authentication_string = password()

where user=‘root’;

  1. flush privileges;
  1. C:\Users\Mr TC>mysqladmin -uroot -p原密碼 password 新密碼

忘記密碼:

  1. net stop mysql
  2. mysqld --skip-grant-tables
  3. 再開啟一個cmd視窗輸入mysql -uroot -p然後提示輸入

密碼直接按回車即可進入MySQL中

  1. 修改密碼,重新整理一下許可權表flush privileges;

許可權有create alter insert update等等

檢視許可權

show grants for 使用者名稱@IP地址

刪除使用者

drop user 使用者名稱@IP地址

四 DQL(資料查詢語言)

1. 檢索資料

1) 如何檢索出不同的值?

辦法就是使用DISTINCT關鍵字,顧名思義,它指示數

據庫只返回不同的值。

SELECT DISTINCT vend_id FROM Products;

警告:不能部分使用DISTINCT DISTINCT DISTINCT關鍵字作用於所有的列,不僅僅是跟在其後的那一列。例如,你指定SELECT DISTINCT vend_id, prod_price,除非指定的兩列完 全相同,否則所有的行都會被檢索出來。

2) 如果你只想返回第一行或者一定數量的行,該怎麼辦呢?這是可行的,然而遺憾的是,各種資料庫中的這一SQL實現並不相同

  MySQL中SELECT prod_name FROM Products LIMIT 5;

返回前五行的資料

SELECT prod_name FROM Products LIMIT 5 OFFSET 5;

LIMIT 4 OFFSET 3指示返回從第3行起的4行資料。第一個數字是檢索的行數第二個數字是指從哪兒開始,不包括第五行        該限制語句可簡化為limit 3,4

返回某個記錄後面的幾行資料

2. 排序檢索資料

1) 在指定一條ORDER BY子句時,應該保證它是SELECT語句中最後一條子句。如果它不是最後的子句,將會出現錯

  誤訊息 (預設升序排列)

2) 按多個列排序

   例如 如果要顯示僱員名單,可能希望按姓和名排序(首

    先按姓排序,然後在每個姓中再按名排序)

    如果姓列中的所有制都是唯一的,則不會再按名排列

    如果多個僱員有相同的姓,這樣做很有用

3) 按列的位置排序

  order by 2,3; 2,3表示列的相對位置

4) 按指定排序方向排序

  order by 列名 desc,列名;

  警告:如果想在多個列上進行降序排序,必須對每一列指定DESC關鍵字

3. 連線資料

1) concat(列名,列名)函式

as 為輸出表示的欄位起一個別名

concat_ws('分隔符’,列名,列名)

4. 模糊查詢 (like 像)

1) select column from table where colum like‘ng’;

   表示查找出column = ‘ng’的記錄

  1. select column from table where colum like‘%ng%’;

左右模糊查詢%相當與萬用字元 *,不管左右是什麼

5. 聚合函式

分組查詢

6. 連線查詢

stu_id等於student中的id    關聯型資料庫

左連線查詢以左邊的表(列)為基準 一一對以應

右連線查詢以右邊的表(列)為基準 一一對以應

  1. 聯合查詢  (關鍵字union all前後列數一致)

  1. 子查詢

select name from student where id in (select stu_id from mark); 前面的依託與後面的

五、 使用函式處理資料

1)常見的文字處理函式

soundex(‘字串’)=soundex(‘B’) 篩選出和B發音相近的字串

  1. 常用數值處理函式

 、SQL字句的順序

七、int(n) char(n) varchar(n) n的不同

  1. int(n) n不表示字元長度,只在有zerofill時起作用,表示如果輸入的數字長度小於n時前面用0填充
  2. char(n) n表示字元的最大長度,utf8(萬國碼)中一個漢字字元表示3個位元組,gbk(中文碼)中一個漢字字元表示2個位元組,檢視字元長度用char_length(column)函式,位元組長度用length(column)

 、DTL事務控制語言

Example:比如轉賬如果在轉賬的過程中突然斷電了或者怎麼了導致不能交易成功但是對方的錢已經被扣這個時候就需要事務,出錯之後只需輸入rollback(回滾)就可以返回被扣的錢,相當於撤回事務的執行

1) 在沒有開啟事務時執行SQL語句對資料的改變預設會提交,

使資料寫入硬碟中,而不僅僅是顯示在記憶體上

2) 事務開啟執行之後如果沒有commit(提交)時,當你在開啟一個數據庫時會發現之前改變的資料沒有寫入磁碟中

提示:可以回退哪些語句?

事務處理用來管理INSERT、UPDATE和DELETE語句。不能回退SELECT語句(回退SELECT語句也沒有必要),也不能回退CREATE或DROP操作。事務處理中可以使用這些語句,但進行回退時,這些操作也不撤銷。

 、資料庫程式設計

儲存過程函式(相當於函式的封裝)

delimiter(定界符) ///  #修改結束符 避免衝突

create procedure(程式) he(a int)

begin(相當於左大括號)

SQL語句;

end///

delimiter ;

call he(3);  #呼叫函式

 、使用檢視(view)

1)建立

create view view_name as select column1,column2 from table ;

2)使用

select colunm1 from view_name;

3)刪除

drop view view_name;

4)檢視中只有select 語句,不像儲存過程中可以有任何操作,試圖建立的是虛擬的表,建立檢視的好處是他只能訪問你給定的這些資料,增加了安全性,(比如其他公司要訪問你公司的一些資料時就可以使用試圖)

十一 、使用觸發器(trigger)

1. 建立

delimiter ///

begin

SQL 語句;

end///

delimiter ;

2. 刪除

drop trigger trigger_name;

3. 在對某個表進行操作之後會觸發這個觸發器執行其中

的SQL語句以達到一定的目的

Example

統計一個表中的文章篇數,當執行insert時SQl語句執行加一操作,當執行delete時SQL語句執行減一操作,最終可得該表中的文章篇數

十二 、資料的匯入匯出

1. 匯出

C:\Users\Mr \Desktop>mysqldump -uroot -p521521 online_shopping user > user.sql

2. 匯入

use database_name1;

mysql> source C:\Users\Mr \Desktop\user.sql

十三 、索引

1)全文索引解決模糊(like)查詢速度問題

2)外來鍵約束想學生和成績一樣,先有學生然後才有成績,如果你沒學生就insert成績將會報錯

3)主鍵索引和唯一索引中的資料不能重複,有的話不能重複

  唯一約束用來保證一列(或一組列)中的資料是唯一的。它們類似於主鍵,但存在以下重要區別

  表可包含多個唯一約束,但每個表只允許一個主鍵。

  唯一約束列可包含NULL值。

  唯一約束列可修改或更新。

  唯一約束列的值可重複使用。

 與主鍵不一樣,唯一約束不能用來定義外來鍵。