數據庫Database
是按照數據結構來組織、存儲和管理數據的倉庫。常見的數據庫有Oracle
、DB2
、SQL Server
、MySQL
等...php
MySQL
是一個關係型數據庫管理系統,開源免費,由瑞典MySQL AB
公司開發,目前屬於Oracle
旗下產品。mysql
相關術語DB(Database)
:數據庫是存儲數據的集合。DBS(Database System)
:數據庫系統,由數據庫和數據庫管理軟件組成。DBMS(Database Management System)
:數據庫管理系統,是操做和管理數據庫的一個系統。SQL(Structured Query Language)
:結構化查詢語言,是數據庫的程序設計語言sql
MySQL
相關命令行操做數據庫
配置文件:my.cnf 登陸信息中須要注意的: ---命令行須要以';'或者是'\g'結尾,否則沒法結束; ---能夠經過'help'或者'\h'或者'?'加上相關關鍵字來查看手冊; ---'\c'能夠取消當前命令的執行; mysql -uroot -p[密碼] #登陸MySQL mysql -uroot -p -D db_name #登陸MySQL的同時打開數據庫 exit; #退出MySQL quit; #退出MySQL \q; #退出MySQL ctrl+c #退出MySQL #獲取當前MySQL的版本號 mysql -V; mysql --version;
SQL
語句語法規範數組
MySQL
的關鍵字須要大寫,庫名、表名、字段名稱等使用小寫;SQL
語句支持折行操做,拆分的時候不能把完整單詞拆開;MySQL
的保留字,若是必需要使用,須要用反引號;經常使用SQL
語句SELECT USER();
#獲得登陸的用戶SELECT VERSION();
#獲得MySQL的版本信息SELECT NOW();
#獲得當前的日期時間SELECT DATABASE();
#獲得當前打開的數據庫緩存
SQL
的註釋數據結構
#註釋內容 --註釋內容
數據庫SQL
操做併發
#建立數據庫 CREATE DATABASE|SCHEMA [IF NOT EXISTS] db_name; CREATE DATABASE|SCHEMA [IF NOT EXISTS] db_name DEFAULT CHARACTER SET [=] 'charset'; #指定編碼格式 --注意:數據庫名稱最好有意義,名稱不要包含特殊字符或者是MySQL關鍵字。 #修改數據庫的編碼方式 ALTER DATABASE db_name DEFAULT CHARACTER SET [=] 'charset'; #刪除數據庫 DROP DATABASE [IF EXISTS] db_name; #打開指定數據庫 USE db_name; #在操做數據庫裏面的表以前須要先打開數據庫 #SHOW方法 SHOW DATABASES|SCHEMAS; #查看所有的數據庫 SHOW CREATE DATABASE db_name; #查看數據庫的詳細信息(編碼格式) SHOW WARNINGS; #查看上一步操做產生的警告信息 #MySQL註釋 '#'註釋內容 '--'註釋內容
數據表SQL
操做
數據庫表是一系列二維數組的集合,用來表明和存儲數據對象之間的關係,是數據庫最重要的組成部分之一。
數據保存在表中,表名要求惟一,不要包含特殊字符,最好含義明確函數
表結構相關操做:工具
#建立表 CREATE TABLE[IF NOT EXISTS] table_name( 字段名稱1 字段類型[完整性約束條件], 字段名稱2 字段類型[完整性約束條件], ... )ENGINE=存儲引擎 CHARSET=編碼方式; #刪除表 DROP TABLE [IF EXISTS] table_name; #查看錶的建立信息 SHOW CREATE TABLE table_name; #查看當前數據庫下全部的表 SHOW [FULL] TABLES [{FROM|IN} db_name]; #查看錶結構 DESC table_name; DESCRIBE table_name; SHOW COLUMNS FROM table_name; #添加字段 ALTER TABLE table_name ADD 字段名稱 字段屬性[完整性約束條件] [FIRST|AFTER 字段名稱]; #刪除字段 ALTER TABLE table_name DROP 字段名稱; #添加默認值 ALTER TABLE table_name ALTER 字段名稱 SET DEFAULT 默認值; #刪除默認值 ALTER TABLE table_name ALTER 字段名稱 DROP DEFAULT; #修改字段類型、字段屬性 ALTER TABLE table_name MODIFY 字段名稱 字段類型[字段屬性] [FIRST|AFTER 字段名稱] #修改字段名稱、字段類型、字段屬性 ALTER TABLE table_name CHANGE 原字段名稱 新字段名稱 字段屬性 [FIRST|AFTER 字段名稱] #添加主鍵 ALTER TABLE table_name ADD PRIMARY KEY(字段名稱) #刪除主鍵 ALTER TABLE table_name DROP PRIMARY KEY; #添加惟一 ALTER TABLE table_name ADD UNIQUE KEY|INDEX [index_name](字段名稱) --若是不添加index_name,則索引名稱默認爲字段名稱 #刪除惟一 ALTER TABLE table_name DROP INDEX index_name; #修改數據表名稱 ALTER TABLE table_name RENAME [TO|AS] new_table_name; RENAME TABLE table_name TO new_table_name;
關鍵字含義UNSIGNED
:無符號,沒有負數,從0開始ZEROFILL
:零填充,當數據顯示長度不夠的時候可使用前補0的效果填充至指定長度NOT NULL
:非空約束,也就是插入值的時候這個字段必需要給值DEFAULT
:默認值,若是插入記錄的時候沒有給字段賦值,則會使用默認值 PRIAMARY KEY
:主鍵,標識記錄的惟一性,值不能重複,一個表只能有一個主鍵UNIQUE KEY
:惟一性索引,一個表中能夠有多個字段是惟一索引,一樣的值不能重複,可是NULL除外AUTO_INCREASE
:自動增加,只能用於數值列,並且配合索引或主鍵使用FOREIGN KEY
:外鍵約束COMMENT
:添加註釋
#設置主鍵的兩種方式 CREATE TABLE test_primarykey(id INT UNSIGNED PRIMARY KEY, username VARCHAR(20)); #直接在字段後面設置屬性 CREATE TABLE test_primarykey1(id INT UNSIGNED, username VARCHAR(20), PRIMARY KEY(id)); #利用函數設置字段
MySQL
數據類型
數值型
TINYINT
SMALLINT
MEDIUMINT
INT
BIGINT
BOOL/BOOLEAN
FLOAT
DOUBLE
DECIMAL
CHAR(M)
VARCHAR(M)
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
ENUM('', ''...)
SET('', ''...)
CHAR
和VARCHAR
的比較:CHAR
是定長,VARCHAR
變長;CHAR
效率高於VARCHAR
,CHAR
至關於拿空間換時間,VARCHAR
拿時間換空間;CHAR
默認存儲數據的時候,後面會用空格填充到指定長度,而在檢索的時候會去掉後面空格,VARCHAR
不會進行填充,檢索的時候尾部的空格會留下。
注意:TEXT
類型的字段不能有默認值,檢索的時候不存在大小寫轉換。
MySQL
中經常使用函數COUNT()
語法:COUNT(column_name)
:返回指定列的值的數目COUNT(*)
:返回表中的記錄數目COUNT(DISTINCT column_name)
:返回指定列的不一樣值的數目
CONCAT()
語法:CONCAT()
:用於將多個字符串鏈接成一個字符串。
用法:CONCAT(str1, str2, …)
,返回結果爲鏈接參數產生的字符串,若是任何一個參數爲NULL
,則返回爲NULL
CONCAT_WS()
:用一個分隔符將多個字符串鏈接成一個字符串
用法:CONCAT_WS(separator, str1, str2, …)
,若是分隔符爲NULL
,則返回爲NULL
MySQL
存儲引擎MyISAM
存儲引擎
MyISAM
的表會在磁盤中產生三個文件:.frm
.MYD
.MYI
MyISAM
單表最大支持的數據量2的64次方條記錄MyISAM
引擎的存儲格式:定長FIXED
、動態DYNAMIC
、壓縮COMPRESSED
InnoDB
存儲引擎
ACID
模型Atomicity
原子性、Consistency
一致性、Isolation
隔離性、Durability
持久性,支持事務,具備從服務崩潰中恢復的能力,可以最大限度保護用戶的數據InnoDB
擁有本身獨立的緩衝池,經常使用的數據和索引都在緩存中記錄SQL
操做
添加記錄
#一條記錄用VALUE,多條記錄用VALUES INSERT [INTO] table_name[(col_name1, col_name2...)] VALUE|VALUES(value1, value2...); #不列出字段名稱[須要按照建表時的字段順序給每個字段賦值] INSERT [INTO] table_name VALUE(value1, value2...); #一次添加多條記錄 INSERT [INTO] table_name[(col_name1, col_name2...)] VALUES(value1, value2...), (value1, value2...),...; #INSERT...SET語句 INSERT [INTO] table_name SET 字段名稱=值,...; #INSERT...SELECT語句 INSERT [INTO] table_name SELECT 字段名稱,... FROM table_name [WHERE條件語句];
修改記錄
UPDATE table_name SET 字段名稱1=值1, 字段名稱2=值2,... [WHERE條件語句];
刪除記錄
DELETE FROM table_name [WHERE條件語句];
查詢記錄
# DESC:指定列按降序排列 ASC:指定列按升序排列 # GROUP BY:分組,把值相同放到一個組裏,最終查詢出的結果只會顯示組中一條記錄,分組配合GROUP_CONCAT()查看組中某個字段的詳細信息 # ORDER BY:設置記錄按照某字段的值進行排序,默認ASC升序 # LIMIT:限制結果集的顯示條數,能夠用來實現分頁 LIMIT 數字:顯示結果集的前幾條記錄 LIMIT offset, row_count:從offset開始[offset從0開始],顯示幾條記錄 SELECT 字段1, 字段2,... FROM table_name [WHERE條件語句] [GROUP BY(col_name) Having 二次篩選] [ORDER BY(col_name) DESC|ASC] [LIMIT 限制結果集的顯示條數]; #查詢全部記錄的全部字段 SELECT * FROM table_name; #查詢指定字段的信息 SELECT 字段名稱1, 字段名稱2,... FROM table_name [WHERE條件語句]; #查詢某數據庫下某表的記錄[這樣能夠不用打開該數據庫就能操做該表] SELECT 字段名稱1, 字段名稱2,... FROM db_name.table_name [WHERE條件語句]; #給字段取別名[別名名稱可使用中文] SELECT 字段名稱 [AS] 別名名稱,... FROM table_name [WHERE條件語句]; #給表取別名[單張表沒有太大做用,多張表才體現] SELECT 字段名稱1, 字段名稱2,... FROM table_name [AS] 別名 [WHERE條件語句]; #表名.字段名稱[單張表沒有太大做用,多張表才體現] SELECT table_name.字段名稱,... FROM table_name [WHERE條件語句] #WHERE條件[篩選符合條件的記錄] 比較運算符:> < >= <= != <> <=> 邏輯運算符:AND(邏輯與) OR(邏輯或) IS [NOT] NULL:檢測值是否爲NULL或者NOT NULL 指定範圍:[NOT] BETWEEN...AND 指定集合:[NOT] IN(值1, 值2,..) 匹配字符:[NOT] LIKE %:任意長度的字符串 _:任意一個字符 #模糊查詢 在執行數據庫查詢時,分爲完整查詢和模糊查詢。 格式:SELECT 字段1, 字段2,.. FROM table_name WHERE 某字段 LIKE 條件; 模糊查詢包涵兩種通配符: %:表示0個或多個字符,能夠匹配任意類型或任意長度的字符。 LIKE '%王':匹配的是字段結尾爲'王'的全部記錄; LIKE '王%':匹配的是字段開頭爲'王'的全部記錄; LIKE '%王%':匹配的是字段包含'王'的全部記錄; _:表示任何單個字符,匹配單個任意字符,它經常使用來限制表達式的字符長度。 LIKE '_王':匹配的是字段長度爲2,而且結尾爲'王'的全部記錄; LIKE '王_':匹配的是字段長度爲2,而且開頭爲'王'的全部記錄; LIKE '_王_':匹配的是字段長度爲3,而且中間爲'王'的全部記錄; #經常使用聚合函數 COUNT():統計記錄總數 SUM():求和 MAX():求最大值 MIN():求最小值 AVG():求平均值 #產生隨機數 SELECT RAND(); #實現隨機記錄[出現的記錄排序是隨機的] SELECT * FROM table_name ORDER BY RAND(); #測試完整SELECT語句的形式 MariaDB [test004]> SELECT GROUP_CONCAT(name) AS '姓名', COUNT(*) AS '人數', SUM(age) AS '總和', MAX(age) AS '最大', MIN(age) AS '最小', AVG(age) AS '平均' FROM user WHERE id >=1 GROUP BY address ORDER BY '總和';
多表查詢
1. 笛卡爾積形式 笛卡爾積是多表鏈接組成一個新表的狀況,全部的鏈接方式都會先生成臨時笛卡爾積表,笛卡爾積是關係代數裏的一個概念,表示兩個表中的每一行數據任意組合,新表的記錄數爲多張表的記錄條數的乘積,實際應用中通常不知足需求,只有在兩個錶鏈接時加上限制條件,纔有實際的意義。 test1 test2 +------+--------+ +------+--------+ | id | name | | id | name | +------+--------+ +------+--------+ | 1 | 小紅 | | 1 | 張三 | | 2 | 小明 | | 2 | 李四 | +------+--------+ +------+--------+ MariaDB [test005]> select a.*, b.* from test1 a, test2 b; +------+--------+------+--------+ | id | name | id | name | +------+--------+------+--------+ | 1 | 張三 | 1 | 小紅 | | 2 | 李四 | 1 | 小紅 | | 1 | 張三 | 2 | 小明 | | 2 | 李四 | 2 | 小明 | +------+--------+------+--------+ 2. 內鏈接形式(經常使用) 利用內鏈接可獲取兩表的公共部分的記錄 SELECT 字段名稱,... FROM table_name1 INNER JOIN table_name2 ON 鏈接條件 3. 外鏈接形式 左外鏈接:以左表爲主,先顯示左表中的所有記錄,再去右表中查詢知足複合條件的記錄,不符合的以NULL代替 SELECT 字段名稱,... FROM table_name1 LEFT [OUTER] JOIN table_name2 ON 鏈接條件 右外鏈接:以右表爲主,先顯示右表中的所有記錄,再去左表中查詢知足複合條件的記錄,不符合的以NULL代替 SELECT 字段名稱,... FROM table_name1 RIGHT [OUTER] JOIN table_name2 ON 鏈接條件
圖形化工具管理數據庫
B/S結構 phpMyAdmin C/S結構 Sequel Pro Navicat for MySQL MySQL workbench