標籤:mysql
第2章 安裝和介紹mySQL設定mySQL字元集
支援中文的字元集是utf8,該設定可以更改mySQL設定檔進行全域設定,也可以針對資料庫設定,也可以針對錶設定,也可以針對列設定。字元集更改後新插入的資料生效,對以前不生效。
練習1:更改MySQL的預設字元集
直接修改 my.cnf,增加一行內容,然後重啟 MySQL,使之全域生效,影響建立的所有資料庫。
default-character-set = utf8
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image001" border="0" alt="clip_image001" src="http://img1.51cto.com/attachment/201302/22/400469_1361515523iv4L.png" width="650" height="465" />
重啟mySQL服務
[email protected]:~# /etc/init.d/mysql restart
查看全域預設字元集
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image002" border="0" alt="clip_image002" src="http://img1.51cto.com/attachment/201302/22/400469_1361515523vm6R.png" height="177" />
查看支援的所有字元集
mysql> show character set;
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image003" border="0" alt="clip_image003" src="http://img1.51cto.com/attachment/201302/22/400469_1361515524wVvj.png" height="673" />
練習2:為一個資料庫指定字元集
指定資料庫字元集後,該資料庫下建立的表預設都採用該庫指定的字元集。
1、建立資料庫時,指定其字元集
CREATE DATABASE db DEFAULT CHARSET UTF8;
2、或者採用 ALTER 文法來轉換欄位的字元集
ALTER DATABASE db DEFAULT CHARSET UTF8;
使用圖形管理介面也可以為資料庫指定字元集
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image004" border="0" alt="clip_image004" src="http://img1.51cto.com/attachment/201302/22/400469_1361515524RB0R.png" height="313" />
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image005" border="0" alt="clip_image005" src="http://img1.51cto.com/attachment/201302/22/400469_1361515525MX5J.png" height="414" />
練習3:為 一個資料表指定字元集
指定資料表字元集後,該資料表裡的所有字元型欄位預設都使用該表指定的字元集。
1、建立資料表時,指定其字元集
CREATE TABLE tbl
(
......
) ENGINE = MyISAM DEFAULT CHARSET UTF8;
2、或者採用 ALTER 文法來轉換欄位的字元集
ALTER TABLE tbl CONVERT TO CHARACTER SET utf8;
3、採用其他用戶端工具來設定,例如 Navicat/MySQL Front/PhpMyAdmin
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image006" border="0" alt="clip_image006" src="http://img1.51cto.com/attachment/201302/22/400469_1361515527pnOz.png" width="650" height="536" />
練習4:為一個欄位指定字元集
儘管資料表建立時已經指定預設字元集了,但是該表裡面的欄位還是可以指定自己的字元集的。
1、建立資料表時,指定其字元集
CREATE TABLE tbl
(
......
name CHAR(20) CHARACTER SET UTF8,
......
) ENGINE = MyISAM DEFAULT CHARSET UTF8;
2、或者採用 ALTER 文法來轉換欄位的字元集
ALTER TABLE tbl CHANGE name name CHAR(20) CHARACTER SET utf8;
3、採用其他用戶端工具來設定,例如 Navicat/MySQL Front/PhpMyAdmin
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image007" border="0" alt="clip_image007" src="http://img1.51cto.com/attachment/201302/22/400469_1361515528PIlg.png" width="650" height="532" />
練習5:設定用戶端字元集
為用戶端串連指定字元集,最好伺服器的字元集一致。
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image008" border="0" alt="clip_image008" src="http://img1.51cto.com/attachment/201302/22/400469_1361515529m1T7.png" height="458" />
設定putty字元集
查看姓名是亂碼
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image009" border="0" alt="clip_image009" src="http://img1.51cto.com/attachment/201302/22/400469_13615155294Lt2.png" width="650" height="417" />
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image010" border="0" alt="clip_image010" src="http://img1.51cto.com/attachment/201302/22/400469_1361515530EgYl.png" height="367" />
點擊“應用”。
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image011" border="0" alt="clip_image011" src="http://img1.51cto.com/attachment/201302/22/400469_1361515530DHsi.png" height="439" />
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image012" border="0" alt="clip_image012" src="http://img1.51cto.com/attachment/201302/22/400469_1361515531yPwT.png" width="650" height="434" />
MySQL儲存引擎MySQL儲存引擎概述
外掛程式式儲存引擎是MySQL資料庫最重要的特性之一,使用者可以根據應用的需要選擇如何儲存和索引資料庫,是否使用事物等。mySQL預設支援多種儲存引擎,以適應不同領域的資料庫應用需要。使用者可以通過選擇使用不同的儲存引擎提高應用的效率,提供靈活的儲存,使用者佈建可以按照自己的需要定製和使用自己的儲存引擎,以實現最大程度的可定製性。
MySQL常用的儲存引擎為MyISAM、InnoDB、MEMORY、MERGE,其中InnoDB提供事務安全表,其他儲存引擎都是非事務安全表。
MyISAM是MySQL的預設儲存引擎。MyISAM不支援事務、也不支援外鍵,但其訪問速度快,對事務完整性沒有要求。
InnoDB儲存引擎提供了具有提交、復原和崩潰恢複能力的事務安全。但是比起MyISAM儲存引擎,InnoDB寫的處理效率差一些並且會佔用更多的磁碟空間以保留資料和索引。MySQL支援外鍵儲存引擎只有InnoDB,在建立外鍵的時候,要求附表必須有對應的索引,子表在建立外鍵的時候也會自動建立對應的索引。
儲存引擎各自的一些特點
上面提到的四種儲存引擎都有各自適用的環境,這取決於它們專屬的一些特徵。主要體現在效能、事務、並發控制、參照完整性、緩衝、 故障恢複,備份及回存等幾個方面
目前比較普及的儲存引擎是MyISAM和InnoDB.而MyISAM又是絕大部分Web應用的首選。MyISAM與InnoDB的主要的不同點在於效能和事務控制上。
MyISAM是早期ISAM(Indexed Sequential Access Method,我現在用的MySQL5.0已經不支援ISAM了)的擴充實現,ISAM被設計為適合處理讀頻率遠大於寫頻率這樣一種情況,因此ISAM以及後來的MyISAM都沒有考慮對事物的支援,不需要事務記錄,ISAM的查詢效率相當可觀,而且記憶體佔用很少。MyISAM在繼承了這類優點的同時,與時俱進的提供了大量實用的新特性和相關工具。例如考慮到並發控制,提供了表級鎖。而且由於MyISAM是每張表使用各自獨立的隱藏檔(MYD資料檔案和MYI索引檔案),使得備份及恢複十分方便(拷貝覆蓋即可),而且還支援線上恢複。
所以如果你的應用是不需要事務,不支援外鍵。處理的只是基本的CRUD(增刪改查)操作,那麼MyISAM是不二選擇。
1. 設定mysql的預設儲存引擎
編輯my.cnf設定檔,在伺服器端配置資訊[mysqld]下面添加:
default-storage-engine = MyISAM
即可設定mysql資料庫的預設引擎為MyISAM
2. 指定表的儲存引擎
如:
create table t_innodb( id int(3))
engine = innodb;
然後使用
mysql> show table status like ‘t_innodb‘;
查看錶的詳細資料。
3. 修改表的儲存引擎
ALTER TABLE t_name ENGINE = innodb;
更改預設儲存引擎和表的儲存引擎
4. 更改預設儲存引擎
查看預設儲存引擎
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image013" border="0" alt="clip_image013" src="http://img1.51cto.com/attachment/201302/22/400469_1361515531Qdw4.png" height="177" />
更改預設儲存引擎
編輯設定檔
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image014" border="0" alt="clip_image014" src="http://img1.51cto.com/attachment/201302/22/400469_1361515532eXXk.png" height="49" />
在[mysql]下添加
default-storage-engine = InnoDB
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image015" border="0" alt="clip_image015" src="http://img1.51cto.com/attachment/201302/22/400469_1361515532zIp6.png" width="650" height="544" />
再次查看預設引擎,發現已經被更改
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image016" border="0" alt="clip_image016" src="http://img1.51cto.com/attachment/201302/22/400469_13615155332NPy.png" height="177" />
重啟mySQL服務
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image017" border="0" alt="clip_image017" src="http://img1.51cto.com/attachment/201302/22/400469_1361515533puxi.png" height="145" />
5. 更表的儲存引擎
雙擊某個表,可以更改表的儲存引擎
使用命令更改
mysql> use schoolDB;
mysql> alter table TStudent engine=InnoDB;
使用管理工具更改
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image018" border="0" alt="clip_image018" src="http://img1.51cto.com/attachment/201302/22/400469_1361515535Q3Tc.png" width="650" height="536" />
InnoDB存擎的特點
6. 自動成長列
自動成長列可以送給插入,但是插入的如果是空或者為0,則實際插入的值是自動成長後的值。
建立一個表,指定自動成長列,儲存引擎innoDB。
create table au
(
studentid int not null auto_increment,
name varchar(10),
primary key(studentid)
)
engine=innodb CHARACTER SET UTF8,
插入記錄,有空值且自增列也沒按順序
insert au values (1,‘韓立剛‘),(3,‘韓立輝‘),(2,‘張京‘),(null,‘楊帥‘)
可以看到自增列的值
select * from au
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image019" border="0" alt="clip_image019" src="http://img1.51cto.com/attachment/201302/22/400469_1361515536FaOD.png" height="115" />
外鍵約束
MySQL支援外鍵儲存引擎只有InnoDB,在建立外鍵的時候,要求父表必須有對應的索引,子表在建立外鍵的時候也會自動建立索引
在刪除更新父表時,對子表進行相應的操作,包括restrict、cascade、set null和no action
使用InnoDB儲存引擎資料按主鍵順序存放
如果不建立索引,資料以插入順序存放
create table au1
(
studentid int,
name varchar(10),
)
engine=innodb
insert au1 values (1,‘韓立剛‘),(3,‘韓立輝‘),(2,‘張京‘),(8,‘楊帥‘),(6,‘楊柳青‘)
select * from au1
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image020" border="0" alt="clip_image020" src="http://img1.51cto.com/attachment/201302/22/400469_1361515536Pud2.png" height="134" />
給表添加主鍵
alter TABLE `au1` ADD PRIMARY KEY (studentid)
select * from au1
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image019[1]" border="0" alt="clip_image019[1]" src="http://img1.51cto.com/attachment/201302/22/400469_1361515536v0Ka.png" height="115" />
建立資料庫和表練習7:建立資料庫
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image021" border="0" alt="clip_image021" src="http://img1.51cto.com/attachment/201302/22/400469_1361515537rBgS.png" height="419" />
也可使用命令建立資料庫
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image022" border="0" alt="clip_image022" src="http://img1.51cto.com/attachment/201302/22/400469_1361515537ZUlp.png" height="420" />
輸入以下命令 create database SchoolDB; 選中執行
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image023" border="0" alt="clip_image023" src="http://img1.51cto.com/attachment/201302/22/400469_1361515538HkL7.png" width="650" height="443" />
練習8:建立表
選中剛才建立的資料庫 執行建立表的語句
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image024" border="0" alt="clip_image024" src="http://img1.51cto.com/attachment/201302/22/400469_1361515539Yord.png" width="650" height="608" />
建立學生表
create table TStudent
(StudentID nvarchar(15),
Sname nvarchar(10),
sex nchar(1),
cardID nvarchar(20),
Birthday datetime,
Email nvarchar(40),
Class nvarchar(20),
enterTime datetime )
建立課程表
create table TSubject
(
subJectID nvarchar(10),
subJectName nvarchar(30),
BookName nvarchar(30),
Publisher nvarchar(20)
)
建立分數表
create table TScore
(
StudentID nvarchar(15),
subJectID nvarchar(10),
mark decimal
)
練習9:使用圖形介面產生表的SQL語句
使用圖形介面可以產生建立、刪除、更改對象的SQL語句。
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image025" border="0" alt="clip_image025" src="http://img1.51cto.com/attachment/201302/22/400469_1361515540EmqI.png" width="650" height="551" />
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image026" border="0" alt="clip_image026" src="http://img1.51cto.com/attachment/201302/22/400469_1361515541rMqx.png" width="650" height="548" />
使用mySQL協助查看mySQL協助練習10:查看協助
如果你不知道協助能夠提供什麼?輸入
? contents
可以查看可用的協助
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image027" border="0" alt="clip_image027" src="http://img1.51cto.com/attachment/201302/22/400469_1361515542epY4.png" height="417" />
輸入? Data definition
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image028" border="0" alt="clip_image028" src="http://img1.51cto.com/attachment/201302/22/400469_1361515545sP5J.png" height="673" />
查看建立表的文法
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image029" border="0" alt="clip_image029" src="http://img1.51cto.com/attachment/201302/22/400469_13615155469G4U.png" height="673" />
快速查閱協助
在實際應用當中,如果需要快速查看某項文法時,可以使用關鍵字進行快速查詢。比如想知道show命令都能看到些什麼東西,可以使用如下命令。
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image030" border="0" alt="clip_image030" src="http://img1.51cto.com/attachment/201302/22/400469_1361515547ursL.png" height="705" />
查看資料庫
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image031" border="0" alt="clip_image031" src="http://img1.51cto.com/attachment/201302/22/400469_1361515550MXst.png" height="305" />
查看建立資料庫的命令
650) this.width=650;" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image032" border="0" alt="clip_image032" src="http://img1.51cto.com/attachment/201302/22/400469_1361515554v88Q.png" width="650" height="257" />
查看建立表的命令
650) this.width=650;" style="background-image:none;padding-left:0px;padding-right:0px;padding-top:0px;" title="clip_image033" border="0" alt="clip_image033" src="http://img1.51cto.com/attachment/201302/22/400469_1361515554w4u1.png" width="650" height="673" />
本文出自 “ghost” 部落格,請務必保留此出處http://caizi.blog.51cto.com/5234706/1543125