什么是數據庫?
數據庫(Database)是按照數據結構來組織、存儲和管理數據的建立在計算機存儲設備上的倉庫。
簡單來說是本身可視為電子化的文件柜——存儲電子文件的處所,用戶可以對文件中的數據進行新增、截取、更新、刪除等操作。
在經濟管理的日常工作中,常常需要把某些相關的數據放進這樣的“倉庫”,并根據管理的需要進行相應的處理。
例如, 企業或事業單位的人事部門常常要把本單位職工的基本情況(職工號、姓名、年齡、性別、籍貫、工資、簡歷等)存放在表中,這張表就可以看成是一個數據庫。有了這個“數據倉庫“我們就可以根據需要隨時查詢某職工的基本情況,也可以查詢工資在某個范圍內的職工人數等等。這些工作如果都能在計算機上自動進行,那我們的人事管理就可以達到極高的水平。此外,在財務管理、倉庫管理、生產管理中也需要建立眾多的這種“數據庫“,使其可以利用計算機實現財務、倉庫、生產的自動化管理。
嚴格來說,數據庫是長期儲存在計算機內、有組織的、可共享的數據集合。數據庫中的數據指的是以一定的數據模型組織、描述和儲存在一起、具有盡可能小的冗余度、較高的數據獨立性和易擴展性的特點并可在一定范圍內為多個用戶共享。
這種數據集合具有如下特點:盡可能不重復,以最優方式為某個特定組織的多種應用服務,其數據結構獨立于使用它的應用程序,對數據的增、刪、改、查由統一軟件進行管理和控制。從發展的歷史看,數據庫是數據管理的高級階段,它是由文件管理系統發展起來的。
數據管理模型:
層次模型:用樹狀<層次>結構來表示實體類型和實體間聯系的數據模型。
網狀模型:用有向圖表示實體和實體之間的聯系的數據結構模型稱為網狀數據模型。
關系模型:使用表格表示實體和實體之間關系的數據模型稱之為關系數據模型。
數據分類:
結構化數據:能夠用數據或統一的結構加以表示,我們稱之為結構化數據,如數字、符號。傳統的關系數據模型、行數據,存儲于數據庫,可用二維表結構表示。
半結構化數據:介于完全結構化數據(如關系型數據庫、面向對象數據庫中的數據)和完全無結構的數據(如聲音、圖像文件等)之間的數據,XML、HTML文檔就屬于半結構化數據。它一般是自描述的,數據的結構和內容混在一起,沒有明顯的區分。
非結構化數據:指其字段長度可變,并且每個字段的記錄又可以由可重復或不可重復的子字段構成的數據庫,用它不僅可以處理結構化數據(如數字、符號等信息)而且更適合處理非結構化數據(全文文本、圖象、聲音、影視、超媒體等信息)。非結構化數據,包括所有格式的辦公文檔、文本、圖片、XML、HTML、各類報表、圖像和音頻/視頻信息等等
關系模型:
數據庫:一個方案、一個項目
二維關系:
表:row, column
索引:index
視圖:view
SQL接口:Structured Query Language
類似于OS的shell接口;也提供編程功能
ANSI(美國國家標準委員會): SQL標準,SQL-86, SQL-89, SQL-92, SQL-99, SQL-03, …
各種通行的數據庫系統在其實踐過程中都對SQL規范作了某些編改和擴充
PL-SQL,T-SQL,…
結構化查詢語言(Structured Query Language):
簡稱SQL,是一種特殊目的的編程語言,是一種數據庫查詢和程序設計語言,用于存取數據以及查詢、更新和管理關系數據庫系統;同時也是數據庫腳本文件的擴展名。
結構化查詢語言包含6個部分:
一:數據查詢語言(DQL:Data Query Language):
其語句,也稱為“數據檢索 語句”,用以從表中獲得數據,確定數據怎樣在應用程序給出。保留字 SELECT是DQL(也是所有SQL)用得最多的動詞,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。這些DQL保留字常與其他類型的SQL語句一起使用。
二:數據操作語言(DML:Data Manipulation Language):
其語句包括動詞 INSERT, UPDATE和 DELETE。它們分別用于添加,修改和刪除表中的行。也稱為動作查詢語言。
三:事務處理語言(TPL:Dransaction Processing Language):
它的語句能確保被DML語句影響的表的所有行及時得以更新。TPL語句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。
四:數據控制語言(DCL:DataBase Control Language):
它的語句通過GRANT或REVOKE獲得許可,確定單個用戶和用戶組對數據庫對象的訪問。某些RDBMS可用GRANT或REVOKE控制對表單個列的訪問。
五:數據定義語言(DDL:Data Definition Language):
其語句包括動詞CREATE和DROP。在數據庫中創建新表或刪除表(CREAT TABLE 或 DROP TABLE);為表加入索引等。DDL包括許多與人數據庫目錄中獲得數據有關的保留字。它也是動作查詢的一部分。
六:指針控制語言(CCL):
它的語句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于對一個或多個表單獨行的操作。
DDL:Data Defined Language(數據定義)
CREATE, ALTER, DROP、SHOW (增刪改查)
DML: Data Manapulating Language(數據操作)
INSERT, DELETE, UPDATE, SELECT (增刪改查)
SQL代碼:
存儲過程:procedure
存儲函數:function
觸發器:trigger
事件調度器:event scheduler
例程:routine
用戶和權限:
用戶:用戶名和密碼
權限:管理類、程序類、數據庫、表、字段
DBMS(數據庫管理系統):DataBase Management System
一種操縱和管理數據庫的大型軟件,用于建立、使用和維護數據庫,它對數據庫進行統一的管理和控制,以保證數據庫的安全性和完整性。用戶通過DBMS訪問數據庫中的數據, 數據庫管理員也通過DBMS進行數據庫的維護工作。它可使多個應用程序和用戶用不同的方法在同時或不同時刻去建立,修改和詢問數據庫。
RDBMS(關系型數據庫管理系統):Relational Database Management System
將數據組織為相關的行和列的系統,而管理關系數據庫的計算機軟件就是關系數據庫管理系統,常用的數據庫軟件有Oracle、SQL Server等。它通過數據、關系和對數據的約束三者組成的數據模型來存放和管理數據。
關系數據庫管理系統(Relational Database Management System)的特點:
1.數據以表格的形式出現
2.每行為各種記錄名稱
3.每列為記錄名稱所對應的數據域
4.許多的行和列組成一張表單
5.若干的表單組成database
RDMBS設計范式基礎概念:
設計關系數據庫時,遵從不同的規范要求,設計出合理的關系型數據庫,這些不同的規范要求被稱為不同的范式,各種范式呈遞次規范,越高的范式數據庫冗余越小。
目前關系數據庫有六種范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF,又稱完美范式)。滿足最低要求的范式是第一范式(1NF)。在第一范式的基礎上進一步滿足更多規范要求的稱為第二范式(2NF),其余范式以次類推。一般說來,數據庫只需滿足第三范式(3NF)就行了。
(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:單進程,多線程
插件式存儲引擎:存儲引擎也稱為表類型
用戶連接:通過線程來實現
線程池:
PostgreSQL(是一種先進的對象關系型數據庫管理系統):
PostgreSQL is an advanced Object-Relational database management system (DBMS).
PostgreSQL是一種先進的對象關系型數據庫管理系統(DBMS)。
SQLite:
是遵守ACID的關系數據庫管理系統,它包含在一個相對小的C程式庫中。它是D.RichardHipp建立的公有領域項目。不像常見的客戶端/服務器結構范例,SQLite引擎不是個程序與之通信的獨立進程,而是連接到程序中成為它的一個主要部分。
事務(Transaction):組織多個操作為一個整體,要么全部都成功執行,要么失敗回滾
“回滾”, rollback
例:
Bob: 賬戶中有8000,給Alice2000 8000-2000
Alice: 賬戶中有5000,再加上Bob給的2000 5000+2000
一個存儲系統是否支持事務,測試標準:
ACID:
ACID是數據庫事務正確執行的四個基本要素的縮寫,即原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。一個支持事務(Transaction)的數據庫系統,必需要具有ACID特性,否則在事務過程(Transaction processing)當中無法保證數據的正確性,交易過程極可能達不到交易方的要求。
A:原子性
整個事務中的所有操作,要么全部完成,要么全部不完成,不可能停滯在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。
C:一致性
一個事務可以封裝狀態改變(除非它是一個只讀的)。事務必須始終保持系統處于一致的狀態,不管在任何給定的時間并發事務有多少。
也就是說:如果事務是并發多個,系統也必須如同串行事務一樣操作。其主要特征是保護性和不變性(Preserving an Invariant),以轉賬案例為例,假設有五個賬戶,每個賬戶余額是100元,那么五個賬戶總額是500元,如果在這個5個賬戶之間同時發生多個轉賬,無論并發多少個,比如在A與B賬戶之間轉賬5元,在C與D賬戶之間轉賬10元,在B與E之間轉賬15元,五個賬戶總額也應該還是500元,這就是保護性和不變性
I:隔離性
隔離狀態執行事務,使它們好像是系統在給定時間內執行的唯一操作。如果有兩個事務,運行在相同的時間內,執行相同的功能,事務的隔離性將確保每一事務在系統中認為只有該事務在使用系統。這種屬性有時稱為串行化,為了防止事務操作間的混淆,必須串行化或序列化請求,使得在同一時間僅有一個請求用于同一數據
D:持久性
在事務完成以后,該事務對數據庫所作的更改持久的保存在數據庫之中,并不會被回滾。
由于一項操作通常會包含許多子操作,而這些子操作可能會因為硬件的損壞或其他因素產生問題,要正確實現ACID并不容易。ACID建議數據庫將所有需要更新以及修改的資料一次操作完畢,但實際上并不可行。 目前主要有兩種方式實現ACID:第一種是Write ahead logging,也就是日志式的方式(現代數據庫均基于這種方式)。第二種是Shadow paging。
數據庫:數據集合
表:為了滿足范式設計要求,將一個數據集分拆為多個
約束:constraint,向數據表插入的數據要遵守的限制規則
主鍵:一個或多個字段的組合,填入主鍵中的數據,必須不同于已存在的數據;而且不能為空;一個表只能有一個Primary KEY(主鍵)
外鍵:一個表中某字段中能插入的數據,取決于另外一張表的主鍵中的數據
惟一鍵:一個或多個字段的組合,填入惟一鍵中的數據,必須不同于已存在的數據可以為空;一個表可存在多個Unique Key
檢查性約束:取決于表達式的要求
索引:將表中的某一個或某些字段抽取出來,單獨將其組織一個獨特的數據結構中
常用的索引類型:
B+ Tree:Balance Tree(樹形索引)
hash:
關系運算:
選擇:挑選出符合條件的行
投影:挑選出符合需要的列
連接:將多張表關聯起來
數據抽象:
物理層:決定數據的存儲格式,即如何將數據組織成為物理文件;
邏輯層:描述DB存儲什么數據,以及數據間存在什么樣的關系;
視圖層:描述DB中的部分數據
關系模型的分類:
關系模型
實體–關系模型
基于對象的關系模型
半結構化關系模型
MariaDB(mysql):
可用版本:
MySQL:
MariaDB(延伸版)
Percona-Server
AliSQL
TiDB
MariaDB的特性:
插件式存儲引擎:存儲管理器有多種實現版本,彼此間的功能和特性可能略有區別;用戶可根據需要靈活選擇
存儲引擎也稱為“表類型”
(1) 更多的存儲引擎
MyISAM:不支持事務,表級鎖,崩潰后不保證安全恢復
MyISAM –> Aria
InnoDB –> XtraDB :支持事務,行級鎖,外鍵,熱備
(2) 諸多擴展和新特性
(3) 提供了較多的測試組件
(4) truly open source
安裝和使用MariaDB:
安裝方式:
(1) rpm包;
(a) 由OS的發行商提供
(b) 程序官方提供
(2) 源碼包
(3) 通用二進制格式的程序包
命令行交互式客戶端程序:mysql
mysql
mysql [OPTIONS] [database]
常用選項:
-u, –user=username:用戶名,默認為root
-h, –host=hostname:遠程主機(即mysql服務器)地址,默認為localhost; 客戶端連接服務端,服務器會反解客戶的IP為主機名,關閉此功能(skip_name_resolve=ON)
-p, –password[=PASSWORD]:USERNAME所表示的用戶的密碼; 默認為空
注意:mysql的用戶賬號由兩部分組成:‘USERNAME’@’HOST’; 其中HOST用于限制此用戶可通過哪些遠程主機連接當前的mysql服務
HOST的表示方式,支持使用通配符
%:匹配任意長度的任意字符
172.16.%.%, 172.16.0.0/16
_:匹配任意單個字符
-P, –port=#:mysql服務器監聽的端口;默認為3306/tcp
-S, –socket=/PATH/TO/mysql.sock:套按字文件路徑
-D, –database=DB_name:連接到服務器端之后,設定其處指明的數據庫為默認數據庫
-e, –execute=’SQL STATEMENT’:連接至服務器并讓其執行此命令后直接返回
命令:
客戶端命令:本地執行
mysql> help
\u db_name:設定哪個庫為默認數據庫
\q:退出
\d CHAR:設定新的語句結束符
\g:語句結束標記
\G:語句結束標記,結果豎排方式顯式
\s:
\!: 執行shell命令
\.: 裝載并運行sql腳本
服務端命令:通過mysql連接發往服務器執行并取回結果(SQL語句);
DDL, DML, DCL
注意:每個語句必須有語句結束符,默認為分號(;)
獲取幫助:
mysql> help contents
Administration
Account Management
Data Definition
Data Manipulation
Data Types
myslq> help ‘命令類別‘
數據類型:
表:行和列
創建表:定義表中的字段;
定義字段時,關鍵的一步即為確定其數據類型;
用于確定:數據存儲格式、能參與運算種類、可表示的有效的數據范圍;
字符型:字符集
碼表:在字符和二進制數字之間建立映射關系;
mysql> SHOW CHARACTER SET;
mysql> SHOW COLLATION;
種類:
字符型:
定長字符型:
CHAR(#):不區分字符大小寫(0-255字節)
BINARY(#):區分字符大小寫
變長字符型:
VARCHAR(#):多占一個或兩個字符空間(最后要有一個字符串結束標記)不區分字符大小寫(0-65535 字節)
VARBINARY(#):區分字符大小寫
對象存儲:
TEXT:不區分字符大小寫;TINYTEXT、SMALLTEXT、MEDIUMTEXT、TEXT、LONGTEXT
BLOB:Binary Large OBject,區分字符大小寫;TINYBLOB,SMALLBLOB,MEDIUMBLOB,BLOB,LONGBLOB;
內置類型:
SET
ENUM
數值型:
精確數值型:
類型 |
大小 |
范圍(有符號) |
范圍(無符號) |
用途 |
TINYINT |
1 字節 |
(-128,127) |
(0,255) |
小整數值 |
SMALLINT |
2 字節 |
(-32 768,32 767) |
(0,65 535) |
大整數值 |
MEDIUMINT |
3 字節 |
(-8 388 608,8 388 607) |
(0,16 777 215) |
大整數值 |
INT或INTEGER |
4 字節 |
(-2 147 483 648,2 147 483 647) |
(0,4 294 967 295) |
大整數值 |
BIGINT |
8 字節 |
(-9 233 372 036 854 775 808,9 223 372 036 854 775 807) |
(0,18 446 744 073 709 551 615) |
極大整數值 |
FLOAT 近似數值 |
4 字節 |
(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) |
0,(1.175 494 351 E-38,3.402 823 466 E+38) |
單精度 |
DOUBLE |
8 字節 |
(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) |
0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) |
雙精度 |
DECIMAL |
對DECIMAL(M,D) ,如果M>D,為M+2否則為D+2 |
依賴于M和D的值 |
依賴于M和D的值 |
小數值 |
近似數值型:
FLOAT
DOBULE
日期時間型:
類型 |
大小(字節) |
范圍 |
格式 |
用途 |
DATE |
3 |
1000-01-01/9999-12-31 |
YYYY-MM-DD |
日期值 |
TIME |
3 |
‘-838:59:59’/’838:59:59’ |
HH:MM:SS |
時間值或持續時間 |
YEAR |
1 |
1901/2155 |
YYYY |
年份值 |
DATETIME |
8 |
1000-01-01 00:00:00/9999-12-31 23:59:59 |
YYYY-MM-DD HH:MM:SS |
混合日期和時間值 |
TIMESTAMP |
4 |
1970-01-01 00:00:00/2037 年某時 |
YYYYMMDD HHMMSS |
混合日期和時間值,時間戳 |
字段數據修飾符:
NOT NULL:非空
AUTO_INCREMENT:自動增長
NULL:允許為空
DEFAULT value:默認值
PRIMARY KEY:主鍵
UNIQUE KEY:惟一鍵
數據庫管理(DDL):
創建:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name;
CREATE {DATABASE 或SCHEMA}后面指明數據庫名稱
[DEFAULT] CHARACTER SET [=] charset_name
定義默認字符集
[DEFAULT] COLLATE [=] collation_name
定義排序規則
查看支持的所有字符集:SHOW CHARACTER SET
查看支持的所有排序規則:SHOW COLLATION
修改:
ALTER {DATABASE | SCHEMA} [db_name]
[DEFAULT] CHARACTER SET [=] charset_name
[DEFAULT] COLLATE [=] collation_name
刪除:
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
查看:
SHOW DATABASES LIKE ‘ ’;
表管理:
創建:
CREATE TABLE [IF NOT EXISTS] [db_name.]tbl_name (create_defination) [table_options]
create_defination:
字段:col_name data_type
鍵:
PRIMARY KEY (col1, col2, …)
UNIQUE KEY (col1, col2,…)
FOREIGN KEY (column)
索引:
KEY|INDEX [index_name] (col1, col2,…)
查看數據庫支持的所有存儲引擎類型
mysql> SHOW ENGINES;
查看某表的狀態信息:
mysql> SHOW TABLES STATUS [LIKE ‘tbl_name’][WHERE clause]
修改:
ALTER [ONLINE|OFFLINE] [IGNORE] TABLE tbl_name [alter_specification [, alter_specification] …]
alter_specification:
字段:
添加:ADD [COLUMN] col_name data_type [FIRST | AFTER col_name ]
刪除:DROP [COLUMN] col_name
修改:
CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name]
MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]
鍵:
添加:ADD {PRIMARY|UNIQUE|FOREIGN} KEY (col1, col2,…)
刪除:
主鍵:DROP PRIMARY KEY
外鍵:DROP FOREIGN KEY fk_symbol
索引:
添加:ADD {INDEX|KEY} [index_name] (col1, col2,…)
刪除:DROP {INDEX|KEY} index_name
表選項:
ENGINE [=] engine_name
查看表上的索引的信息:
mysql> SHOW INDEXES FROM tbl_name;
刪除:
DROP TABLE [IF EXISTS] tbl_name [, tbl_name] … (不推薦使用)
表的引用方式:
tbl_name
db_name.tbl_name
第二種創建方式:
復制表結構;
CREATE TABLE tbl_name LIKE other_table_name
第三種創建方式:
復制表數據;
CREATE TABLE tbl_name () SELECT clause
索引管理:
索引是特殊的數據結構;
索引:要有索引名稱;
創建:
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [BTREE|HASH] ON tbl_name (col1, col2,,…)
刪除:
DROP INDEX index_name ON tbl_name
以CentOS 7.3版本為例,由于 MySQL數據庫已從默認的程序列表中移除,可以使用 mariadb 代替:
yum install mariadb-server mariadb
mariadb數據庫的相關命令是:
systemctl start mariadb #啟動MariaDB
systemctl stop mariadb #停止MariaDB
systemctl restart mariadb #重啟MariaDB
systemctl enable mariadb #設置開機啟動
驗證mysql安裝
mysqladmin –version
mysqladmin Ver 9.0 Distrib 5.5.52-MariaDB, for Linux on x86_64 該結果基于系統信息
MYSQL相關操作:
你可以在 MySQL Client(Mysql客戶端) 使用 mysql 命令連接到Mysql服務器上,默認情況下Mysql服務器的密碼為空
[root@localhost ~]#mysql MariaDB [(none)]>
使用以下命令來創建root用戶的密碼:
[root@localhost ~]#mysqladmin -u root password "******";
通過以下命令來連接到Mysql服務器:
[root@localhost ~]#mysql -u root -p Enter password: ****** #輸入上一步的密碼 MariaDB [(none)]>
列出 MySQL 數據庫管理系統的數據庫列表。
MariaDB [mysql]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 rows in set (0.00 sec)
顯示指定數據庫的所有表,使用該命令前需要使用 use 命令來選擇要操作的數據庫。
MariaDB [(none)]> use mysql Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MariaDB [mysql]> SHOW TABLES; +---------------------------------+ | Tables_in_mysql | +---------------------------------+ | columns_priv | | db | ...... | user | +--------------------------------+ 27 rows in set (0.00 sec)
顯示數據表的屬性,屬性類型,主鍵信息 ,是否為 NULL,默認值等其他信息。
MariaDB [mysql]> SHOW COLUMNS FROM time_zone_transition_type; +--------------------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------------+---------------------+------+-----+---------+-------+ | Time_zone_id | int(10) unsigned | NO | PRI | NULL | | | Transition_type_id | int(10) unsigned | NO | PRI | NULL | | | Offset | int(11) | NO | | 0 | | | Is_DST | tinyint(3) unsigned | NO | | 0 | | | Abbreviation | char(8) | NO | | | | +--------------------+---------------------+------+-----+---------+-------+ 5 rows in set (0.00 sec)
顯示數據表的詳細索引信息,包括PRIMARY KEY(主鍵)
MariaDB [mysql]> SHOW INDEX FROM time_zone_transition_type; +---------------------------+------------+----------+--------------+--------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +---------------------------+------------+----------+--------------+--------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | time_zone_transition_type | 0 | PRIMARY | 1 | Time_zone_id | A | NULL | NULL | NULL | | BTREE | | | | time_zone_transition_type | 0 | PRIMARY | 2 | Transition_type_id | A | 0 | NULL | NULL | | BTREE | | | +---------------------------+------------+----------+--------------+--------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 2 rows in set (0.00 sec)
創建名為hidb的數據庫
MariaDB [(none)]> CREATE DATABASE hidb;
如果不存在就創建名為hidb的數據庫
MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS hidb;
也可在/var/lib/mysql下創建名為testdb的數據庫(不建議手動方式創建數據庫)
[root@localhost /var/lib/mysql]#mkdir testdb [root@localhost /var/lib/mysql]#chown mysql.mysql testdb/ MariaDB [(none)]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | hidb | | mysql | | performance_schema | | test | | testdb | +--------------------+ 6 rows in set (0.00 sec)
修改hidb的默認字符集改為utf8
MariaDB [(none)]> ALTER DATABASE hidb CHARACTER SET 'utf8';
刪除testdb
MariaDB [(none)]> DROP DATABASE testdb;
查看以’db’結尾的數據庫
MariaDB [(none)]> SHOW DATABASES LIKE '%db'; +----------------+ | Database (%db) | +----------------+ | hidb | +----------------+ 1 row in set (0.00 sec)
創建表
MariaDB [hidb]> CREATE TABLE tbl1 (id int NOT NULL,name VARBINARY(100) NOT NULL, age tinyint); MariaDB [hidb]> CREATE TABLE tbl2 (id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE KEY,name VARCHAR(60) NOT NULL); MariaDB [hidb]> SHOW TABLES; +----------------+ | Tables_in_hidb | +----------------+ | tbl1 | | tbl2 | +----------------+
查看數據庫支持的所有存儲引擎類型
MariaDB [hidb]> SHOW ENGINES;
查看某表的狀態信息
MariaDB [hidb]> SHOW TABLE STATUS; MariaDB [hidb]> SHOW TABLE STATUS\G (也可縱向顯示) MariaDB [hidb]> SHOW TABLE STATUS LIKE 'tbl2'\G (查看tbl2的表) MariaDB [hidb]> SHOW TABLE STATUS WHERE Name LIKE 'tbl%'\G (查看tbl2開頭的表)
創建tbl3,指明引擎為‘MyISAM’
MariaDB [hidb]> CREATE TABLE tbl3 (classid TINYINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, classname VARCHAR(100) NOT NULL) ENGINE 'MyISAM';
查看引擎為‘MyISAM’的表
MariaDB [hidb]> SHOW TABLE STATUS WHERE Engine='MyISAM'\G
添加
MariaDB [hidb]> DESC tbl2; +-------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+----------------------+------+-----+---------+----------------+ | stuid | smallint(5) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(60) | NO | | NULL | | +-------+----------------------+------+-----+---------+----------------+ MariaDB [hidb]> ALTER TABLE tbl2 ADD gender ENUM('F','M'); MariaDB [hidb]> DESC tbl2; +--------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------+----------------------+------+-----+---------+----------------+ | stuid | smallint(5) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(60) | NO | | NULL | | | gender | enum('F','M') | YES | | NULL | | +--------+----------------------+------+-----+---------+----------------+
刪除gender
MariaDB [hidb]> ALTER TABLE tbl2 DROP gender; MariaDB [hidb]> DESC tbl2; +-------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+----------------------+------+-----+---------+----------------+ | stuid | smallint(5) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(60) | NO | | NULL | | +-------+----------------------+------+-----+---------+----------------+
在name上創建一個索引
MariaDB [hidb]> ALTER TABLE tbl2 ADD INDEX (name); MariaDB [hidb]> DESC tbl2; +--------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------+----------------------+------+-----+---------+----------------+ | stuid | smallint(5) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(60) | NO | MUL | NULL | | | gender | enum('F','M') | YES | | NULL | | +--------+----------------------+------+-----+---------+----------------+
刪除索引
MariaDB [hidb]> ALTER TABLE tbl2 DROP INDEX id;
查看表上的索引的信息
MariaDB [hidb]> SHOW INDEXES FROM tbl2;
復制表結構
MariaDB [hidb]> CREATE TABLE tbl7 LIKE mysql.user;
復制表數據
MariaDB [hidb]> CREATE TABLE tbl8 SELECT Host,User,Password FROM mysql.user;
創建索引
MariaDB [hidb]> CREATE INDEX user ON tbl8(User); MariaDB [hidb]> SHOW INDEXES FROM tbl8; +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | tbl8 | 1 | user | 1 | User | A | 6 | NULL | NULL | | BTREE | | | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ MariaDB [hidb]> CREATE UNIQUE INDEX host ON tbl8(Host,User); MariaDB [hidb]> SHOW INDEXES FROM tbl8; +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | tbl8 | 0 | host | 1 | Host | A | 6 | NULL | NULL | | BTREE | | | | tbl8 | 0 | host | 2 | User | A | 6 | NULL | NULL | | BTREE | | | | tbl8 | 1 | user | 1 | User | A | 6 | NULL | NULL | | BTREE | | | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
刪除索引
MariaDB [hidb]> DROP INDEX host ON tbl8; (不推薦使用刪除) MariaDB [hidb]> SHOW INDEXES FROM tbl8; +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | tbl8 | 1 | user | 1 | User | A | 6 | NULL | NULL | | BTREE | | | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
原創文章,作者:Linux.rookie,如若轉載,請注明出處:http://www.www58058.com/79462