數據庫的結構(3種):層次,網狀,關係型(用的最多);
DBMS的三層模型:
視圖層;面向最終用戶;
邏輯層;面向程序員或DBA;
物理層;面向系統管理員;
關係型數據庫管理系統——RDBMS:
主要的組成部分是表;表是由行(實例,實體,記錄)和列(字段,域)組成;
關係型數據庫管理系統的實現:
商業方案:Oracle,Sybase{爲微軟提供了思路出現SQL-server},Infomix{IBM收購},DB2{IBM}
開源方案:PostgreSQL,mysql,MariaDB
SQL:Structured Query Language,結構化查詢語言;
ANSI(美國國家標準協會): 1986年定義SQL系列標準,89年實施: SQL-86(草案)、SQL-8九、SQL-9二、SQL-9九、SQL-2003(如今使用的標準)
關於{RDBMS(關係型數據庫管理系統)設計範式基礎概念php
設計關係數據庫時,聽從不一樣的規範要求,設計出合理的關係型數據庫,這些不一樣的規範要求被稱爲不一樣的範式,各類範式呈遞次規範,越高的範式數據庫冗餘越小。css
目前關係數據庫有六種範式:第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、巴德斯科範式(BCNF)、第四範式(4NF)和第五範式(5NF,又稱完美範式)。知足最低要求的範式是第一範式(1NF)。在第一範式的基礎上進一步知足更多規範要求的稱爲第二範式(2NF),其他範式以次類推。通常說來,數據庫只需知足第三範式(3NF)就好了。html
(1) 第一範式(1NF) 所謂第一範式(1NF)是指在關係模型中,對域添加的一個規範要求,全部的域都應該是原子性的,即數據庫表的每一列都是不可分割的原子數據項,而不能是集合,數組,記錄等非原子數據項。即實體中的某個屬性有多個值時,必須拆分爲不一樣的屬性。在符合第一範式(1NF)表中的每一個域值只能是實體的一個屬性或一個屬性的一部分。簡而言之,第一範式就是無重複的域。 說明:在任何一個關係數據庫中,第一範式(1NF)是對關係模式的設計基本要求,通常設計中都必須知足第一範式(1NF)。不過有些關係模型中突破了1NF的限制,這種稱爲非1NF的關係模型。換句話說,是否必須知足1NF的最低要求,主要依賴於所使用的關係模型。 (2) 第二範式(2NF) 第二範式(2NF)是在第一範式(1NF)的基礎上創建起來的,即知足第二範式(2NF)必須先知足第一範式(1NF)。第二範式(2NF)要求數據庫表中的每一個實例或記錄必須能夠被惟一地區分。選取一個能區分每一個實體的屬性或屬性組,做爲實體的惟一標識。 第二範式(2NF)要求實體的屬性徹底依賴於主關鍵字(主鍵)。所謂徹底依賴是指不能存在僅依賴主關鍵字一部分的屬性,若是存在,那麼這個屬性和主關鍵字的這一部分應該分離出來造成一個新的實體,新實體與原實體之間是一對多的關係。爲實現區分一般須要爲表加上一個列,以存儲各個實例的惟一標識。簡而言之,第二範式就是在第一範式的基礎上屬性徹底依賴於主鍵。 (3) 第三範式(3NF) 第三範式(3NF)是第二範式(2NF)的一個子集,即知足第三範式(3NF)必須知足第二範式(2NF)。簡而言之,第三範式(3NF)要求一個關係中不能包含已在其它關係已包含的非主關鍵字信息。簡而言之,第三範式就是屬性不依賴於其它非主屬性,也就是在知足2NF的基礎上,任何非主屬性不得傳遞依賴於主屬性。}mysql
NoSQL:Not-Only SQL,反關係型數據庫; //針對關係型數據庫提出 Memcached、Redis:鍵入值,並將數據存儲在內存中,查詢效率極高 MangoDB:完成數據庫切片 Hbase:配合大數據,文檔型數據庫用來存放大型數據 MySQL:http://www.mysql.com MariaDB:http://mariadb.org 主流的發行版本有兩個:5.5.x 和 10.x.y Percona XtraDB/MySQL:https://www.percona.com
MySQL/MariaDB:
C/S架構,客戶端/服務器架構形式:
客戶端工具:
命令行工具:mysql, mysqladmin, mysqldump, ...
圖形工具:phpMyAdmin, SQLyog, navicot, ...
服務器端程序:
mysqld_safe(默認)、msyqld、mysqld_multi程序員
客戶端到服務器端的鏈接方式: 1.客戶端和服務器端在同一臺主機上: 1) Unix Socket 2) IPv4 Socket 3) IPv6 Socket 2.客戶端和服務器端分別在不一樣主機上: 1) IPv4 Socket 2) IPv6 Socket
關係型數據庫管理系統:
數據模型:關係模型,這裏說的是二維關係
1.表:爲了知足範式的設計要求,將一個數據集拆分紅多個; //在一個表中,能夠沒有任何一行,但至少保證有一列;
行:row(實例,實體,記錄); //記錄數據的特徵;
列:column(字段,域); //記錄數據的某種屬性;
2.視圖:view,虛表;包含已知表中的部分列;
3.索引:index,將表中的某一個或某些字段抽取出來,單獨將其組織成一個獨特的數據結構,以便於提升數據檢索效率;
支持B-tree(平衡樹)索引{默認使用的索引方式}、hash(哈希)索引、空間索引正則表達式
若是服務器端的應用程序想要訪問數據庫,就要有訪問數據庫的能力,應用程序就須要一個SQL接口,使用SQL語句經過SQL接口發送給數據庫管理系統,從而管理數據庫。數據庫管理系統須要經過存儲引擎來存儲或刪除存儲設備中的文件。
SQL接口:計劃執行器,分析器,操做求解器,優化器;
提供了一種可以跟數據庫管理系統作交互式操做的接口(1),相似於shell;也能夠提供編程功能(2);
(1)交互式接口功能:經過SQL接口處理SQL語句;
DDL:Data Definition Language,數據定義語言:CREATE,ALTER,DROP DML:Data Manipulation Language,數據操縱語言:INSERT,DELETE,UPDATE,SELECT DCL:Data Control Language,數據控制語言:GRANT,REVOKE (2)編程功能:變量,函數,循環,選擇; 存儲過程:Procedure,使用CALL語句調用; 存儲函數:Function,使用SELECT語句調用; 觸發器(相似條件選擇):Trigger; 事件調度器(Event Schedule);基於事件的條件選擇,相似於觸發器但基於事件 例程:Routine,過程 + 函數 **事務**:Transaction,組織多個操做爲一個總體,這個總體所包含的全部操做,要麼所有都執行,要麼所有不執行;只要有任何操做沒有被成功執行,則整個事務回滾(Rollback); 在MySQL中,事務是存儲引擎的屬性;是否支持事務的判斷標準,即:ACID標準(事務四大特性); A:Atomicity,原子性(不可分割); C:consistency,一致性(執行開始的狀態和結束的結果保持一致); I:Isolation,隔離性(加鎖,多個事務分隔開來不能同時進行); D:Durability,持久性(對數據修改結果要不發生變化); **約束**:Constraint,向數據表中插入的數據必須遵照的限制規則(範式); (1.主鍵約束: 主鍵:一個或多個字段構建的可以惟一標識記錄的組合; 主鍵約束:填入主鍵的數據,必須不能和已經填寫的數據相同,並且不能爲空; (2.外鍵約束:也稱爲"引用性約束"; 外鍵:一個表中的某個字段和其餘表中的字段表達的意義相同; 外鍵約束:一個表中的某個字段能插入的數據,取決於另外一個表的主鍵中包含的數據; (3.惟一鍵約束: 惟一鍵:一個或多個字段構建的可以惟一標識記錄的組合; 惟一鍵約束:填入惟一鍵的數據,必須不能和已經填寫的數據相同,但能夠爲空; (4.檢查性約束: 也稱爲"表達式約束";取決於表達式的書寫規範; 關係運算: 選擇:根據指定的條件挑選出符合條件的行; 投影:根據指定的條件挑選出符合條件的列; 鏈接(具備多種鏈接方式):多表的關聯操做; **數據抽象分佈:** 物理層(最底層):決定數據的存儲格式,即:如何將數據組織成物理文件; 邏輯抽象層(中間層:存儲引擎,用來上下兩個層次的銜接轉換):描述了數據庫存儲什麼樣的數據,以及數據之間存在怎樣的關係; 視圖層(最頂層):描述了數據庫中所有或部分數據,以表的形式進行展現; 關係模型的分類:關係模型、實體-關係模型(E-R模型)、基於對象的關係模型、半結構化的關係模型:XML
MySQL和MariaDB:
共同點:
1.都支持插件式的存儲引擎(把存儲引擎當作功能模塊來使用); //存儲引擎就是表類型;
2.MySQL/MariaDB服務端口號:3306/TCPsql
MariaDB的特性: 1.相對於MySQL而言,能夠包含更多的存儲引擎; 1)MyISAM:檢索高效可是不支持事務; Aria:加強版的MyISAM,改善了MyISAM中的崩潰處理機制; 2)InnoDB:支持事務;行級鎖; Percona-XtraDB:加強版的InnoDB; 2.諸多的擴展和新特性; 3.提供了很是多的測試組件; 4.Truly Open Source(MariaDB的發行機制:真正開源) MySQL的發行機制(2種): Enterprise:企業版,提供了豐富的組件和功能;如:線程池,強大的可視化監控組件等; Community:社區版,只有簡單的數據庫功能
安裝MySQL或MariaDB:
1.基於包管理器格式的程序包直接安裝,如:rpm包,deb包等;
1) OS發行商在光盤鏡像中提供; //版本比較老舊
2) 由程序官方提供;
2.官方提供的通用二進制程序包;直接解壓縮程序包便可使用;
3.源代碼包:編譯安裝以前,須要先編譯安裝cmakeshell
安裝命令:
CentOS 6:yum install mysql-server CentOS 7:yum install mariadb-server MySQL的程序環境: 服務器端程序:mysql-server(CentOS6), mariadb-server(CentOS7) 服務啓動腳本: /etc/rc.d/init.d/mysqld 經常使用的二進制文件: /usr/bin/mysql_install_db //作數據庫的初始化安裝 /usr/bin/mysql_secure_installation //作安全初始化安裝;對使用的管理員用戶作密碼設置,默認是空密碼;刪除空用戶和空數據表;只容許root用戶本地登陸不容許遠程登陸 /usr/bin/mysqld_multi //多實例啓動mysql,能夠一次啓動多個mysql進程,不一樣的進程監聽不一樣的端口號 /usr/bin/mysqld_safe //默認啓動safe選項,安全服務進程 數據目錄: /var/lib/mysql //默認的初始化數據庫目錄,未初始化以前目錄中沒有內容 主配置文件: /etc/my.cnf 客戶端程序:mysql, mariadb 經常使用的二進制文件: /usr/bin/mysql //客戶端鏈接工具 /usr/bin/mysqladmin //非交互式的數據庫管理工具 /usr/bin/mysqlbinlog //二進制日誌的查看和管理工具 /usr/bin/mysqldump //溫備份工具 主配置文件:/etc/my.cnf ini風格的配置文件:在整個配置文件中,以"[]"劃分紅多個配置段,每一個配置指令僅針對於其上方直接歸屬的"[]"中表示的組件生效; 在mariadb版本中/etc/my.cnf中添加: innodb_file_per_table = ON //打開對建立或刪除表的影響,主要是刪除InnoDB存儲引擎的表耗用時間應該更長 skip_name-resolve = ON //跳過名稱解析,不作名稱反解 保存後重啓服務(MariaDB版本通常在CentOS7中):systemctl restart mariadb.service //若是重啓不成功,使用 rm -rf /var/lib/mysql/*文件內容清空,由於有其餘數據庫內容,不能重啓數據庫 使用rpm包安裝的mysql或mariadb的默認配置文件加載順序: /etc/mysql/my.cnf (默認文件不存在)--> /etc/my.cnf(通常默認先加載) --> ~/.my.cnf //後加載的配置項會覆蓋先前配置項,越靠後的文件生效越優先 在使用mysqld_safe命令啓動mysqld服務進程時,能夠經過一些選項來更改或附加配置文件的讀取順序; -c, --defaults-file=name Like --config-file, except: if first option, then read this file only, do not read global or per-user config files; should be the first option 若是在命令行中給出此選項,則此選項必須是第一個選項,此時,僅今後選項指定的配置文件中讀取參數值,不會再讀取任何其餘的配置文件,包括全局的和我的的; -e, --defaults-extra-file=name Read this file after the global config file and before the config file in the users home directory; should be the first option 若是在命令行中給出此選項,則此選項必須是第一個選項,此時,將全部其餘的配置文件按照指定順序讀取完成以後,最後再附加讀取此選項指定的配置文件中參數值配置,只要有參數配置衝突,則必然以此選項指定的文件中的參數中爲最終生效的參數值; 配置文件的風格: ini風格的配置文件;即:分段式配置文件; 爲MySQL的各應用程序提供與之對應的配置參數信息: 服務器端應用程序: [server] socket= datadir= basedir= [mysqld] socket= [mysqld_safe] socket= [mysqld_multi] 客戶端應用程序: [client] user= password= host= [mysql] user= password= host= [mysqladmin] [mysqldump] 配置文件中各參數的定義方法: PARAMETER_NAME = VALUE PARAMETER_NAME=VALUE PARAMETER_NAME innodb_file_per_table = ON innodb-file-per-table = ON defaults-file=/tmp/my.cnf defaults_file=/tmp/my.cnf skip_name_resolve=ON skip_name_resolve **mysql相關基本命令: mysql命令 - 基本的交互式命令行客戶端工具;** 格式:mysql [options] [db_name] 經常使用選項: --database=db_name, -D db_name 用於指定使用mysql客戶端程序鏈接到mysql服務器以後,默認使用哪一個數據庫;若是不給定該選項,默認爲NULL; --execute=statement, -e statement 鏈接至mysql服務器並將後面的SQL語句交給服務器運行以後返回執行結果並直接退出交互式登陸模式,返回bash命令提示符; --host=host_name, -h host_name 用於指定這次mysql程序所鏈接的mysql服務器的主機名稱或主機IP地址;默認是localhost(127.0.0.1); --user=user_name, -u user_name 用於指定鏈接mysql服務器時使用的用戶名;默認的用戶名爲:'root'@'localhost' mysql的用戶名:USERNAME@HOSTNAME USERNAME表示登陸的用戶名稱; HOSTNAME表示用戶經過哪一個特定的客戶端主機鏈接到mysql服務器; 如:用戶'root'@'172.16.0.1':表示只有172.16.0.1主機能夠經過root用戶鏈接至myslq服務器; HOSTNAME中可使用通配符: _:任意單個字符; %:任意長度的任意字符; 如:'root'@'172.16.%.%' 表示172.16.0.0/16網段中的全部主機均可以使用root用戶鏈接至mysql服務器; 如:'root'@'172.16._.%' 表示172.16.0.0~172.16.9.255地址的主機均可以使用root用戶鏈接至mysql服務器; 注意:默認狀況下,全部用戶均爲空密碼,而且還有匿名用戶存在,所以,爲了加強安全性,可使用mysql_secure_installation命令完成帳戶安全初始化;使得mysql服務器僅能讓root用戶在本地登陸,而且移除匿名用戶和test數據庫; --password[=password], -p[password] 用於指定鏈接mysql服務器時,爲對應用戶指定身份驗證所需密碼;若是密碼部分省略不寫,執行命令後須要在新行中給出密碼,這種方式相對更安全; mysql命令提示符下的交互式命令: 客戶端命令:mysql程序自身完成或執行的命令,在客戶端所在地運行; clear (\c):中止發送當前正在鍵入的命令或語句並直接返回提示符; delimiter (\d):設置語句結束標記;默認的語句結束標記爲";"; ego (\G):將其前面的語句送往mysql服務器運行,並將返回的結果縱線顯示; go (\g):無需輸入語句結束標記,直接將其前面的語句送往服務器執行; exit,quit (\q):退出mysql程序的交互式模式; status (\s):獲取mysql服務器的狀態信息; use (\u):將指定的數據庫做爲當前正在使用的數據庫; source (\.):能夠在mysql交互式模式中執行SQL腳本文件; ?,help (\?):獲取客戶端命令的幫助信息; 服務器端命令:mysql客戶端程序經過mysql協議向mysql服務器端發送的SQL語句; 注意:在書寫服務器端命令時,每一個SQL語句都必須以指定的結束標記結尾,默認是";",修改結束標記的命令爲:mysql >\d 服務器端命令表明的SQL語句,能夠分爲三類: DDL:數據定義語言,主要用於管理數據庫及數據庫的各組件; 組件例如:數據庫,表,視圖,索引,用戶,存儲過程,存儲函數,觸發器,事件等; 經常使用的SQL語句:CREATE,DROP,ALTER,SHOW DML:數據操縱語言,主要用於管理表中的數據,實現數據的增,刪,改,查等操做; 經常使用的SQL語句:INSERT,DELETE,UPDATE,SELECT DCL:數據控制語言,主要用於管理數據訪問的受權; 經常使用的SQL語句:GRANT,REVOKE 獲取指定的SQL語句的幫助信息(全部的SQL語句自己,不區分字符大小寫;建議使用小寫字母書寫SQL語句); mysql> help SQL_STATEMENT_KEYWORK //mysql版本數據庫,通常在CentOS6及之前的版本中 MariaDB [(none)]> help SQL_STATEMENT_KEYWORK //MariaDB版本數據庫,通常在CentOS7中使用的默認數據庫 在mysql中,database(數據庫)和schema(方案)這兩個單詞是同樣的;
利用mysql客戶端工具實現mysql數據庫的相關管理操做:
數據庫管理:
建立數據庫:
格式:CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [ create_specification ]
create_specification:
[DEFAULT] CHARACTER SET [=] charset_name
| [DEFAULT] COLLATE [=] collation_name
示例:
建立一個名爲mydb的數據庫並設定字符集是utf8:
mysql> create database mydb character set = utf8;數據庫
字段含義:
DATABASE | SCHEMA:表示要建立的對象的類型爲"數據庫"或"方案"; IF NOT EXISTS:若是指定要建立的數據庫已經存在,則不報錯也不執行建立操做; db_name:要建立的數據庫的名稱; CHARACTER SET [=] | charset_name:爲新建立的數據庫指定其默認的字符集; 示例:mysql> show character set:查看mysql服務器所支持的全部字符集及默認排序規則; COLLATE [=] | collation_name: 爲新建立的數據庫指定字符集的排序規則; 示例:mysql> show collation:查看mysql服務器上每種字符集所支持的全部的排序規則; 修改數據庫的屬性(若是數據庫中已經有表,且表中已經插入數據時,更改數據庫的字符集和排序規則可能會致使已存數據的亂碼): ALTER {DATABASE | SCHEMA} [db_name] alter_specification ... //要指定數據庫名稱,不然刪除全部存在的數據庫 alter_specification: [DEFAULT] CHARACTER SET [=] charset_name :修改字符集 | [DEFAULT] COLLATE [=] collation_name:修改字符集的排序規則 刪除數據庫: DROP {DATABASE | SCHEMA} [IF EXISTS] db_name //加上[IF EXISTS],刪除一個不存在的數據庫執行但不會報錯,若是不加[IF EXISTS]刪除一個不存在的數據庫會執行而後報錯,*必定要指定數據庫名稱,不然或刪除全部庫* 表管理(關係型數據庫的核心,數據都存儲於表中): 表:二維表,包括行和列; 行(實體,實例,記錄):用來描述某個具體事物的某些屬性;對於表來講,表中能夠沒有任何一行數據,此類表稱爲"空表"; 列(字段,域):用來定義或描述某個具體的屬性的格式或定義方式;對於表來講,沒有列的表是無心義的,表中至少要有一列; 數據類型: 定義數據類型的意義: 1.決定數據的存儲格式; 2.決定數據所能參與的運算; 3.決定數據能夠表示的有效範圍; 對於mysql來講,支持的數據類型: 數值型: 精確數值型: MySQL數據類型 括號中m的值(bits) 有符號範圍 無符號範圍 tinyint(m) 1個字節 (-128~127) (0~256) smallint(m) 2個字節 (-32768~32767) (0~65536) mediumint(m) 3個字節 (-8388608~8388607) (0~1677216) int(m) 4個字節 (-2147483648~2147483647) (0~2147483648*2) bigint(m) 8個字節 (+-(9.22*10)^18) (0~((9.22*10)^18)*2) 是否有符號,能夠在定義時規定,默認爲有符號,能夠用unsigned標識來表示無符號 經過規定數據的顯示寬度,達到統一顯示的目的。 注意定義格式:alter table tbl_int add c tinyint(2) zerofill; //須要使用前導零來填充以達到目的:zerofill;其中若數大於顯示寬度,則直接顯示原數字 近似數值型: FLOAT:單精度浮點數 示例:一個字段定義爲float(5,3),若是插入一個數123.45678,實際數據庫裏存的是123.457,但總個數還以實際爲準,即6位 DOUBLE:雙精度浮點數 字符串型: 變長字符型: VARCHAR(length):字符不區分大小寫;最大存放65536個字符; VARCHAR(30) chenliang$ -- 字符只佔了VARCHAR總空間30字節大小中的10字節,末尾的$用來表示字符結束並將字符佔用VARCHAR空間大小+1,若是空間已滿則不顯示$ VARBINARY(length):字符區分大小寫;最大存放65536個字符; 定長字符型 CHAR(length):字符不區分大小寫;256個字符; CHAR(30) chenliang -- 字符雖然只佔了9字節存儲空間,可是必需要佔用30字節的空間 BINARY(length):字符區分大小寫;256個字符; 對象存儲類型(大型的數據用於存儲文本塊或圖像、聲音文件等二進制數據類型,比指定類型支持的最大範圍大的值將被自動截短): TEXT:存儲大量的純文本信息; TINYTEXT:可最大存放256字節 TEXT:可最大存放65536字節 MEDIUMTEXT:可最大存放16777736字節 LONGTEXT:可最大存放43億9千萬字節 BLOB:存儲非純文本信息通過流式化處理以後的二進制數據; TINYBLOB:可最大存放256字節 BLOB:可最大存放65536字節 MEDIUMBLOB:可最大存放16777736字節 LONGBLOB:可最大存放43億9千萬字節 日期時間型: 類型 名稱 大小(字節) 格式 DATE 日期型 3 YYYY-MM-DD TIME 時間型 3 HH:MM:SS TIMESTAMP 時間戳類型 8 YYYYMMDD HHMMSS DATETIME 日期時間型 8 YYYY-MM-DD HH:MM:SS YEAR 年份 2/4 YY/YYYY 內置特殊類型: 集合類型: SET:集合,插入的數據能夠是集合中各個元素的任意組合; SET('a','b','c','d') a aa aab abdc 枚舉類型: ENUM:枚舉,只能存放列舉出來的固定的字符或字符串; ENUM('F','M') F M 數據類型相關的修飾符: 與整數類型相關的: UNSIGNED,無符號整數; //UNSIGNED修飾符必須緊跟在精確數值類型標識符以後; AUTO_INCREMENT [=] Value: 整型數據的自動遞增或自動遞減; 通用修飾符: NOT NULL:非空約束;通常是爲主鍵作約束; DEFAULT Value:爲字段設置默認值; 建立表: CREATE TABLE [IF NOT EXISTS] tbl_name (create_definition,...) [table_options] create_definition(建立定義項):表中各個列是怎麼定義的,列的格式,列的類型 col_name :列的名稱 格式:data_type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'string'] [COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}] [STORAGE {DISK|MEMORY|DEFAULT}] [reference_definition] 選項: data_type [NOT NULL | NULL]:數據類型 [不爲空|空] [DEFAULT default_value]:是否設置默認值爲多少 [AUTO_INCREMENT]:默認自動增加步長爲1 [UNIQUE [KEY]:定義惟一鍵 [PRIMARY] KEY]:定義主鍵 [COMMENT 'string']:定義註釋內容 [COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]:列的格式{靜態|動態|默認格式} [STORAGE {DISK|MEMORY|DEFAULT}]:存儲方式{磁盤|內存|默認位置} table_options:表選項 ENGINE [=] engine_name | AUTO_INCREMENT [=] value 示例: mysql> create table stu_info (SID tinyint unsigned not null auto_increment primary key,SName varchar(50) not null,SAge tinyint unsigned,Gender enum('F','M')); 顯示錶的結構:mysql> desc stu_info; 顯示建立表的SQL語句:mysql> show create table stu_info; 刪除表: DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ... 示例:mysql> drop table stu_info; 修改表:修改表的各個字段的屬性和定義的內容; ALTER TABLE tbl_name [alter_specification [, alter_specification] ...] 增長表的字段: ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name ] 示例:mysql> alter table stu_info add Stel_num varchar(20) not null after SAge; 修改表的字段屬性 CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name] MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name] 示例: mysql> alter table stu_info change column Stel_num SMobile char(11) not null after Gender; mysql> alter table stu_info modify SAge tinyint unsigned after Gender; 刪除表的字段: DROP [COLUMN] col_name //刪除字段的操做可能會引發數據的變化,因此,刪除字段時要慎重; 示例:mysql> alter table stu_info drop SMobile; 數據管理:實質上就是管理表中的數據; 向表中添加數據: INSERT [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),... //若是列名(col_name,...)省略不寫,則默認表示爲爲表的每一列添加數據 Or: INSERT [INTO] tbl_name SET col_name={expr | DEFAULT}, ... 示例: mysql> insert into stu_info values (1,'tom','M',25),(2,'jerry','F',28); mysql> insert into stu_info (SName) values ('Alice'),('James'); mysql> insert into stu_info set SName='zhangsan',Gender='M',SAge=20; 注意: 1.若是向表中插入的value是字符串,則value必須使用引號引用; 2.若是向表中插入的value是數字,則value必定不能用引號引用; 查看錶中的數據內容: SELECT select_expr [, select_expr ...] [FROM table_references] [WHERE where_condition] 1.顯示整張表: SELECT * FROM tbl_name; 2.投影:顯示指定的或符合要求的列; SELECT col_name AS con_alias[,col_name AS con_alias,...] FROM tbl_name; 示例:mysql> select Host as Hostname,User as Username,Password as Pass from user; 3.選擇:顯示符合要求或匹配條件的行; SELECT col_name AS con_alias[,col_name AS con_alias,...] FROM tbl_name WHERE condition; WHERE子句用於指明選擇時依據的條件: col_name 操做符 value 操做符: 1) 比較操做符:>, <, >=, <=, ==, != 2) 邏輯操做符:與:and,或:or,非:not 3) 特殊操做符: BETWEEN...AND... LIKE "PATTERN",其中"PATTERN"中能夠適當添加通配符,如:%或_; RLIKE "PATTERN",使用正則表達式對字符串進行模式匹配;在使用RLIKE進行數據檢索時,索引不生效,檢索效率低,速度慢,不推薦使用; IS NULL或IS NOT NULL:判斷指定字段是否爲空; 示例: mysql> select * from stu_info where SAge >= 30; mysql> select * from stu_info where SAge >= 10 and SAge <=30; mysql> select * from stu_info where SAge between 10 and 30; mysql> select * from stu_info where Gender is [not] null; mysql> select * from stu_info where SName like '%a%'; mysql> select * from stu_info where SName rlike '^j'; mysql> select * from stu_info where SName rlike 'e$'; 4.排序: SELECT col_name AS con_alias[,col_name AS con_alias,...] FROM tbl_name WHERE condition [ORDER BY {col_name | expr | position} [ASC | DESC], ...] 示例: mysql> select * from stu_info order by SAge; 默認升序排序; mysql> select * from stu_info order by SAge desc; 降序排序; //末尾加desc,表示降序 修改表數據內容: UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... [WHERE where_condition] [ORDER BY ...] [LIMIT row_count] 示例: mysql> update stu_info set SName='Obama' where SID=5; mysql> update stu_info set SAge=SAge+1; mysql> update stu_info set SAge=SAge+100 where SID in (1,3,5,7); 注意:修改數據時,必定要考慮清楚是否要添加where條件子句;若是不寫where子句,默認修改全表; 刪除表數據: DELETE FROM tbl_name [WHERE where_condition] [ORDER BY ...] [LIMIT row_count] 示例: mysql> delete from stu_info where SID > 3; mysql> delete from stu_info; 注意:在使用UPDATE和DELETE語句時,除非必要,不然必定要使用WHERE子句或ORDER BY + LIMIT子句來限制要操做的數據;不然即爲全表操做; mysqladmin命令: mysqladmin - client for administering a MySQL server 經常使用選項: -u, -h, -p, -P, -D, -S 各選項功能同mysql命令的選項功能; 經常使用子命令: create db_name:建立數據庫; drop db_name:刪除數據庫; flush-hosts:清除服務器緩存中全部信息; flush-logs:清除日誌,讓日誌滾動; flush-privileges:刷新受權表; flush-tables:爲表加鎖; password new-password:爲指定的用戶設置新密碼; start-slave:在msyql的集羣服務中的從節點啓動用於實施複製功能的線程; stop-slave:在msyql的集羣服務中的從節點關閉用於實施複製功能的線程; shutdown:中止服務; mysqld_safe命令:用於啓動mysql服務,定義mysql的工做特性; 格式:/usr/bin/mysqld_safe [OPTIONS] 注意:全部給出的 OPTION(--option)都是一次性生效;若是指望配置參數永久有效,須要將此類配置參數及參數值直接定義在配置文件中便可; 服務器運行時變量/服務器運行時參數:MySQL的運行工做特性;這裏特性有兩種: 1.全局特性: 在全局範圍均有效的服務器參數所配置定義的工做特性;將會做爲每一個mysql的會話鏈接的默認特性參數; 2.會話特性: 僅針對於本次mysql的鏈接會話生效的特性參數; 查看已經生效的mysql運行參數(特性,變量) SHOW [GLOBAL | SESSION] VARIABLES [like_or_where] 示例: show [global] variables like '%innodb%'; 查看全部名字中包含innodb字樣的服務器參數及參數值;能夠一次顯示多個; show [global] variables like 'innodb_file_per_table'; 僅查看指定名稱的服務器參數的參數值; select @@[global.]innodb_file_per_table; 僅查看指定名稱的服務器參數的參數值; 服務器狀態參數/服務器狀態變量:MySQL工做時的統計信息;有兩種狀態參數: 1.全局 2.會話 查看與狀態及統計信息相關的參數/變量的值; SHOW [GLOBAL | SESSION] STATUS [like_or_where] 示例: show [global] status like '%innodb%'; 查看全部名字中包含innodb字樣的服務器狀態參數及其值;能夠一次顯示多個; show [global] staus like 'Com_select'; 僅查看指定名稱的服務器狀態參數的值; 服務器變量/服務器參數的修改或調整方法: 1.運行時修改: MariaDB [(none)]> SET [GLOBAL|SESSION] system_var_name = expr; MariaDB [(none)]> SET @@[GLOBAL.|SESSION.]system_var_name = expr; 示例: set global innodb_file_per_table=1; set @@global.innodb_file_per_table=0; 2.永久修改: 經過在配置文件中直接書寫服務器參數或變量的賦值語句;重啓服務便可生效; innodb_file_per_table = ON mysql_secure_installation:安全初始化腳本; **MySQL的用戶和權限管理:** 用戶帳號: 'Username'@'Hostname' skip_name_resolve = ON 'user'@