MariaDB基礎

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基礎

MariaDB [mydb]> SHOW ENGINES; :顯示表狀態信息

MariaDB基礎

示例:刪除一個索引: ALTER TABLE tbl1 DROP INDEX name_2;

MariaDB基礎

示例:新增一個表的字段(默認排序在表中的最后一個字段):MariaDB [mydb]> ALTER TABLE tbl1 ADD ClassID TINYINT UNSIGNED NOT NULL;

MariaDB基礎

示例:修改一個表中的一個字段并且指定其在age字段后的位置: MariaDB [mydb]> ALTER TABLE tbl1 MODIFY ClassID TINYINT UNSIGNED NOT NULL after age;

MariaDB基礎

示例:刪除tbl1表中的一個索引:MariaDB [mydb]> DROP INDEX name ON tbl1;

MariaDB基礎

示例:在tbl1表中為name字段的前五個字節上和gender字段創建一個名為nameandgender的索引 MariaDB [mydb]> CREATE INDEX nameandgender ON tbl1(name(5),gender);

MariaDB基礎

示例:查看在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);

MariaDB基礎

示例:在tbl1表中插入多行數據:INSERT INTO tbl1 (name,ClassID) VALUE ('jerry',1),('clinton',2);

MariaDB基礎

示例:在tbl1表中插入每個字段插入數據

MariaDB基礎

示例:查詢tbl1中name和gender字段:MariaDB [mydb]> SELECT name,gender FROM tbl1;

MariaDB基礎

示例:使用別名Stuname顯示name字段查詢tbl1中name和gender字段:MariaDB [mydb]> SELECT name AS Stuname,gender FROM tbl1;

MariaDB基礎

示例:挑選查詢tbl1表中ClassID大于2的:MariaDB [mydb]> SELECT * FROM tbl1 WHERE ClassID > 2;

MariaDB基礎

示例:挑選查詢tbl1表中ClassID大于等于2和小于等于5的:MariaDB [mydb]> SELECT * FROM tbl1 WHERE ClassID >=2 and ClassID <=5;

MariaDB基礎

示例:挑選查詢tbl1表中ClassID在2和5之間的:MariaDB [mydb]> SELECT * FROM tbl1 WHERE ClassID BETWEEN 2 AND 5;

MariaDB基礎

示例:查詢tbl1表中name字段包含O的:MariaDB [mydb]> select name from tbl1 where name like '%o%';

MariaDB基礎

示例:查詢tbl1表中name字段以r結尾的:MariaDB [mydb]> select name from tbl1 where name like '%r';

MariaDB基礎

示例:使用RLIKE支持正則表達式的方法查詢tbl1中name字段包含o的:MariaDB [mydb]> select name from tbl1 where name rlike '^.o.$';

MariaDB基礎

示例:在tbl1表中挑選出ClassID字段是1和2的:MariaDB [mydb]> select name,ClassID from tbl1 where ClassID in (1,2);

MariaDB基礎

示例:以名字查詢tbl1中的name和ClassID字段,并且升序排序:MariaDB [mydb]> select * from tbl1 order by ClassID,name;

MariaDB基礎

示例:以名字查詢tbl1中的name和ClassID字段,并且逆序排序:MariaDB [mydb]> select * from tbl1 order by ClassID,name desc;

MariaDB基礎

示例:以ClassID查詢tbl1表中的ClassID字段,并且逆序排序:MariaDB [mydb]> select * from tbl1 order by ClassID desc;

MariaDB基礎

示例:以ClassID字段逆序和name字段升序查詢tbl1表:MariaDB [mydb]> select * from tbl1 order by ClassID desc,name;

MariaDB基礎

示例:以ClassID字段逆序和name字段逆序查詢tbl1表:

MariaDB基礎

示例:刪除tbl1表中ClassID字段中為5的:MariaDB [mydb]> delete from tbl1 where ClassID = 5;

MariaDB基礎 MariaDB基礎

示例:把tbl1表中id為2的age更新為17:MariaDB [mydb]> update tbl1 set age=17 where id=2;

MariaDB基礎

示例:把tbl1表中id為1的age更新為18,ClassID更新為3:MariaDB [mydb]> update tbl1 set age=18,ClassID=3 WHERE id=1;

MariaDB基礎

原創文章,作者:M20-1馬星,如若轉載,請注明出處:http://www.www58058.com/58121

(0)
M20-1馬星M20-1馬星
上一篇 2016-11-07
下一篇 2016-11-07

相關推薦

  • 關于大型網站技術演進的思考(六):存儲的瓶頸(6)

    原文出處: 夏天的森林  在講數據庫水平拆分時候,我列出了水平拆分數據庫需要解決的兩個難題,它們分別是主鍵的設計問題和單表查詢的問題,主鍵問題前文已經做了比較詳細的講述了,但是第二個問題我沒有講述,今天我將會講講如何解決數據表被垂直拆分后的單表查詢問題。 要解決數據表被水平拆分后的單表查詢問題,我們首先要回到問題的源頭,我們為什么需要將數…

    2015-03-11
  • 第五周作業

    1、顯示當前系統上root,fedora或user1用戶的默認shell。 [root@hostname ~]# grep -E ‘^(root|fedora|user1)’ /etc/passwd | cut -d: -f1,7 root:/bin/bash 2、找出/etc/rc.d/init.d/functions文件中某詞后面跟一組小括號的行,形如:…

    Linux干貨 2017-08-04
  • 初學Linux之文件查找和壓縮

    使用locate命令 ,使用find命令 ,壓縮和解壓縮工具

    2018-01-13
  • RAID常見級別及特性

    磁盤陣列(Redundant Arrays of Independent Disks,RAID),通過軟件或者硬件的手段將多個磁盤整合成一個磁盤來使用,以此來提高磁盤的性能,并提供數據冗余的功能。 目前常見的RAID等級: raid0,被稱為條帶卷。 條帶卷,我們可以通過名字來想象:RAID0通過把文件切割之后把數據像一條帶子一樣平鋪在每個磁盤之上。 由于文…

    Linux干貨 2016-01-05
  • 開機啟動流程

    Centos的開機啟動流程 具體步驟解釋:  第一步:加電自檢:POST         加電自檢是檢測硬件設備是否正常運行,以及一些外圍設備的輸入輸出是否存在。 自檢功能的實現是依靠BIOS軟件程序實現的 BIOS即基本輸入輸出系統,它是裝載在一個硬件芯片COMS上的,加電過程…

    Linux干貨 2016-09-13
  • 8.4日作業

    1、用正則表達式表示IP地址 ifconfig | grep -E -o "(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}(\<[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]25[0-5]\>)" 5、用正…

    Linux干貨 2016-08-08
欧美性久久久久