




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Navicat與mysql詳解第一部分 對Navicat的操作1.連接1.1創建新連接首先啟動Navicat for MySQL,點擊左上角的【連接】(如圖1.1.1):點擊之后便會出現如圖所示的界面(如圖1.1.2):連接名可以任意取,主機名或IP地址則填寫你需要連接數據庫的IP地址,如是本地,則填 localhost,但推薦填寫 ,這表示回送地址,指本地機,一般是用來測試的。端口默認為3306,用戶名默認是root,而密碼則是安裝時自己填寫的密碼。填寫完后,可點擊該界面左下角的測試連接,如顯示連接成功則可操縱數據庫,如失敗,請仔細檢查,或度娘。2.數據庫2.1創建新數據庫
2、雙擊你創建的連接,你會發現有幾個MySQL預先創建好的數據庫,這個你可暫且不管。自己新建幾個數據庫。右擊你新建的連接,點擊新建數據庫。數據庫名自取,字符集一般選uft8,排序規則可自選。3.表3.1創建新表雙擊你創建的數據庫,如圖1.3.1,我創建的數據庫名叫test,雙擊之后會變出現一些選項。右擊表,新建表。 如圖1.3.2所示,每一行數據有六列,從左到右分別是:數據的名稱(最好是英文),該數據的類型(可度娘MySQL的數據類型,可對應java的基本數據類型),該數據允許的長度,允許保留的小數點位數,允不允許可以為空值,最后一個是設置主鍵。一個表最好有一個主鍵,同一個表里每一行數據的主鍵值各
3、不相同,這樣才能將同一表的數據區分開來,操縱數據也方便得多。填寫完之后,點擊左上角的保存,此時會彈出一個窗口讓你填寫表名,表名寫入之后返回Navicat主窗口,就會發現自己新建的數據庫里多了一個表。依次,我們新建四個表,并且使四個表之間相互聯系。圖3.2設計表之前設計的四個表分別是,transaction(交易表)、transactionProductAssign(交易與產品對應表)、product(產品表)、productItem(產品明細表)。Transaction是交易表,里面的每一行數據儲存著一條交易信息,transactionProductAssign是交易與產品對應表,里面儲存的是
4、每一條交易對應的產品號。交易表和交易與產品對應表是一對多的關系,即,一條交易對應多個產品。如圖1.3.6、圖1.3.7所示:交易對應多個產品,一條交易與產品對應信息則對應一個具體產品(即交易與產品對應表、產品明細表是一對一的關系)。而product(即產品表)則是,一條產品數據代表著產品,而這個產品又有很多種類、版本,所以,一個產品信息對應多個產品明細信息。說通俗點,就是,一個人去買東西,買了一次東西就是一筆交易(存在transaction表里面)。而這筆交易買了很多的產品(對應關系存在transactionProductAssign表里面)。這些產品可能有:腎6,腎5S,心相印面巾紙,知音面
5、巾紙(具體產品存在productItem表里面)。其中,腎6、腎5S都屬于蘋果系列,心相印面巾紙、知音面巾紙都屬于紙巾系列,所以蘋果和紙巾便是一種產品的統稱(存在productI表里面)。那為什么要這樣設計呢?為什么不把這些設計在一張表里面,這樣省時省事。但是,如果你仔細研究,你就會發現,這里面暗藏玄機。首先就看這一點來說,如果所有的交易信息、產品信息全在一個表的一行數據里,第一不美觀,第二讓人很難看得下去。最重要的一點是,為了消除冗余。其次就直觀這點來說,交易與產品對應,產品與產品版本對應,這樣能讓人一目了然,使整個數據庫都連接了起來,便于以后的擴展與修改設計。這只是一個很小的例子,其實數據
6、庫設計有著很大的學問在里面。慢慢研究,你會發現,設計數據庫其實是一項很偉大的工程!4.視圖4.1什么是視圖視圖是從一個或幾個基本表(或視圖)導出的表。它與基本表不同,是一個虛表。數據庫只存放視圖的定義,而不存放視圖對應的數據,這些數據仍存放在原來的基本表中。所以基本表中的數據發生變化,從視圖中查詢出的數據也就隨之改變了。從這個意義上講,視圖就像一個窗口,透過它可以看到數據庫中自己感興趣的數據及其變化。4.2視圖的好處視圖能簡化用戶操作視圖機制使用戶可以將注意力集中在所關心地數據上。如果這些數據不是直接來自基本表,則可以通過定義視圖,使數據庫看起來結構簡單、清晰,并且可以簡化用戶的的數據查詢操作
7、。例如,那些定義了若干張表連接的視圖,就將表與表之間的連接操作對用戶隱藏起來了。換句話說,用戶所作的只是對一個虛表的簡單查詢, 而這個虛表是怎樣得來的,用戶無需了解。 視圖使用戶能以多種角度看待同一數據。視圖機制能使不同的用戶以不同的方式看待同一數據,當許多不同種類的用戶共享同一個數據庫時,這種靈活性是非常必要的。視圖對重構數據庫提供了一定程度的邏輯獨立性數據的物理獨立性是指用戶的應用程序不依賴于數據庫的物理結構。數據的邏輯獨立性是指當數據庫重構造時,如增加新的關系或對原有的關系增加新的字段,用戶 的應用程序不會受影響。層次數據庫和網狀數據庫一般能較好地支持數據的物理獨立性,而對于邏輯獨立性則
8、不能完全的支持。在關許數據庫中,數據庫的重構造往往是不可避免的。重構數據庫最常見的是將一個基本表“垂直”地分成多個基本表。例如:將學生關系Student(Sno,Sname,Ssex,Sage,Sdept)分為SX(Sno,Sname,Sage)和SY(Sno,Ssex,Sdept)兩個系。這時原表Student為SX表和SY表自然連接的結果。如果建立個視圖StudentCREATE VIEW Student(Sno,Sname,Ssex,Sage,Sdept)AS SELECT SX.Sno,SX.Sname,SY.Ssex,SX.Sage,SY.Sdept FROM SX,SY WHERE
9、 SX.Sno=SY.Sno;這樣盡管數據庫的邏輯結構改變了(變為SX和SY兩個表了),但應用程序不必修改,因為新建立的視圖定義為用戶原來的關系,使用戶的外模式保持不變,用戶的應用程序通過視圖仍然能夠查找數據。當然,視圖只能在一定程度上提供數據的邏輯獨立,比如由于視圖的更新是有條件的,因此應用程序中修改數據的語句可能仍會因為基本表構造的改變而改變。另外,值得注意的是,因為視圖也是一種表,是虛擬表,不能與已有的表(視圖)出現重名。并且將視圖看成與表一樣的東西,更加容易理解使用規則。4.3 對于視圖的創建視圖的創建與表差不多。右擊視圖,新建視圖。圖圖圖第二部分 常見的一些MySQL語句與索引1.
10、寫在開始一般來說,創建好新表之后,不能直接用Navicat手動輸入數據。Navicat 是以直覺化的圖形用戶界面而建的,讓你可以以安全并且簡單的方式創建、組織、訪問并共用信息。那如何對數據庫里的數據進行增刪查改呢?這時候,就需要用到MySQL語句了。你可以編寫程序,拼寫MySQL語句傳到數據庫進行數據操作,也可以直接運行命令行來操作。這里,我們只示范命令行的拼寫MySQL語句。而對于數據較多的情況,我們則需要使用索引來優化我們的程序。2.MySQL語句 2.1 創建表CREATE TABLE 'emp' ( 'id' INTEGER UNSIGNED NOT N
11、ULL AUTO_INCREMENT, 'name' VARCHAR(45) NOT NULL, 'lastname' VARCHAR(45), 'dept' VARCHAR(45) DEFAULT 'sales', PRIMARY KEY ('id')ENGINE = InnoDB;)ENGINE = InnoDB; 上述語句在指定數據庫中創建了一個名為“emp”的表。同時會有一個有主鍵約束的自增長(AUTO_INCREMENT)字段“id”,自增保證了每次插入新行的時候id都會加1,而主鍵 約束則用來檢驗重復值
12、。字段“dept”被賦予了默認值(當沒設定內容時為“sales”)。你可以在創建表的時候指定“引擎”。否則會使用默認引擎 (MyISAM)。我們在這里使用“InnoDB”是因為它支持外鍵和事務處理。2.2 查詢語句(查)在平常生活中,我們對于數據的查詢是做得最多的一件事。所以我們這里主要講解一下關于查詢的語句。2.2.1單表查詢語句SELECT * FROM 表名 WHERE (條件); *表示查詢所有的字段,也可以只選擇個別字段。這樣就能將一行或幾行符合條件的數據從具體的某個表里取出來。比如 SELECT * FROM
13、transaction WHERE transactionID=。因為之前就在 transaction 里面加入的數據,所以改sql語句運行后的結果是:圖2.2.2選擇列SELECT 字段名,字段名 FROM 表名這個很好理解,就不多做解釋。如圖:圖2.2.3 多表查詢語句SELECT a.字段名,b.字段名 FROM 表名 a,表名 b圖這樣就相當于 將表ialarm的引用賦給a,transaction的引用賦給b,然后直接使用a. 和 b. 來去字段值2.2.4連表查詢語句SELECT DISTINCT tra.transactionID,ductID,duct
14、ItemID,ductName,ductVersion,tra.transactionProductAssignID,ductCode,pri.price FROM Transaction,transactionProductAssign AS tra,product AS pro,productItem AS priWHERE ductID=ductID AND transaction.transactionID=tra.transactionID AND 這里有一個關鍵詞,AS。所謂連表,就是將兩個或兩個以上的表連在一起
15、,看做一個表來取數據,以提高效率。最后查詢出來的數據會合成一個結果集返回。2.3插入語句(增)INSERT INTO 數據表 (字段1,字段2,字段3 ) VALUES (值1,值2,值3 )INSERT INTO 數據表 VALUES (值1,值2,值3 )" 不指定具體字段名表示將按照數據表中字段的順序,依次添加 INSERT INTO 目標數據表 SELECT *
16、160;FROM源數據表把源數據表的記錄添加到目標數據表2.4 更新語句(改)UPDATE 數據表 SET 字段名=字段值 WHERE 條件表達式UPDATE數據表 SET 字段1=值1,字段2=值2 字段n=值n WHERE 條件表達式UPDATE數據表 SET 字段1=值1,字段2=值2 字段n=值n 2.5 刪除語句(刪)DELECT FROM 數據表 WHERE 條件表達式
17、0; DELECT FROM 數據表 沒有條件將刪除數據表中所有記錄2.6 插入更新語句(混合語句)INSERT INTO 表名 (字段名) VALUES(對應字段值)ON DUPLICATE KEY UPDATE name='default name', lastname='default last name'2.7添加主鍵ALTER TABLE 'TABLE_NAME' DROP PRIMARY KEY, ADD PRIMARY KEY ('COLUMN_NAME');2.8
18、刪除主鍵ALTER TABLE 'TABLE_NAME' DROP PRIMARY KEY;2.9添加索引2.9.1建表時創建索引CREATE TABLE 'emp' ( Name varchar(45), 'id' INT, INDEX(ID)2.9.2 為已經存在的表創建索引Create Index id_index on emp(ID);3. 索引3.1寫在前面索引對查詢的速度有著至關重要的影響,理解索引也是進行數據庫性能調優的起點??紤]如下情況,假設數據庫中一個表有106條記錄,DBMS的 頁面大小為4K,并存儲100條記錄。如果沒有索引
19、,查詢將對整個表進行掃描,最壞的情況下,如果所有數據頁都不在內存,需要讀取104個頁面,如果這 104個頁面在磁盤上隨機分布,需要進行104次I/O,假設磁盤每次I/O時間為10ms(忽略數據傳輸時間),則總共需要100s(但實際上要好 很多很多)。如果對之建立B-Tree索引,則只需要進行log100(106)=3次頁面讀取,最壞情況下耗時30ms。這就是索引帶來的效果,很多 時候,當你的應用程序進行SQL查詢速度很慢時,應該想想是否可以建索引。索引是快速搜索的關鍵。MySQL索引的建立對于MySQL的高效運行是很重要的。3.2 索引的簡單使用假如我們創建了一個 mytable表:CREAT
20、E TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL ); 我們隨機向里面插入了10000條記錄,其中有一條:5555, admin。在查找username="admin"的記錄 SELECT * FROM mytable WHERE username='admin'時,如果在username上已經建立了索引,MySQL無須任何掃描,即準確可找到該記錄。相反,MySQL會掃描 所有記錄,即要
21、查詢10000條記錄。索引分單列索引和組合索引。單列索引,即一個索引只包含單個列,一個表可以有多個單列索引,但這不是組合索引。組合索引,即一個索包含多個列。MySQL索引類型包括:普通索引這是最基本的索引,它沒有任何限制。它有以下幾種創建方式:創建索引CREATE INDEX indexName ON mytable(username(length); 如果是CHAR,VARCHAR類型,length可以小于字段實際長度;如果是BLOB和TEXT類型,必須指定 length,下同。修改表結構ALTER mytable ADD INDEX indexName ON (username(lengt
22、h) 創建表的時候直接指定CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX indexName (username(length) ); 刪除索引的語法:DROP INDEX indexName ON mytable;唯一索引它與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。它有以下幾種創建方式:創建索引CREATE
23、UNIQUE INDEX indexName ON mytable(username(length) 修改表結構ALTER mytable ADD UNIQUE indexName ON (username(length) 創建表的時候直接指定CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, UNIQUE indexName (username(length) ); 主鍵索引它是一種特殊的
24、唯一索引,不允許有空值。一般是在建表的時候同時創建主鍵索引:CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, PRIMARY KEY(ID) ); 當然也可以用 ALTER 命令。記?。阂粋€表只能有一個主鍵。組合索引為了形象地對比單列索引和組合索引,為表添加多個字段:CREATE TABLE mytable( ID INT NOT NULL,
25、; username VARCHAR(16) NOT NULL, city VARCHAR(50) NOT NULL, age INT NOT NULL ); 為了進一步榨取MySQL的效率,就要考慮建立組合索引。就是將 name, city, age建到一個索引里:ALTER TABLE mytable ADD INDEX name_city_age (name(10),city,age); 建表時,usernname長度為 16,這里用 10。這是因為一般情況下名字的長度不會超過10,這樣會加速索引查詢速度
26、,還會減少索引文件的大小,提高INSERT的更新速度。如果分別在 usernname,city,age上建立單列索引,讓該表有3個單列索引,查詢時和上述的組合索引效率也會大不一樣,遠遠低于我們的組合索引。雖然此時有了三個索引,但MySQL只能用到其中的那個它認為似乎是最有效率的單列索引。建立這樣的組合索引,其實是相當于分別建立了下面三組組合索引:usernname,city,age usernname,city usernname 為什么沒有 city,age這樣的組合索引呢?這是因為MySQL組合索引“最左前綴”的結果。簡單的理解就
27、是只從最左面的開始組合。并不是只要包含這三列的查詢都 會用到該組合索引,下面的幾個SQL就會用到這個組合索引:SELECT * FROM mytable WHREE username="admin" AND city="鄭州" SELECT * FROM mytable WHREE username="admin" 而下面幾個則不會用到:SELECT * FROM mytable WHREE age=20 AND city="鄭州" SELECT * FROM mytable WHREE c
28、ity="鄭州"建立索引的時機到這里我們已經學會了建立索引,那么我們需要在什么情況下建立索引呢?一般來說,在WHERE和JOIN中出現的列需要建立索引,但也不完全如此, 因為MySQL只對<,<=,=,>,>=,BETWEEN,IN,以及某些時候的LIKE才會使用索引。例如:SELECT t.Name FROM mytable t LEFT JOIN mytable m ON t.Name=m.username WHERE m.age=20 AND m.city='鄭州' 此時就需要對city和age建立索引,由于mytable表的userame也出現在了JOIN子句中,也有對它建立索引的必要。剛才提到只有某些時候的LIKE才需建立索引。因為在以通配符%和_開頭作查詢時,MySQL不會使用索引。例如下句會使用索引:SELECT * FROM mytable WHERE username like'admin%' 而下句就不會使用:SELEC
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 軟件設計師考試整體思維與企業戰略試題及答案
- 風險管理與組織結構設計試題及答案
- 基于云計算的架構實踐試題及答案
- 輕松應對測試技巧2025年計算機二級VB考試試題及答案
- 網絡管理員考試基礎與技巧試題及答案
- 2025年環境可持續與戰略結合研究試題及答案
- 2025屆江蘇省張家港市第一中學八下數學期末調研試題含解析
- 2025屆遼寧省沈陽七中學八下數學期末復習檢測試題含解析
- 考試失敗的原因與試題及答案
- 電子商務平臺商家入駐協議
- 鉛冶煉行業清潔生產評價指標體系 替代 HJ 512-2009 HJ 513-2009
- 2025年公園管理崗面試題及答案
- 玉盤二部合唱正譜
- 實習工作目標工作計劃
- 2025混合交通流環境下的自動駕駛編隊仿真測試評價技術規范
- 鋁電解工(鋁電解操作工)職業技能考試題(附答案)
- 中國廣東省液化石油氣行業供需態勢、競爭格局及投資前景分析報告(智研咨詢)
- 房屋質量檢測鑒定報告
- 基于樹莓派的納米布沙漠甲蟲仿生機器人系統設計
- 2024年度押運服務收費標準及協議范本3篇
- 少數民族民歌+蒙古民族歌曲-【知識精研】高中音樂人音版(2019)必修+音樂鑒賞
評論
0/150
提交評論