mysql基礎

 

mysql基礎

數據模型:

數據模型:層次模型、網狀模型、關系模型、……

關系模型:

二維關系:表
    行:row, entity
    列:colume, attribution

索引:數據結構,輔助完成數據查找;
    較少的代價,完成數據查找
    但是帶來的副作用時,導致數據修改速度變慢。
    原始數據發送改變,索引也要改變。

數據庫管理系統

DMBS:DataBase Management System RDBMS:Relational DBMS

關系型數據庫:

    SQL引擎:向用戶提供邏輯視圖

    存儲引擎:Storage Engine
        將數據以塊級別存儲在磁盤設備上。一定程度上有類似文件系統的功能。

注:關系型數據提供兩種視圖,向用戶提供邏輯布局,存儲上提供物理布局。并能夠將物理布局完美的映射到邏輯布局
    邏輯布局:邏輯上是表結構
    物理布局:物理上存儲上的數據流

SQL接口(SQL引擎):

客戶端要與SQL交互,就能夠與SQL的API交互。交互的方式使用SQL協議進行交互。 SQL解釋用戶的SQL語句,交給存儲引擎處理。

SQL:Structure Query Language
    結構化查詢語言

    ANSI:SQL-標準,SQL-86, SQL-89, SQL-92, SQL-99, SQL-03, ...

SQL代碼:支持腳本

    存儲例程:storage routing
        存儲過程:storage procedure 過程沒有返回值
            過程調用使用call
        存儲函數:storage function  函數有返回值
            函數調用使用select

    觸發器:trigger
        有一個監視器,監視對象一旦滿足某個條件或動作就執行某個行為。
    事件調度器:event scheduler
        類似系統計劃任務,定期或周期性的執行某個代碼

SQL引擎和存儲引擎的關系像shell和內核之間的關系。

事務:一個由單個或多個SQL語句組成的不可分割原子操作(一般為寫入語句),Transaction;

        A:20000
        B: 3000
        A給B轉賬5000,A要減去5000,B要加上5000

關系型數據庫是否滿足事物,要通過ACID測試      
ACID:
    A: 原子性;不可分割,要么都執行,要么都不執行。
    C:一致性;從一個一致狀態轉到另一個一致狀態。
    I:隔離性;只有一個事物結束,才能執行另一個事物
        比如一個人用A的賬戶給B轉賬10000,另一個人在異地取款1500.兩個事物不能交叉進行。
    D:持久性;存儲到設備中,不能事物結束后,還沒寫入設備。否則斷電數據丟失。

滿足事物性的數據庫,并發性較低。隔離是有級別的,隔離級別低并發較高,隔離級別高并發則較低。

博客作業:amp的各種部署方式;

回顧: fpm、amp編譯安裝、MariaDB fpm: pm=static|dynamic /pm-status ?json, ?xml, ?html, ?full

    amp編譯安裝:
        考慮:如何做到服務開機自啟?

        Unit File, Init Script?

    MariaDB:
        事務:ACID


基礎概念:

數據類型: 作用:存儲格式、數據范圍、所能參與的運算、排序方式

字符型:
    定長字符型:CHAR(#),BIARNY(#)
    變長字符型:VARCHAR(#),VARBINARY(#)
    對象存儲:
        TEXT
        BLOB
    建類型:ENUM,SET

數值型:

    精確數值型:
        INT:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT

    近似數值型:
        FLOAT
        DOUBLE

    日期時間型:
        DATE
        TIME
        DATETIME
        TIMESTAMP
        YEAR

修飾符:NOT NULL, DEFAULT,
類型符:UNSIGNED

數據庫的設計范式:

第一范式:字段是原子性的;
第二范式:存在可用的主鍵;
第三范式:任何字段都不應該依賴于其它表的非主鍵字段;

數據約束:向數據表中插入數據時要遵守的限制規則
    主鍵:primary key,表上一個或多個字段的組合,填入主鍵字段中的數據,必須不同于已經存在的其它行的相同字段上的數據,而且也不能為空;一個表只能存一個主鍵;

    惟一鍵:unique key,表上一個或多個字段的組合,填入其中字段中的數據,必須不同于已經存在的其它行的相同字段上的數據,但可以為空;一個表可以有多個惟鍵;

    外鍵:foreign key,一個表中的外鍵字段中所能夠插入的數據取值范圍,取決于引用的另一個表上主鍵字段上的已經存在數據集合;
        檢查條件約束:check,自定義的邏輯表達式;

MariaDB的基礎應用:

MariaDB程序組成:

        C:Client
            mysql
            mysqladmin
            mysqldump
            mysqlbinlog
            ...
        S:Server
            mysqld
            mysqld_safe
            mysqld_multi

管理工具程序:

            myisampack
            myisamchk
            ...

基于套接字通信

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> help 
    \?:獲取可用的命令幫助;
    \q:退出客戶端程序;
    \d CHAR:自定義語句結束符;
    \g:語句結束標記;
    \G:語句結束標記,豎排顯示結果;
    \! SHELL_CMD:運行shell命令;
    \s:當前連接及服務器相關的狀態信息;
    \. 

服務端命令: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
                    約束定義:
                        PRIMARY KEY(col1[,col2, ....])
                        UNIQUE KEY 
                        FOREIGN KEY 
                        CHECK(expr)
                    索引定義:
                        {INDEX|KEY} 
                        {FULLTEXT|SPATIAL}

                column_definition:      
                    data_type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'string']

                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]

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]

圖形管理工具:

phpMyAdmin Navicat mysql-front SQLyog  ToadForMySQL

原創文章,作者:yyw,如若轉載,請注明出處:http://www.www58058.com/56571

(0)
yywyyw
上一篇 2016-11-01
下一篇 2016-11-01

相關推薦

  • 安裝centos7

    在vmware安裝centos7

    2018-03-26
  • 接51CTO:13 用戶組和權限管理3

    用戶組和權限管理3 一、雜項知識整理 1、硬鏈接:寫源文件可以是相對地址,相對于鏈接文件。例如 [root@localhost testdir]# ln ../etc/fstab aaa ln: 無法創建硬鏈接"aaa" => "../etc/fstab…

    Linux干貨 2016-08-04
  • Javascript 裝載和執行

    一兩個月前在淘寶內網里看到一個優化Javascript代碼的競賽,發現有不少的人對Javascript的執行和裝載的基礎并不懂,所以,從那天起我就想寫一篇文章,但一直耽擱了。自上篇《瀏覽器渲染原理簡介》,正好也可以承前啟后。 首先,我想說一下Javascript的裝載和執行。通常來說,瀏覽器對于Javascript的運行有兩大特性:1)載入后馬上執行,2)執…

    Linux干貨 2016-07-10
  • 進程與計劃任務詳解

    時光匆匆,王老師代兩周的課就這樣結束了,剛適應王老師的講課風格。王老師講課進度非???,能按照自己的思路把上課的內容每一個地方都貫徹下去。我覺得這樣是非常好的,但是筆記方面還是南老師做的詳細,各有各的風格吧。今天我們將要給大家介紹進程與計劃任務,對我們的以后工作有非常大的幫助,因為我們以后工作盡可能的都自動化管理,不需要我們每天都去敲那些命令。所以我相信今天的…

    2017-09-09
  • 馬哥教育網絡班21期+第四周課程練習

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 ~]# cp -r /etc/skel /home/tuser1; chmod -R gx=— /home/tuser1 [root@mag…

    Linux干貨 2016-08-02
  • Linux基礎(七)-軟RAID,LVM,bash腳本之循環

    1.創建一個10G的分區,并格式為ext4的文件系統; (1)要求其block大小為2048,預留空間百分比為2,卷標為MYDATA,默認掛載屬性包含acl;(2)掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; [root@localhost ~]# fdisk /dev/sdb We…

    Linux干貨 2016-11-06
欧美性久久久久