1. 程式人生 > >庫表操作 - 儲存引擎

庫表操作 - 儲存引擎

一、庫操作:
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | test               |
    +--------------------+
   1.系統資料庫:
        information_schema: 虛擬庫,不佔用磁碟空間,儲存的是資料庫啟動後的一些引數,如使用者表資訊、列資訊、許可權資訊、字元資訊等
        performance_schema: MySQL 5.5開始新增一個數據庫:主要用於收集資料庫伺服器效能引數,記錄處理查詢請求時發生的各種事件、鎖等現象
        mysql: 授權庫,主要儲存系統使用者的許可權資訊
        test: MySQL資料庫系統自動建立的測試資料庫
    2.建立資料庫:
        help create           # 檢視幫助資訊
        help create database
        # https://dev.mysql.com/doc/refman/5.6/en/create-database.html
        ...

        語法:
            create database 資料庫名 charset utf8;


            create database db1 charset utf8;
        命名規則:
            可以由字母、數字、下劃線、@、#、$
            區分大小寫

            唯一性
            不能使用關鍵字如 create select
            不能單獨使用數字
            最長128位

    3.資料庫相關操作:
        檢視資料庫
            show databases;
            show create database db1;
            select database();
        選擇資料庫
            use db1;
        刪除資料庫
            drop database db1;
        修改資料庫
            alter database db1 charset utf8;
            alter database db1 charset gbk;

二、表操作:
1.什麼是儲存引擎:
mysql中建立的庫===>資料夾
庫中建立的表===>檔案

儲存引擎說白了就是如何儲存資料、如何為儲存的資料建立索引和如何更新、查詢資料等技術的實現方法。
因為在關係資料庫中資料的儲存是以表的形式儲存的,所以儲存引擎也可以稱為表型別(即儲存和操作此表的型別)
儲存引擎:表的型別 (表就是檔案) 有不同的檔案型別 .mp4 .txt

                 

  
2.mysql支援得儲存引擎:
mysql> show engines; # #檢視所有支援的儲存引擎
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

mysql> show variables like 'storage_engine%'; #檢視正在使用的儲存引擎
+----------------+--------+
| Variable_name | Value |
+----------------+--------+
| storage_engine | InnoDB |
+----------------+--------+
1 row in set (0.00 sec)

1、InnoDB 儲存引擎 預設是InnoDB
支援事務,其設計目標主要面向聯機事務處理(OLTP)的應用。
2、MyISAM 儲存引擎
不支援事務、表鎖設計、支援全文索引,主要面向一些 OLAP 數 據庫應用。
在 MySQL 5.5.8 版本之前預設的儲存引擎(除 Windows 版本外)。
3、NDB 儲存引擎
NDB 儲存引擎是一個叢集儲存引擎,類似於 Oracle 的 RAC 叢集。
4、Memory 儲存引擎
Memory 儲存引擎中的資料都存放在記憶體中,資料庫重 啟或發生崩潰,表中的資料都將消失。
5、Infobright 儲存引擎
第三方的儲存引擎。其特點是儲存是按照列而非行的,因此非常 適合 OLAP 的資料庫應用。
其官方網站是 http://www.infobright.org/,上面有不少成功的資料 倉庫案例可供分析。
6、NTSE 儲存引擎
網易公司開發的面向其內部使用的儲存引擎。
7、BLACKHOLE
黑洞儲存引擎,可以應用於主備複製中的分發主庫。
3.使用儲存引擎:
        1.建表時指定
            create table t1(id int,name char)
            create table t2(id int,name char)engine=innodb;
            create table t3(id int,name char(6))engine=memory;
        2.在配置檔案中指定預設的儲存引擎
            /etc/my.cnf
            [mysqld]
            default-storage-engine=INNODB
            innodb_file_per_table=1
        3.檢視
            [[email protected] db1]# cd /var/lib/mysql/db1/
            [[email protected] db1]# ls
            db.opt  t1.frm  t1.ibd  t2.frm  t2.ibd
        4.練習
            建立四個表,分別使用innodb,myisam,memory,blackhole儲存引擎,進行插入資料測試
                [db1]> create table t1(id int)engine=innodb;
                [db1]> create table t2(id int)engine=myisam;
                [db1]> create table t3(id int)engine=memory;
                [db1]> create table t4(id int)engine=blackhole;
                [db1]> exit
            [[email protected] db1]# ls /var/lib/mysql/db1/ #發現後兩種儲存引擎只有表結構,無資料
                db.opt  t1.frm  t1.ibd  t2.MYD  t2.MYI  t2.frm  t3.frm  t4.frm
            檢視mysql版本:
                status;   # \s
                select version();
                    mysql> select version();
                    +-------------------------+
                    | version()               |
                    +-------------------------+
                    | 5.7.21-0ubuntu0.16.04.1 |
                    +-------------------------+
                    1 row in set (0.00 sec)
            重啟mysql服務:
                service mysqld restart
                service mysql restart (5.5.7版本命令)
                或者:
                    /etc/init.d/mysql restart
            停止:
                service mysql stop
                或者:/etc/init.d/mysql stop

            啟動:
                service mysql start
                或者:
                    /etc/init.d/mysql start

            #memory,在重啟mysql或者重啟機器後,表內資料清空
            #blackhole,往表內插入任何資料,都相當於丟入黑洞,表內永遠不存記錄