MariaDB基礎
關系型數據庫的基礎概念:
1)數據類型:作用:存儲格式、數據范圍、所能參與的運算、排序方式 字符型: 定長字符型:CHAR(#),BIARNY(#) 變長字符型:VARCHAR(#),VARBINARY(#) 數值型: 精確數值型: 近似數值型: 日期時間型: DATE TIME 2)數據庫的設計范式: 第一范式:字段是原子性的; 第二范式:存在可用的主鍵; 第三范式:任何字段都不應該依賴于其它表的非主鍵字段; 3)數據約束:向數據表中插入數據時要遵守的限制規則 主鍵:primary key,表上一個或多個字段的組合,填入主鍵字段中的數據,必須不同于已經存在的其它行的相同字段上的數據,而且也不能為空;一個表只能存一個主鍵; 惟一鍵:unique key,表上一個或多個字段的組合,填入其中字段中的數據,必須不同于已經存在的其它行的相同字段上的數據,但可以為空;一個表可以有多個惟鍵; 外鍵:foreign key,一個表中的外鍵字段中所能夠插入的數據取值范圍,取決于引用的另一個表上主鍵字段上的已經存在數據集合;
MariaDB的基礎應用:
MariaDB程序組成:C/S結構
C:Client:客戶端程序 mysql mysqladmin mysqldump mysqlbinlog S:Server:服務端程序 mysqld mysqld_safe mysqld_multi 管理工具程序: myisampack myisamchk ... 套接字地址:mysql支持的如下三類 IPv4:PORT IPv6:PORT Unix_Sock:/var/lib/mysql/mysql.sock, /tmp/mysql.sock
命令行客戶端程序mysql
mysql [OPTIONS] [database] 常用選項: -uUSERNAME -hHOST -pPASSWORD -Ddb_name -S sock_file_path -P port -e 'STATEMENT' 不用進入mysql交互式界面在shell命令行進行操作 示例:]# mysql -e 'CREATE DATABASE IF NOT EXISTS mydb; SHOW DATABASES;' mysql客戶端的另一種執行方式;sql腳本;比如寫一個包含了sql語句的腳本;如下寫一個文件/tmp/test.sql,然后利用重定向的方式交給mysql執行 CREATE DATABASE alidb; CREATE TABLE alidb.tbl1 (id TINTINT); INSERT INTO alidb.tbl1 VALUES (1),(99); ]# mysql < /tmp/test.sql 客戶端命令:在客戶端執行; mysql> help \?:獲取可用的命令幫助; \q:退出客戶端程序; \d CHAR:自定義語句結束符; \g:語句結束標記; \G:語句結束標記,豎排顯示結果; \! SHELL_CMD:運行shell命令; \s:當前連接及服務器相關的狀態信息; \.:執行一個sql腳本 服務端命令:SQL語句,發往服務端運行,并取回結果;需要顯式的語句結束符; DDL:數據定義語言,主要用于管理數據庫組件,例如數據庫、表、索引、視圖、觸發器、事件調度器、存儲過程、存儲函數; CREATE, ALTER, DROP DML:數據操縱語言,CRUD操作,主要用于操作表中的數據; INSERT,DELETE,UPDATE,SELECT DCL:數據控制語言 GRANT(授權), REVOKE(回收權限)
SQL語句:
獲取幫助: mysql> help KEYWORD mysql> help contents 獲取命令分類 數據庫管理: 創建: CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name 修改: ALTER {DATABASE | SCHEMA} [db_name] CHARACTER SET [=] charset_name 刪除: DROP {DATABASE | SCHEMA} [IF EXISTS] db_name 相關命令: SHOW CHARACTER SET :查看有哪些字符集 SHOW COLLATION :顯示排序規則 SHOW CREATE DATABASE db_name :顯示數據庫是使用什么語句創建的 表管理: 表創建: CREATE TABLE [IF NOT EXISTS] tbl_name (create_definition,...) [table_options] create_definition:創建定義由逗號分隔的列表,列表中包含了如下三類定義; 字段定義: column_name column_defination data_type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'string'] 約束定義: PRIMARY KEY(col1[,col2, ....]) UNIQUE KEY FOREIGN KEY CHECK(expr) 索引定義: {INDEX|KEY} {FULLTEXT|SPATIAL} 字段是必須的,索引和約束是可選的 設定表選項 table_option: ENGINE [=] engine_name 設定存儲引擎類型 查看數據庫支持的存儲引擎種類: SHOW ENGINES; 查看表狀態信息: SHOW TABLE STATUS [WHERE CLAUSE] [LIKE CLAUSE] 表修改: ALTER TABLE tbl_name [alter_specification [, alter_specification] ...] alter_specification: (1) 表選項 ENGINE=engine_name (2) 表定義 (a) 字段 ADD :加字段 DROP :刪字段 CHANGE :改字段 大改 MODIFY :改字段 小改 (b) 鍵和索引 ADD {PRIMARY|UNIQUE|FOREIGN} key (col1, col2, ...) 增加鍵 ADD INDEX(col1, col2, ...) 增加索引 DROP {PRIMARY|UNIQUE|FOREIGN} KEY key_name; 刪除鍵 DROP INDEX index_name;刪除索引 查看表上的索引信息: SHOW INDEXES FROM tbl_name; 表刪除: DROP TABLE [IF EXISTS] tbl_name [, tbl_name] ... 查看表創建語句: SHOW CREATE TABLE tbl_name 索引管理: 創建: CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name ON tbl_name (index_col_name,...) index_col_name: col_name [(length)] [ASC | DESC] 刪除: DROP INDEX index_name ON tbl_name 查看: SHOW {INDEX | INDEXES | KEYS} {FROM | IN} tbl_name [{FROM | IN} db_name] [WHERE expr
示例:定義一個表
MariaDB [(none)]> CREATE DATABASE mydb;
MariaDB [(none)]> use mydb;
MariaDB [mydb]> CREATE TABLE tbl1(id SMALLINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, name CHAR(30) NOT NULL, age TINYINT UNSIGNED, gender ENUM('F','M'),UNIQUE KEY(name,gender),INDEX(name));
命令解析:
CREATE DATABASE mydb; 創建一個數據庫
MariaDB [(none)]> use mydb;進入數據庫
CREATE TABLE tbl1:創建一個名為tbl1的表
(…):使用小括號擴起來給定一個字段定義,以學生信息為例括號里邊的內容如下;
id:第一個字段叫id
SMALLINT:假設學生數量不超過六萬個,使用SMALLINT表示小整型
UNSIGEND:假設學生的學號不會有負數出現,使用UNSIGNED;UNSIGNED是SMALLINT的修飾符,必須要緊跟在SMALLINT的背后,中間不能隔任何字符
NOT NULL:不允許為空
PRIMARY KEY:把它定義成主鍵
AUTO_INCREMENT:讓其自動增長:主鍵的修飾符
,name:逗號隔開,第二個字段叫name
CHAR(30):名字可以使用字符串,定長30個字符
NOT NULL:名字不能為空:NOT NULL的修飾符
,age:逗號隔開,第三個字段叫age年齡
TINYINT:指定年齡數量為非常小的整數
UNSIGEND:指定年齡不能為負數
,gender:,逗號隔開,第三個字段叫gender性別
ENUM性別的類型不會特別多這里指定使用枚舉類型
('F','M'):指定F和M兩種性別
DEFAULT 'M':假設學生中男性為多,這里設定M為默認
UNIQUE KEY(name,gender):假設學生的名字和學生的性別不能重疊,聯合起來是唯一的.這里使用UNIQUE KEY設置唯一鍵
INDEX(name)):在姓名上額外做一個索引
使用DESC tbl1:顯示表結構
MariaDB [mydb]> SHOW ENGINES; :顯示表狀態信息
示例:刪除一個索引: ALTER TABLE tbl1 DROP INDEX name_2;
示例:新增一個表的字段(默認排序在表中的最后一個字段):MariaDB [mydb]> ALTER TABLE tbl1 ADD ClassID TINYINT UNSIGNED NOT NULL;
示例:修改一個表中的一個字段并且指定其在age字段后的位置: MariaDB [mydb]> ALTER TABLE tbl1 MODIFY ClassID TINYINT UNSIGNED NOT NULL after age;
示例:刪除tbl1表中的一個索引:MariaDB [mydb]> DROP INDEX name ON tbl1;
示例:在tbl1表中為name字段的前五個字節上和gender字段創建一個名為nameandgender的索引 MariaDB [mydb]> CREATE INDEX nameandgender ON tbl1(name(5),gender);
示例:查看在tbl1表中以name開頭的索引:MariaDB [mydb]> SHOW INDEXES FROM tbl1 WHERE Key_name LIKE 'name%';
DML語句
INSERT,SELECT,DELETE,UPDATE INSERT:插入 INSERT [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),... SELECT:查詢 (1) SELECT * FROM tbl_name; 查詢一個指定表的所有行,不要在生產環境中使用 (2) SELECT col1, col2, ... FROM tbl_name; 查詢一個表中所有行中指定的字段 指定字段時可以指定別名:字段別名:col1 AS ALIAS (3) ELECT col1, col2, ... FROM tbl_name WHERE CLUASE; WHERE expr:布爾表達式; col_name OPERATOR value|col_name; 操作符: >, <, <=, >=, =, != BETWEEN ... AND ... LIKE 'PATTERN': 通配符: _:匹配任意單個字符; %:任意長度的任意字符; RLIKE 'PATTERN': IN(list) 組合條件: and, or, not (4) SELECT col1, ... FROM tbl1_name [WEHRE CLAUSE] ORDER BY col1, col2, ... [ASC|DESC] DELETE: DELETE FROM tbl_name [WHERE where_condition] UPDATE: UPDATE table_reference SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... [WHERE where_condition] UPDATE: UPDATE table_reference SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... [WHERE where_condition]
示例:在tbl1表中插入一行數據:INSERT INTO tbl1 (name,ClassID) VALUE ('tom',1);
示例:在tbl1表中插入多行數據:INSERT INTO tbl1 (name,ClassID) VALUE ('jerry',1),('clinton',2);
示例:在tbl1表中插入每個字段插入數據
示例:查詢tbl1中name和gender字段:MariaDB [mydb]> SELECT name,gender FROM tbl1;
示例:使用別名Stuname顯示name字段查詢tbl1中name和gender字段:MariaDB [mydb]> SELECT name AS Stuname,gender FROM tbl1;
示例:挑選查詢tbl1表中ClassID大于2的:MariaDB [mydb]> SELECT * FROM tbl1 WHERE ClassID > 2;
示例:挑選查詢tbl1表中ClassID大于等于2和小于等于5的:MariaDB [mydb]> SELECT * FROM tbl1 WHERE ClassID >=2 and ClassID <=5;
示例:挑選查詢tbl1表中ClassID在2和5之間的:MariaDB [mydb]> SELECT * FROM tbl1 WHERE ClassID BETWEEN 2 AND 5;
示例:查詢tbl1表中name字段包含O的:MariaDB [mydb]> select name from tbl1 where name like '%o%';
示例:查詢tbl1表中name字段以r結尾的:MariaDB [mydb]> select name from tbl1 where name like '%r';
示例:使用RLIKE支持正則表達式的方法查詢tbl1中name字段包含o的:MariaDB [mydb]> select name from tbl1 where name rlike '^.o.$';
示例:在tbl1表中挑選出ClassID字段是1和2的:MariaDB [mydb]> select name,ClassID from tbl1 where ClassID in (1,2);
示例:以名字查詢tbl1中的name和ClassID字段,并且升序排序:MariaDB [mydb]> select * from tbl1 order by ClassID,name;
示例:以名字查詢tbl1中的name和ClassID字段,并且逆序排序:MariaDB [mydb]> select * from tbl1 order by ClassID,name desc;
示例:以ClassID查詢tbl1表中的ClassID字段,并且逆序排序:MariaDB [mydb]> select * from tbl1 order by ClassID desc;
示例:以ClassID字段逆序和name字段升序查詢tbl1表:MariaDB [mydb]> select * from tbl1 order by ClassID desc,name;
示例:以ClassID字段逆序和name字段逆序查詢tbl1表:
示例:刪除tbl1表中ClassID字段中為5的:MariaDB [mydb]> delete from tbl1 where ClassID = 5;
示例:把tbl1表中id為2的age更新為17:MariaDB [mydb]> update tbl1 set age=17 where id=2;
示例:把tbl1表中id為1的age更新為18,ClassID更新為3:MariaDB [mydb]> update tbl1 set age=18,ClassID=3 WHERE id=1;
原創文章,作者:M20-1馬星,如若轉載,請注明出處:http://www.www58058.com/58121