描述:mysql 是開源的關係型數據庫,學習它以前能夠先在本地安裝一個典型的mysql 數據庫,並將mysql 安裝目錄下的bin 目錄配置到系統環境變量的PATH中,這樣就能夠在任意路徑下登陸mysql客戶端,能夠百度獲取配置方式。mysql
mysql的默認端口是3306,mysql的超級用戶是root, mysql建立輸入庫是CREATE DATABASE, 修改數據庫是ALTER DATABASE,刪除數據庫 DROP DATABASE。web
從mysql 的bin 目錄下進入mysql的客戶端,輸入:mysql -hlocalhost -uroot -p 回車,再輸入密碼 回車,就能夠登陸mysql 客戶端,能夠對mysql 數據庫實行命令操做,輸入exit, quit, \q 三個中的任意一個命令,對mysql 客戶端退出操做。算法
mysql 語句規範:sql
1:關鍵字和函數名都要大寫;數據庫
2:數據庫名,表名,字段名要小寫;網絡
3:每條sql語句都要以分號結尾;併發
注意: 及時關鍵字和函數名寫成小寫,系統也是確認的,通常用來區別關鍵字,函數,數據庫名,表名,字段名,書寫的時候要嚴格遵照。函數
一些經常使用的命令:學習
SHOW DATABASES; //查看數據庫列表ui
USE databaseName ; //使用databaseName 數據庫
SHOW TABLES; // 查看databaseName 數據庫中的表
CREATE DATABASE IF NOT EXISTS databaseName; //建立databaseName數據庫
ALTER DATABASE databaseName CHARACTER SET utf8; //修改數據庫databaseName的字符編碼格式爲utf8
DROP DATABASE IF EXISTS databaseName; //刪除數據庫databaseName
注意:數據庫的建立作if not exists, 刪除作if exists, 修改則沒有這個判斷存在的關鍵字。
數據類型
存儲數字:
存放整數的類型有整型:TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT。
存放小數的類型有浮點型:FLOAT, DOUBLE。
存儲日期時間:YEAR, TIME, DATE, DATETIME, TIMESTAMP。
存儲字符型:CHAR, VARCHAR, TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT, ENUM, SET。
注意:存儲範圍越大,佔用的空間就越大,使用過程當中,根據使用場景,選擇最合理最合適的數據類型,而不是存儲範圍最大的數據類型。
數據表的操做
USE DATABASEName; //使用DATABASEName 數據庫
SELECT DATABASE(); //查看當前使用的數據庫名稱
建立數據庫語法:
CREATE TABLE [IF NOT EXISTS] TABLENAME (
column_name data_type,
……
);
SHOW TABLES; // 查看當前數據庫中是否有剛剛新建的表
SHOW TABLES FROM otherDatabaseName; // 查看其餘數據庫中的表 後面還能夠帶 LIKE, WHERE 模糊查詢或查詢條件 的通配符。
SHOW COLUMNS FROM tableName; // 查看錶中的列
記錄操做
INSERT
INSERT INTO tb1 [column_name, ……] VALUES(val, ……); // 如何前面的列名省略,則全部字段所有賦值,若是隻給部分字段賦值,則必須制定列名
SELECT
SELECT expr, … FROM tableName; //查詢表中的記錄,證實記錄是否存在
NULL, NOT NULL
容許爲空或非空約束,指定字段在數據錄入的時候是否爲空,兩者只能選其一做用一個字段。不爲空的字段在錄入數據的時候必須爲其賦值。
AUTO_INCREMENT
保證記錄的惟一性,字段值不會重複,自動編號,且必須與主鍵組合使用,默認狀況下起始值爲1, 每次的增量爲1。能夠是整數,或者浮點數,浮點數的小數位數必須是0,好比float(7, 0), double(7, 0)。
PRIMARY_KEY
主鍵約束,每張表只能存在一個主鍵,主鍵保證記錄的惟一性,主鍵自動爲NOT NULL 。
注意:auto_increment 必須與主鍵 primary_key 一塊兒使用,但主鍵 primary_key 不必定要與iauto_increment 一塊兒使用。
UNIQUE_KEY
惟一約束,能夠保證記錄的惟一性,惟一約束的字段能夠爲空值(NULL),每一張數據表能夠存放多個惟一約束。
DEFAULT
默認約束,當插入記錄時,若是沒有明確爲字段賦值,則自動賦予默認值。
FOREIGN_KEY
外鍵約束保持數據的一致性與完整性,實現一對一或一對多的關係。
要求: 1,父表和子表必須使用相同的存儲引擎,並且禁止使用臨時表。
2, 數據表的存儲引擎只能是InnoDB。
3,外鍵列和參照列必須具備類似的數據類型。其中數字的長度或是否有符號位必須相同,而字符的長度則能夠不一樣。
4,外鍵列和參照列必須建立索引,若是參照列不存在索引的話,Mysql 將自動建立索引。
約束: 1,約束保證數據的完整性和一致性。
2,約束分爲表級約束和列級約束(約束如何是針對一個字段就是列級,若是是針對兩個及以上的則爲表級約束)。
3,約束類型包括: NOT NULL(非空約束), PRIMARY KEY(主鍵約束), UNIQUE KEY(惟一約束), DEFAULT(默認約束), FOREIGN KEY(外鍵約束)
外鍵約束的參照操做:
1,CASSADE:從父表刪除或更新且自動刪除或更新子表中匹配的行。
2,SET NULL:從父表刪除或更新行,並設置子表中的外鍵列爲NULL.若是使用該選項,必須保證子表列沒有指定NOT NULL。
3,RESTRICT:拒絕對父表的刪除或更新操做。
4,NO ACTION:標準SQL的關鍵字,在mysql中與RESTRICT相同。
修改數據表
ALTER TABLE tableName ADD [COLUMN] column_name column_definition [FIRST|AFTER col_name]; // 修改數據表,新增字段,能夠一次加一列,也能夠加多列,加多列不能夠指定位置關係,只能在原來數據表的下方。
ALTER TABLE tableName DROP column_name;// 刪除數據表中的字段
修改列定義
ALTER TABLE tableName MODIFY [COLUMN] column_name column_definition [FIRST|AFTER col_name];
修改列名稱
ALTER TABLE tableName CHANGE [COLUMN] column_name column_definition [FIRST|AFTER col_name];
修改數據表名
ALTER TABLE tbl_name TO new_tb1_name; // 會對錶的視圖或存儲過程有影響。
UPDATE
UPDATE tableName set col_name = value, … WHERE expr…;
UPDATE table_references SET col_names = {expre1|DEFAULT} ... [WHERE(where_condition)]; //多表更新
DELETE
DELETE FROM tableName WHERE expr...;
SELECT
select 子查詢,是指出如今其餘sql 語句內的select子句;使用比較運算符的子查詢,=, >, <, >=, <=, <>, !=, <=>, 另外使用ANY, SOME, ALL 關鍵字修飾的比較運算符,使用 [NOT] IN 的子查詢,使用 [NOT] EXISTS 的子查詢;
INSERT [INTO] tableName [(col_name, ...)] SELECT ... 將查詢結果寫入到數據表
CREATE ... SELECT...; //建立數據表的同事將查詢結果寫入到數據表 CREATE TABLE [IF NOT EXISTS] tbl_name [(create_definition, ...)] select_statement
WHERE, LIKE, GROUP BY, HAVING, ORDER BY[]
表的鏈接誒類型
INNER JOIN, LEFT JOIN, RIGHT JOIN, 使用ON關鍵字來設定鏈接條件,也可使用WHERE 來代替,一般使用ON關鍵字來設定鏈接條件,使用WHERE關鍵字進行結果集記錄的過濾。
內鏈接,顯示左表及右表符合連接條件的記錄,取交集。
左鏈接,顯示左表的所有記錄及右表符合鏈接條件的記錄。
右鏈接,顯示右表中的所有記錄及左表符合鏈接條件的記錄。
mysql數據庫函數分類
1,字符函數
CONCAT() //字符鏈接
CONCAT_WS() //使用指定的分隔符進行字符鏈接
FORMAT() //數字格式化
LOWER() //轉換成小寫字母
UPPER() //轉換成大寫字母
LEFT() //獲取左側字符
RIGHT() //獲取右側字符
LENGTH() //獲取字符串長度
LTRIM() //刪除前導空格
RTRIM() //刪除後續空格
TRIM() //刪除前導和後續空格
SUBSTRING() //字符串截取
[NOT] LIKE //模式匹配
REPLACE() //字符串替換
2,數值運算符與函數
CEIL() //進一取整
DIV() //整數除法
FLOOR() //舍一取整
MOD() //取餘數(取模)
POWER() //冪運算
ROUND() //四捨五入
TRUNCATE() //數字截取
3,比較運算符與函數
[NOT] BETWEN ... AND ... //[不]在範圍以內
[NOT] IN() //[不]在列出值範圍內
IS [NOT] NULL //[不]爲空
4,日期時間函數
NOW() //當前日期和時間
CURDATE() //當前日期
CURTIME() //當前時間
DATE_ADD() //日期變化
DATEDIFF() //日期差值
DATE_FORMAT() //日期格式化
5,信息函數
CONNECTION_ID() //鏈接ID
DATABASE() //當前數據庫
LAST_INSERT_ID() //最後插入記錄的ID號
USER() //當前用戶
VERSION() //版本信息
6,聚合函數
AVG() //平均值
COUNT() //計數
MAX() //最大值
MIN() //最小值
SUM() //求和
7,加密函數
MD5() //信息摘要算法 web頁面應用
PASSWORD() //密碼算法 mysql 用戶密碼修改
自定義函數
CREATE FUNCTION function_name([params params_type, ...]) RETURNS {STRING|INTEGER|REAL|DECIMAL} RETURN routine_body
如:建立一個日期格式化的函數
create function f1() returns varchar(30)
return date_format(now(), '%Y年%m月%d日 %H點:%i分:%s秒');
調用函數:select f1();
如:建立一個求兩個參數平均值的函數
create function f2(num1 smallint unsigned, num2 smallint unsigned)
returns float(10, 2)
return (num1+num2)/2;
調用函數:select f2(7, 8);
注意:參數和返回值。
關於函數體:
1,函數體由合法的SQL語句構成
2,函數體能夠是簡單的SELECT或INSERT語句
3,函數體若是爲複合結構則使用BEGIN...END語句
4,複合機構能夠包含聲明,循環,控制結構;
存儲過程
存儲過程是SQL語句和控制語句的預編譯集合,以一個名詞存儲並做爲一個單元處理。
優勢:1,加強SQL語句的功能和靈活性;2,實現較快的執行速度;3,減小了網絡流量;
CREATE [definer = {user|CURRENT_USER}]
PROCEDURE proc_name ([proc_parameter [, ...]])
[characteristic ...] routine_body
proc_parameter: [ IN | OUT | INOUT ] param_name type 注意:IN ,表示該參數的值必須在調用存儲過程時指定; OUT,表示該參數的值能夠被存儲過程改變,而且能夠返回;INOUT,表示該參數的調用時指定,而且能夠被改變和返回.
MySQL存儲引擎
MySQL能夠將。數據以不一樣的技術存儲在文件(內存)中,這種技術就稱爲存儲引擎。每一種存儲引擎使用不一樣的存儲機制、索引技巧、鎖定水平,最終提供普遍且不一樣的功能。
併發控制:
- 當多個鏈接對記錄進行修改時保證數據的一致性和完整性。
鎖:
-共享鎖(讀鎖):在同一時間段內,多個用戶能夠讀取同一個資源,讀取過程當中數據不會發生任何變化。
-排他鎖(寫鎖):在任什麼時候候只能有一個用戶寫入資源,當進行寫鎖時會阻塞其餘的讀鎖或者寫鎖操做。
鎖顆粒:
-表鎖:是一種開銷最小的鎖策略。對一張表進行加鎖處理。
-行鎖:是一種開銷最大的鎖策略。可能對錶中的每一行記錄進行加鎖處理。
事務處理:
-事務用語保證數據庫的完整性;
特性:原子性,一致性,隔離性,持久性。
外鍵:
-是保證數據一致性的策略。
索引:
-是對數據表中的一列或多謝的值進行排序的一種結構。
kMySQL的存儲引擎種類:
-MyISAM:
-InnoDB
-Memory
-CSV
-Archive
注意:不一樣的存儲引擎,對事務的支持,鎖的策略,外鍵,數據壓縮,存儲內存是不同的。