《PHP, MySQL, Javascript和CSS》讀書隨手記----MySQL篇

一 基礎

  • 要求結尾分號
  • 若是在命令輸入期間想要終止其運行,不要Ctrl-C. 要輸入\c,並按回車鍵.
  • sql命令和關鍵字不區分大小寫. 表名在windows中不區分大小寫,可是在linux和os x中區分

 

二 sql語言

建立一個數據庫php

CREATE DATABASE publicationmysql

建立用戶linux

GRANT PRIVILEGES ON database.object TO 'username'@'hostname' IDENTIFIED BY 'password'sql

 

添加自增型ID列數據庫

ALTER TABLE classics ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT KEYwindows

 

刪除列數據庫設計

ALTER TABLE classics DROP pages;fetch

 

刪除表設計

DROP TABLE classics;server

 

添加新列

ALTER TABLE classics ADD pages SMALLINT UNSIGNED

 

添加索引

ALTER TABLE classics ADD INDEX(author(20));

ALTER TABLE classics ADD INDEX(title(20));

ALTER TABLE classics ADD INDEX(category(4));

ALTER TABLE classics ADD INDEX(year);

另外一種添加索引的方法

CREATE INDEX author ON classics (author(20));

 

建立主鍵

ALTER TABLE classics ADD isbn CHAR(13) PRIMARY KEY;

或者: 

ALTER TABLE classics ADD isbn CHAR(13);

...

ALTER TABLE classics ADD PRIMARY KEY(isbn)

 

建立全文索引: 容許超快速檢索文本中的全部列.

在每一個數據字符串中存儲做爲專用索引的單詞, 以實現用"天然語言"進行檢索.

注意:

  • fulltext索引只能用於MyISAM表,是MySQL默認的存儲引擎使用的類型. 若是須要將錶轉換爲MyISAM, 一般可使用MySQL命令 ALTER TABLE tablename ENGINE = MyISAM
  • fulltext索引的建立只適用於CHAR, VARCHAR和TEXT列
  • 在建立表時, 能夠經過CREATE TABLE語句定義FULLTEXT索引, 或以後使用ALTER TABLE (或用CREATE INDEX)加入
  • 對於一個大型數據集, 將數據加載到一個沒有FULLTEXT索引的表中後再建立索引, 要比將數據加載到一個已經有全文索引的表中塊的多
  • 非索引詞(stopwords, 好比and, as等會被忽略)

ALTER TABLE classics ADD FULLTEXT(author, title)

使用FULLTEXT索引: MATCH ... AGAINST. 

 

MATCH...AGAINST

容許在一個查詢中輸入多個單詞, 並對fulltext列中的全部單詞進行覈對. fulltext索引不區分大小寫, 因此查詢中所使用的大小寫沒有區別

SELECT author,title FROM classics WHERE MATCH(author, title) AGAINST('and')    返回空集. 由於and是一個無用詞, 會被忽略. 無論這些列中存儲了什麼

SELECT author,title FROM classics WHERE MATCH(author, title) AGAINST('old shop')

 

布爾模式

MATCH...AGAINST...IN BOOLEAN MODE

改變了標準fulltext查詢的做用, 使其能夠搜索任意組合的搜索詞, 而不要求全部的搜索詞都在文本中. 一列中只有惟一一個詞的話, 檢索會返回該詞所在的行

布爾模式還能夠在檢索詞前用+或-來表示是否必須包含或排除.

 

數據庫查詢

SELECT * FROM classics

SELECT author, title FROM classics

SELECT COUNT(*) FROM classics    獲取表的行數

SELECT DISTINCT author FROM classics    清除包含相同數據的多重輸入

 

DELETE

DELETE FROM classics WHERE title='Little Dorrit';

 

WHERE

=

like %匹配任意字符

 

LIMIT

限定選擇在一次查詢中返回的行數, 以及從表中的什麼位置開始返回

若是傳遞一個參數, 則通知mysql從結果的頭部開始, 並返回參數指定的行數

若是傳的是兩個參數, 那麼第一個參數表示從開始顯示點算起的偏移量, 第二個參數表示返回的數量.

偏移量從0開始, 而返回的行數從1開始

SELECT author,title FROM classics LIMIT 1,3    從第二行開始返回三行

SELECT author,title FROM classics LIMIT 3     返回表的前3行

 

UPDATE....SET

更新字段內容

 

ORDER BY

經過一個或多個列按升序(ASC, 默認)或降序(DESC)形式將返回的結果進行排序

SELECT author, title, year FROM classics ORDER BY author ASC, year DESC

 

GROUP BY

組織查詢返回的結果

SELECT category, COUNT(author) FROM classics GROUP BY category;

 

兩個錶鏈接成一個單一的\SELECT

SELECT name, author, titile from customers, classics WHERE customers.isbn=classics.isbn

 

NATURAL JOIN(天然鏈接)

SELECT name, author, title FROM customers NATURAL JOIN classics

 

JOIN...ON

指定一個列將兩個錶鏈接在一塊兒

SELECT name, author, title FROM customers JOIN classics ON customers.isbn=classics.isbn;

 

AS建立別名:

在表名後面加AS和別名

SELECT name, author, title FROM customers AS cust, classics, AS class WHERE cust.isbn=class.isbn;

 

使用邏輯運算符

AND OR NOT

 

三 數據庫設計

第一範式: 處理多列間的重複數據(或冗餘)

  • 不能有包含相同類型數據的重複列出現
  • 全部的列都是單值的
  • 要有一個主鍵來惟一標識每一行

第二範式: 處理多行間的冗餘

第三範式: 數據不直接依賴於主鍵, 但根據相關性, 也要將依賴於表中其餘值的數據移到其餘單獨的表中

 

事務:

使用begin或start transaction語句開始

commit命令把全部的更改提交到數據庫. 在收到commit命令以前,數據庫認爲所作的任何更改都是暫時的. 這個功能提供了撤銷事務的機會, 不發送commit而是發出rollback命令即可撤銷

使用rollback命令, 能夠告訴mysql取消一個事務開始以來作過的全部查詢, 並結束該事務.

 

explain 可獲得任何查詢快照, 來肯定是否能以更好或更有效的方式發出查詢.

EXPLAIN SELECT * FROM accounts WHERE number='123454';

 

備份:

備份前要關閉數據庫或鎖定: LOCK TABLES database.tablename READ;(運行中的mysql仍然可讀,但不能寫入)

mysqldump -u username -ppassword database> database.sql

mysqldump -u username -ppassword database tablename > tablename.sql    只備份一張表

mysqldump -u username -ppassword --all-databases > all_databases.sql     一次性備份全部的mysql數據庫

 

從備份文件中恢復數據庫

mysql -u username -ppassword < all_databases.sql

 

恢復單個數據庫: 

mysql -u username -ppassword -D database < database.sql

將一張表恢復到一個數據庫中

mysql -u username -ppassword -D database < tablename.sql

 

四 php鏈接數據庫

$db_server = mysql_connect($db_hostname, $db_username, $db_password);

選擇數據庫:

mysql_select_db($db_database)

建立並執行命令:

$query = "SELECT * FROM classics";

$result = mysql_query($query);

獲取結果:

$rows = mysql_num_rows($result);    //查詢到的行數

for ($j=0; $j<$rows; ++$j){

  echo mysql_result($result, $j, 'author');

}

更快的方法: mysql_fetch_row

獲取一行數據:

for(.....){

  $row = mysql_fetch_row($result);

  echo $row[0];

}

關閉鏈接:

mysql_close($db_server);

相關文章
相關標籤/搜索