標籤:mysql 基礎知識
一,基於資料庫的PHP項目 目前的動態網站都是基於資料庫的,將網站內容使用資料庫管理系統去系統管理使用者,欄目,圖片,文章,評論都儲存在資料庫中 比如 XSCMS庫 users clumn pic articles commention二,為什麼使用MySQL? Oracle,DB2,SQL Server,…… MySQL-----開源 表結構 中小型項目三,MySQL架構 C/S結構 3306 MySQL的預設連接埠 MySQL DBMS 用戶端 伺服器端----資料庫----資料表----(記錄,欄位)四,PHP程式員主要學習哪些操作 ·為你的項目設計表 ·如何使用SQL語句增刪改查 程式中用不到的都可以使用工具完成五,MySQL的安裝和啟動 和PHP整合 Linux下的啟動 service mysqld stop service mysqld start service mysqld restart六,MySQL的目錄結構 設定檔----my.ini 檔案夾bin----命令 檔案夾data-----儲存資料庫 在data檔案夾下建立一個檔案夾就是建立一個資料庫七,瞭解資料庫的MySQL語句操作 DDL 定義和管理資料對象(庫,表,視圖,索引) CREATE DROP ALTER 建立庫 create database if not exists test 刪除庫 drop database if exists test 建立表 create table databaseName.tableName 刪除表 drop table databaseName.tableName DML 對資料操縱,和表中的資料記錄有關 INSERT UPDATE DELETE insert into users(colName,...) values(colValue,...); 插入表資料 insert into tableName([欄位列表]) values(值列表1),(值列表2),(值列表3); 特點: 如果在表名後沒有給出欄位列表,則值列表要列出所有欄位的值,必須按預設的順序 所有需要寫欄位名的地方,都不要加單引號或雙引號,但所有的值都要使用單引號或雙引號(建議,MySQL可以自動轉換) 再插入資料時,最好給出欄位列表,則值要和欄位列表對象即可,可以不按表中的欄位的順序 修改表資料 update 表名 set 欄位=‘值’[,欄位2=‘值‘,...][條件] 條件是確定要更改的記錄,可以通過條件指定一條,也可以指定多條 update cats set id=id-1 where id >= 8; delete from 表名 [條件] 注意:沒有條件,會更改/刪除整個表 delete from tableName;//刪除表 truncate tableName;//刪除表,效率更高 只要你想更新,刪除,尋找,只要寫對條件就能準確找到要管理的一條或多條語句 DQL SELECT 查詢 select [all|distinct]{*|table.*|[table.]field1[as alias1][ 其他欄位]} from 表名 [where ] [group by] [order by] [having] [limit count] 使用select語句,目的就是可以按照你的想法將資料查出來,將結果返回給你 1,欄位要列出要查詢的欄位 2,可以為每一個欄位用as起一個別名,(關鍵字衝突,多表查詢時) 3,DISTINCT針對整個查詢列表取消相同的記錄 4,在SQL語句中,使用運算式的列(算數運算子號,邏輯運算子號,條件) 5,where 可以在select,update,delete中 邏輯運算子(多個條件組合) && || ! AND OR not 比較子 =(<=>) 和程式中不一樣 ,<=> 可以比較空值,而=不可以比較空值,如name=null,這個將查不出來,而name<=>null 則可以查出來 !=(<>) < > >= <= is NULL is not null SQL中所用: between…and 連續的取值區間 not between and like 模糊查詢 _和%兩個萬用字元 _ 任意一個字元 % 0個或多個字元 not like in 單個檢索 select * from products where id in(5,10,20,25,30); regexp rlike 模糊查詢 Regex 6,多表查詢(串連查詢) 7,巢狀查詢 select … where(select ……) 8,order by 欄位[desc|sac] 排序 desc 倒序 多個欄位查詢必排序 9,limit num 限制查詢數量 limit num1,num2//從num1取,取num2個 10,group by ziduanNanme count() sum() avg() max() min() 11,Having 給出分組的條件 每一個組的條件,having avg(price) > 50; having 要在group by 後使用 DCL 資料控制,系統管理權限和資料更改 GRANT,REVOKE,COMMIT,ROLLBACK use tes1;//轉到一個資料庫中 desc tableName; //查看錶結構 MySQL示弱類型,建立時使用字串操縱,進入資料庫時會自動轉換成相對應的類型 \s 看資料庫狀態 show databases 看所有庫 show tables 看所有表 show variables 設定檔的變數 desc tableName 看錶結構 協助的使用 ?contents 1,執行SQL語句,串連資料庫伺服器 mysql -h localhost -u root -ppassword //-p是不可少的,不是密碼的部分 show variables;查詢所有的變數 show variables like ‘part‘; show databases;//查看庫 create database test; 建立庫 drop database test;//刪除庫 2 建立資料庫 3 選擇預設資料庫 use databaseName建立資料表 1,什麼是資料表 記錄+欄位 2,建立資料表的SQL DDL語句 CAREATE TABLE [IF NOT EXISTS]tableName( 欄位名1 列類型[屬性][索引] 欄位名2 列類型[屬性][索引] ... 欄位名n 列類型[屬性][索引] )[表類型][表字元集]; 中括弧中的都是可選類型 3,資料值和類型 ·數值型 整型 1位元組 TINYINT 2位元組 SMALLINT 3位元組 MEDIUMINT 4位元組 INT 8位元組 BIGINT 浮點型 4位元組 float(M,D) M 總共佔據的位元 D 保留的小數位位元 8位元組 double(M,D) M+2位元組 定點數decimal(M,D) ·字串 聲音,映像,圖片等位元據 char(M) 255字元 固定長度 vchar(M) 255字元 可變長度 char固定長度,處理速度塊,缺點會浪費空間,char在串連時會去掉末尾的空格 vchar 值變化大 text 文本資料(文章) 2e16-1位元組 MEDIUMTEXT 2E24-1 LONGTEXT 注意:varchar的文本不支援換行,而text類型支援換行 blob 儲存二進位,照片,壓縮資料 MEDIUMBLOB LONGBLOB enum 枚舉類型 1-2位元組 ----65535個成員 一次只能用enum中的一個值 例:儲存enum(‘男’,‘女’) set 集合類型 1,2,3,4,8位元組-----64個成員 一次可以使用集合中的多個值 ·日期型 DATE YYYY-MM-DD TIME hh:mm:ss DATETIME YYYY-MM-DD hh:mm:ss TIMESTAMP YYYYMMDDhhmmss YEAR YYYY 時間的儲存形式如上所示 儲存的時間一定要注意格式 建立表時最好不要使用這些中的時間格式(PHP時間戳記 1970-1-1 0:0:0) 用整數儲存時間 (PHP中的time()) ·NULLphpMyAdmin 4,資料欄位屬性 ·unsigned 設定無符號的類型,可以使空間增加一倍 只能用在數值型欄位 ·zerofill 只能用在數值型欄位,在數值資料前加入前置,該欄位會自動加上無符號 ·AUTO_INCREMENT 只能是整數,資料每增加一條就值自動增加1 欄位值不允許重複 此欄位留空,null,0,都會使此欄位自動增加1 如果自己手動增長,要>=最大值 ·NULL 和 NOT NULL 預設是空,時間戳記除外 將來將這個錶轉為PHP程式的資料時,整數列有NULL 能轉為0嗎?字串中有NULL 能轉成0嗎--------------------不一定 建議:在建立表時每一個欄位都不要插入null ·default 預設值 例:建立一個使用者表 create table users( id int unsigned not nullauto_increment primary key, name varchar(30) not null default ‘‘, height double(10,2) not null default 0.00, age int not null default 0, sex char(4) not null default ‘男‘ ); 5,建立索引 通常是為了查詢,確保資料的唯一性 1,主鍵索引 主要是確定一條特定記錄的位置, 最好為每一張表定義一個主鍵 一個表只能只能指定一個主鍵 主鍵的值不可為空 可以有多個候選索引 primary key 指定主鍵 2,唯一索引 都可以防止建立重複的值 每一個表都可以有多個唯一索引 unique 作用,為了防止資料的重複1111111111111111111 3,常規索引 最重要的技術 提升資料庫的效能 索引最佳化要優先考慮常規索引 1111111111111111111 22222222222 3333333333333 ............ 999999999999999999 共幾百萬條資料 缺點:佔用磁碟空間 可以提高尋找速度,但會減慢資料列上的插入,刪除,修改 不要試圖為每一列建立索引 技巧: Alter table tableName add columnName 類型 屬性 分表,建立索引的為一個表,不建立索引的為一個表 需要條件搜尋的,需要條件分組的,需要條件排序的,這樣的列可以使用常規索引,但不要太多,要適可而止 可以單獨使用,也可以在建立表時建立,索引是一個獨立的對象 create index indexname on tableName(欄位); drop index indexname on tableName index key 是同義字 單列多列都可以 4,全文索引 fulltext類型索引,MyISAM表類型上使用,只有在varchar char text文本字串上使用,也可以在多個資料列上使用 把某個資料表中的某個資料列中出現的所有單詞產生一個清單 6,表類型及儲存位置 MySQL與大多數資料庫不同,MySQL有一個儲存引擎的概念 MySQL可以針對不同的資料引擎需求可以選擇最優的儲存引擎 引擎 資料表類型(查詢 show engines) 我們只學12個中的MyISAM和InnoDB兩個 create table () type InnoDB; create table () engine InnoDB; MyISAM是預設的 根據不同的需求選擇不同的儲存引擎 注意:在一個MySQL庫中可以(建立表時)指定不同的表類型 MyISAM 成熟穩定,易於管理, OPTIMIZE TABLE 表名 強調快速讀取操作 有一些功能不支援 InnoDB 恢複復原 支援外鍵 空間佔用量比MyISAM大得多 支援MyISAM不支援的功能 不支援全文索引 功能 MyISAM InnoDB 交易處理 不支援 支援 資料行鎖定 不支援 支援 外鍵約束 不支援 支援 資料表空間 相對小 相對大,最大2倍 全文索引 支援 不支援 7,預設字元集 對於漢字: GBK 2個位元組 UTF-8 3個位元組 MySQL伺服器,資料庫,資料表,欄位都可以指定字元集,相對於其他的資料庫顯得靈活 show character set//查看資料庫支援的字元集 資料庫中的UTF-8是沒有中間的-的,即資料庫的UTF-8是utf8 MySQL的字元集包括 字元集,是用來定義MySQL儲存的方式 校對規則:對規則定義了比較字串的方式 1個字元集可以對應多個校對規則 8,修改表 沒有改不了的地方 Alter table tableName add columnName 類型 屬性//添加欄位到表末尾 Alter table tableName add columnName 類型 屬性 after 已存在的列名//加大已存在列之後 Alter table tableName add columnName 類型 屬性 first//加到第一列 alter table tableName modify sex char(3);//修改列的屬性 modify 修改類型 alter table tableName change oldname newname varchar(30);//可以改變欄位名,modify不能更改欄位名 alter table tableName rename as newtableName;//更改表名 alter table tableName drop columnName drop table 函數 字串函數 1 concat(s1,...,sn); 串連 2 insert(des,start,len,insert); 將des的start位置開始,len個字串長度替換為insert 3 lower(str) upper(str) 將字串轉換為小寫或大寫 4 Left(str,x) right(str,x) 返回字串的左邊或右邊的x個字元,若x為空白,則什麼也不返回
mysql學習小結