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 10:24
下一篇 2016-11-01 11:07

相關推薦

  • Linux的基本介紹

    1、Linux的發行版分為:Debin,Slackware,Rhel,Redora,CentOS,Gentoo等,其中Rhel(Red Hat Enterprise Linux)使用的是版本比較老的內核,但它的系統比較穩定,一個發行周期是36個月,Fedora使用最新的應用和華麗的節目,但系統比較不穩定,一個發行周期是6個月。 2、Linux的哲學思想是一切…

    Linux干貨 2016-02-14
  • NET25第8周作業

    1、寫一個腳本,使用ping命令探測172.16.250.1-172.16.250.254之間的所有主機的在線狀態;     在線的主機使用綠色顯示;     不在線的主使用紅色顯示; #!/bin/bashtrap “echo ‘crtrl+c’;exi…

    Linux干貨 2017-03-15
  • Linux作業管理、并發執行、計劃任務

    概述     本章將為大家介紹一些進程管理的補充部分作業管理和任務的并發執行,同時也將介紹一下Linux系統上計劃任務的相關內容,具體分為:         1、Linux作業管理     &nbsp…

    Linux干貨 2016-09-09
  • sed

    Stream EDitor, 行編輯器 sed是一種流編輯器,它一次處理一行內容。處理時,把當前 處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后 ,把緩沖區的內容送往屏幕。然后讀入下行,執行下一個循環 。如果沒有使諸如‘D’的特殊命令,那會在兩個循環之間清空 模式空間,但不會清空保留…

    Linux干貨 2017-12-03
  • Find命令的使用

    Find命令的基本用法 在Linux系統中find命令是一個強大文件查找類工具,它支持根據文件名,權限,文件大小,訪問以及修改時間查找,使用方法如下: find [option] [查找起始路徑] [查找條件] [處理動作] 起始路徑:指定查找文件或目錄的路徑,默認為當前目錄 查找條件:可根據文件名,權限,文件大小以及從屬關系查找文件 處理動作:動查找到的文…

    Linux干貨 2017-08-28
  • N22-第六周博客作業

    請詳細總結vim編輯器的使用并完成以下練習題 1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; # cp /etc/rc.d/rc.sysinit /tmp # vim /tmp/rc.sysinit …

    Linux干貨 2016-09-26
欧美性久久久久