一.sql介紹及mysql安裝
1.資料庫和sql概念
1.1資料庫(database)是按照資料結構來組織、存儲和管理資料的倉庫。資料庫用于記錄資料,使用資料庫記錄資料可以表現出各種資料間的聯系,也可以很友善地對所記錄的資料進行增、删、改、查等操作。
1.2結構化查詢語言(structured query language)簡稱 sql,用于對資料庫進行操作的語言。更詳細地說,sql 是一種資料庫查詢和程式設計語言,用于存取資料以及查詢、更新和管理關系資料庫系統,同時也是資料庫腳本檔案的擴充名。
1.3mysql 是一個 dbms(資料庫管理系統),目前屬于 oracle 公司,mysql 是最流行的關系型資料庫管理系統(關系資料庫,是建立在關系資料庫模型基礎上的資料庫,借助于集合代數等概念和方法來處理資料庫中的資料)。由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發者都選擇 mysql 作為網站資料庫。mysql 使用 sql 語言進行操作。
2.安裝資料庫
2.1打開資料庫
2.2檢視資料庫
使用指令 show databases;,檢視有哪些資料庫(注意不要漏掉分号 ;):
2.3連接配接資料庫
選擇連接配接其中一個資料庫,語句格式為 use <資料庫名>,這裡可以不用加分号,這裡我們選擇 information_schema 資料庫:
2.4檢視表
使用指令 show tables; 檢視資料庫中有哪些表(注意不要漏掉“;”):
2.5 退出
使用指令 quit 或者 exit 退出 mysql。
二.建立資料庫并插入資料
1.建立資料庫
語句格式為 create database <資料庫名字>;,(注意不要漏掉分号 ;),前面的 create database 也可以使用小寫。
建立成功後輸入指令 show databases; (注意不要漏掉;)檢查一下:
注:在大多數系統中,sql 語句都是不區分大小寫的,但是出于嚴謹,而且便于區分保留字(保留字(reserved word):指在進階語言中已經定義過的字,使用者不能再将這些字作為變量名或過程名使用。)和變量名,我們把保留字大寫,把變量和資料小寫。
2.連接配接資料庫
使用語句 use <資料庫名字>:
3.資料表
資料表(table)簡稱表,它是資料庫最重要的組成部分之一。資料庫隻是一個架構,表才是實質内容。而一個資料庫中一般會有多張表,這些各自獨立的表通過建立關系被聯接起來,才成為可以交叉查閱、一目了然的資料庫。
4.建立資料表
5.資料類型
mysql 的資料類型和其他程式設計語言大同小異,下表是一些 mysql 常用資料類:
整數除了 int 外,還有 tinyint、smallint、mediumint、bigint。
char 和 varchar 的差別: char 的長度是固定的,而 varchar 的長度是可以變化的,比如,存儲字元串 “abc",對于 char(10),表示存儲的字元将占 10 個位元組(包括 7 個空字元),而同樣的 varchar(12) 則隻占用4個位元組的長度,增加一個額外位元組來存儲字元串本身的長度,12 隻是最大值,當你存儲的字元小于 12 時,按實際長度存儲。
enum和set的差別: enum 類型的資料的值,必須是定義時枚舉的值的其中之一,即單選,而 set 類型的值則可以多選。
6.插入資料
注:varchar,text,date,time,enum 等類型的資料也需要單引号修飾,而 int,float,double 等則不需要。
三.sql的限制
限制是一種限制,它通過對表的行或列的資料做出限制,來確定表的資料的完整性、唯一性。
1.限制分類
在mysql中,通常有這幾種限制:
1.主鍵
主鍵 (primary key)是用于限制表中的一行,作為這一行的唯一辨別符,在一張表中通過主鍵就能準确定位到一行,是以主鍵十分重要。主鍵不能有重複且不能為空。
還有一種特殊的主鍵——複合主鍵。主鍵不僅可以是表中的一列,也可以由表中的兩列或多列來共同辨別。
2.預設值限制
預設值限制 (default) 規定,當有 default 限制的列,插入資料為空時,将使用預設值。
3.唯一限制
唯一限制 (unique) 比較簡單,它規定一張表中指定的一列的值必須不能有重複值,即這一列每個值都是唯一的。
4.外鍵限制
外鍵 (foreign key) 既能確定資料完整性,也能表現表之間的關系。
一個表可以有多個外鍵,每個外鍵必須 references (參考) 另一個表的主鍵,被外鍵限制的列,取值必須在它參考的列中有對應值。
5.非空限制
非空限制 (not null),聽名字就能了解,被非空限制的列,在插入值時必須非空。
在mysql中違反非空限制,不會報錯,隻會有警告。
四.select語句詳解
1.select 語句的基本格式為:
select 要查詢的列名 from 表名字 where 限制條件;
如果要查詢表的所有内容,則把 要查詢的列名 用一個星号 * 号表示,代表要查詢表中所有的列。
2.select 語句常常會有 where 限制條件,用于達到更加精确的查詢。where限制條件可以有數學符号 (=,<,>,>=,<=) 。
3.“and”與“or”
where 後面可以有不止一條限制,而根據條件之間的邏輯關系,可以用 or(或) 和 and(且) 連接配接。如果需要包含25和30這兩個數字的話,可以替換為 age between 25 and 30 。
4.in和not in
關鍵詞in和not in的作用和它們的名字一樣明顯,用于篩選“在”或“不在”某個範圍内的結果。
5.通配符
關鍵字 like 在sql語句中和通配符一起使用,通配符代表未知字元。sql中的通配符是 _ 和 % 。其中 _ 代表一個未指定字元,% 代表不定個未指定字元。
6.對結果排序
預設情況下,order by的結果是升序排列,而使用關鍵詞asc和desc可指定升序或降序排序。
7.sql内置函數和計算
sql 允許對表中的資料進行計算。對此,sql 有 5 個内置函數,這些函數都對 select 的結果做操作:
其中 count 函數可用于任何資料類型(因為它隻是計數),而另4個函數都隻能對數字類資料類型做計算。
8.子查詢
select 語句都僅涉及一個表中的資料,然而有時必須處理多個表才能獲得所需的資訊。例如:想要知道名為 "tom" 的員工所在部門做了幾個工程。員工資訊儲存在 employee 表中,但工程資訊儲存在project 表中。
9.連接配接查詢
在處理多個表時,子查詢隻有在結果來自一個表時才有用。但如果需要顯示兩個表或多個表中的資料,這時就必須使用連接配接 (join) 操作。 連接配接的基本思想是把兩個或多個表當作一個新的表來操作。
五.修改和删除
1.對資料庫的修改
2.對一張表的修改
2.1重命名一張表
重命名一張表的語句有多種形式,以下 3 種格式效果是一樣的:
rename table 原名 to 新名字;
alter table 原名 rename 新名;
alter table 原名 rename to 新名;
2.2删除一張表
删除一張表的語句,類似于剛才用過的删除資料庫的語句,格式是這樣的:
drop table 表名字;
3.對一列的修改(即對表結構的修改)
3.1增加一列
在表中增加一列的語句格式為:
alter table 表名字 add column 列名字 資料類型 限制;或: alter table 表名字 add 列名字 資料類型 限制;
如果要把增加的列插入在指定位置,則需要在語句的最後使用after關鍵詞(“after 列1” 表示新增的列被放置在 “列1” 的後面)。
3.2删除一列
删除表中的一列和剛才使用的新增一列的語句格式十分相似,隻是把關鍵詞 add 改為 drop ,語句後面不需要有資料類型、限制或位置資訊。具體語句格式:
alter table 表名字 drop column 列名字;
或: alter table 表名字 drop 列名字;
3.3重命名一列
這條語句其實不隻可用于重命名一列,準确地說,它是對一個列做修改(change) :
alter table 表名字 change 原列名 新列名 資料類型 限制;
注意:這條重命名語句後面的 “資料類型” 不能省略,否則重命名失敗。
3.4改變資料類型
要修改一列的資料類型,除了使用剛才的change語句外,還可以用這樣的modify語句:
alter table 表名字 modify 列名字 新資料類型;
4.對表的内容修改
4.1修改表中的某個值
大多數時候我們需要做修改的不會是整個資料庫或整張表,而是表中的某一個或幾個資料,這就需要我們用下面這條指令達到精确的修改:
update 表名字 set 列1=值1,列2=值2 where 條件;
4.2删除一行記錄
删除表中的一行資料,也必須加上where條件,否則整列的資料都會被删除。删除語句:
delete from 表名字 where 條件;
六.其它基本操作
1.索引
索引是一種與表有關的結構,它的作用相當于書的目錄,可以根據目錄中的頁碼快速找到所需的内容。
當表中有大量記錄時,若要對表進行查詢,沒有索引的情況是全表搜尋:将所有記錄一一取出,和查詢條件進行一一對比,然後傳回滿足條件的記錄。這樣做會消耗大量資料庫系統時間,并造成大量磁盤 i/o 操作。
對一張表中的某個列建立索引,有以下兩種語句格式:
alter table 表名字 add index 索引名 (列名);
create index 索引名 on 表名字 (列名);
指令 show index from 表名字; 檢視建立的索引:
2.視圖
視圖是從一個或多個表中導出來的表,是一種虛拟存在的表。它就像一個視窗,通過這個視窗可以看到系統專門提供的資料,這樣,使用者可以不用看到整個資料庫中的資料,而隻關心對自己有用的資料。
建立視圖的語句格式為:
create view 視圖名(列a,列b,列c) as select 列1,列2,列3 from 表名字;
可見建立視圖的語句,後半句是一個select查詢語句,是以視圖也可以建立在多張表上,隻需在select語句中使用子查詢或連接配接查詢。
3.導入
導入操作,可以把一個檔案裡的資料儲存進一張表。導入語句格式為:
load data infile '檔案路徑' into table 表名字;
4.導出
導出與導入是相反的過程,是把資料庫某個表中的資料儲存到一個檔案之中。導出語句基本格式為:
select 列1,列2 into outfile '檔案路徑和檔案名' from 表名字;
5.備份
備份與導出的差別:導出的檔案隻是儲存資料庫中的資料;而備份,則是把資料庫的結構,包括資料、限制、索引、視圖等全部另存為一個檔案。
mysqldump 是 mysql 用于備份資料庫的實用程式。它主要産生一個 sql 腳本檔案,其中包含從頭重新建立資料庫所必需的指令create table insert 等。
使用 mysqldump 備份的語句:
mysqldump -u root 資料庫名>備份檔案名; #備份整個資料庫mysqldump -u root 資料庫名 表名字>備份檔案名; #備份整個表
6.恢複
用備份檔案恢複資料庫可以使用source /../..也可以使用指令建立一個空的資料庫 test:
如:mysql -u root test < bak.sql