數據庫管理系統

數據庫結構:

        層次模型

        網狀模型

        關係模型

關係模型,是我們最常用的數據庫管理系統類型;他的主要組成部分是表(表:由記錄(行),和字段(列)組成)

關係型數據管理系統:

    範式:是關係模式的集合,構造關係數據庫需要遵守一定的規則,而這些規則就是範式

        目前數據庫有六種範式:第一範式,第二範式,第三範式,巴德斯科範式(BCNF),第四範式,第五範式;

        滿足最低要求的範式是第一範式,在第一範式的基礎上再滿足一些要求形成第二範式,以此類推,因此,範式等級越高越難實現數據存儲;

    表(二維表):包括行和列,一個表可以沒有行(記錄),但必須有一個列(字段)

數據庫:

    數據庫包括的內容:表,索引,視圖(虛表),SQL_interface,存儲過程,存儲函數,觸發器,事件調度器;

約束:(約束的是字段(列))
        主鍵約束:數據唯一不能爲空;一個表中只能有一個主鍵
        唯一鍵約束:數據唯一,可以爲空,唯一鍵可以有多個也可以沒有;
        外鍵約束:引用性約束或參考性約束;即:如果某表中頻繁出現冗餘信息,應該將此類信息存儲於其他的表中,而此表中該字段的數據爲另一張表的主鍵中所包含的值;
        檢查性約束:表達式約束;

MySQL 和 MariaDB

    客戶端/服務器架構

    客戶端程序:mysql、mysqladmin、mysqldump.......

    服務器端程序:msyqld_safe、msyqld、mysqld_multi

    MySQL的安裝:在CentOS Base源下有rpm包,也可以去官方下載二進制包或者源代碼包;

    MySQL的配置文件:/etc/my.cnf     /etc/my.cnf.d     ~/.my.cnf

                通常在啓動服務時按照如上的順序去讀取配置文件裏面的參數,若配置文件內有相同的參數,則以最後的爲準;

                也可以使用mysqld_safe服務器端程序啓動服務,-c  + 文件,或-e +文件 使用指定的文件內的參數,-c 和 -e 一定要放在首位;-c 是隻讀指定文件內參數,而-e則是把指定文件附加到最後用來讀取參數

mysql命令:

    選項:

        -u :指定用戶

        -h:指定主機

        -p:指定密碼

        -P:指定端口號

        -D:指定使用哪個數據庫

[root@bogon ~]# mysql -p111111 -D wang4 -e 'create table wang2(ID char primary key);'
MariaDB [wang4]> show tables;
+-----------------+
| Tables_in_wang4 |
+-----------------+
| wang2           |
+-----------------+

    

    mysql下的交互式命令(可以使用\?)查看:

        \c,clear :停止當前輸入的命令,返回提示符

MariaDB [mysql]> select User from user;
+------------+
| User       |
+------------+
MariaDB [mysql]> select User from user \c
MariaDB [mysql]>

        \d,delimiter:設置語句的結束標記,默認是;

MariaDB [mysql]> \d .
MariaDB [mysql]> select User from user.
+------------+
| User       |
+------------+

        \G,ego :讓返回的結果縱向顯示

MariaDB [mysql]> select User from user\G
*************************** 1. row ***************************
User: root

        \g,go:不需要輸入結束標記,直接送到mysql服務器

        \q,quit、exit:退出mysql交互模式

        \s,status:獲取mysql的狀態信息

        \u,use:使用指定的數據庫

MariaDB [mysql]> use hellodb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [hellodb]>

        \.,source:在mysql交互模式執行SQL腳本文件,

        \?,help:尋找命令幫助

mysqladmin:客戶端命令

        選項:-u, -h, -p, -P, -D,  和mysql命令一樣

          常用子命令:
                    create db_name:創建數據庫;

[root@bogon ~]# mysqladmin -p111111 create db1;

                    drop db_name:刪除數據庫;

[root@bogon ~]# mysqladmin -p111111 drop db1;
Dropping the database is potentially a very bad thing to do.
Any data stored in the database will be destroyed.

Do you really want to drop the 'db1' database [y/N] y
Database "db1" dropped

                    flush-hosts:清除服務器緩存中所有信息;
                    flush-logs:清除日誌,讓日誌滾動;
                    flush-privileges:刷新授權表;
                    flush-tables:爲表加鎖;
                    password new-password:爲指定的用戶設置新密碼;
                    start-slave:在msyql的集羣服務中的從節點啓動用於實施複製功能的線程;
                    stop-slave:在msyql的集羣服務中的從節點關閉用於實施複製功能的線程;
                    shutdown:停止服務;

mysqld_safe服務器端命令:用於啓動mysql服務,定義mysql的工作特性;

           這裏定義工作特性是指定參數;

            指定參數可以在mysql交互式命令裏面使用如下方法查看

    show [global | session] variables like '參數名稱'  (參數名稱可以支持mysql的通配符) ,若不寫global或session默認是global

或者

    select  @@[global|session].'參數名稱'若不寫global或session默認是global

MariaDB [(none)]> show variables like '%file' 
    -> ;
+-------------------------+------------------------------+
| Variable_name           | Value                        |
+-------------------------+------------------------------+
| ft_stopword_file        | (built-in)      
MariaDB [(none)]> select @@ft_stopword_file
    -> ;
+--------------------+
| @@ft_stopword_file |
+--------------------+
| (built-in)         |
+--------------------+

 查看與狀態及統計信息相關的參數/變量的值;
      show [global | session] status like '參數名稱'  (參數名稱可以支持mysql的通配符) ,若不寫global或session默認是global

 修改服務器變量的方法:

    set '參數名稱' = 參數值

    set @@參數名稱 = 參數值


        set global innodb_file_per_table=1;
        set @@global.innodb_file_per_table=0;

MariaDB與MySQL模式

    ANSI:寬鬆模式,當插入的數據不符合類型,或長度不匹配,則會發出warning警告

    TRADITIONAL:嚴格模式。對於插入的數據進行校驗,如果該數據不符合字段定義的數據類型或長度要求,報告Error錯誤警告,且錯誤數據不會被寫入;

        該模式用於事務時,此前可能已經進行了一系列的數據插入和修改操作,而一旦發送上述錯誤,此前所有的INSERT/UPDATE等操作均會被立即放棄並回滾。

        該模式用於非事務時,一旦發送上述錯誤,則此前所有的INSERT/UPDATE等操作均不會回滾

(事務:包括事務開始條件和事務結束條件;一般包含一個或多個SQL語句)

    STRICT_TRANS_TABLES:嚴格模式。對於插入的數據進行校驗,如果該數據不符合字段定義的數據類型或長度要求,報告Error錯誤警告,且錯誤數據不會被寫入;

    STRICT_ALL_TABLES:嚴格模式。對於事務型操作,與STRICT_TRANS_TABLES模式效果一樣;對於非事務操作,與TRADITIONAL模式效果一樣。    


數據庫的數據類型:

       數值型:
                            精確數值型:
                                TINYINT(3):8bits,0~255,-128~+127
                                SMALLINT(5):16bits,0~65535,-32768~+32767
                                MEDIUMINT(8):24bits,0~16777735
                                INT(10):32bits,
                                INTEGER:48bits,
                                BIGINT:64bits

                            近似數值型:
                                REAL
                                DOUBLE
                                FLOAT

                        字符串型:
                            變長字符型:
                                VARCHAR(length):字符不區分大小寫;65536個字符;
                                    VARCHAR(30)
                                        qhdlink$ -- 8字節存儲空間;
                                VARBINARY(length):字符區分大小寫;65536個字符;

                            定長字符型
                                CHAR(length):字符不區分大小寫;256個字符;
                                    CHAR(30)
                                        qhdlink -- 30字節空間;
                                BINARY(length):字符區分大小寫;256個字符;

                        對象存儲類型:
                            TEXT:存儲大量的純文本信息;
                                TINYTEXT
                                TEXT
                                MEDIUMTEXT
                                LONGTEXT

                            BLOB:存儲非純文本信息經過流式化處理之後的二進制數據;
                                TINYBLOB
                                BLOB
                                MEDIUMBLOB
                                LONGBLOB

                        日期時間型:
                            DATE:日期型,3字節;
                            TIME:時間型,3字節;
                            TIMESTAMP:時間戳類型,4字節;
                            DATETIME:日期時間型,8字節;
                            YEAR:年份,YEAR(2),YEAR(4)

                        內置特殊類型:
                            集合類型:
                                SET:集合,插入的數據可以是集合中各個元素的任意組合;
                                    SET('a','b','c','d')
                                        a
                                        aa
                                        aab
                                        abdc

                            枚舉類型:
                                ENUM:枚舉,只能存放列舉出來的固定的字符或字符串;
                                    ENUM('F','M')
                                        F
                                        M

                    數據類型相關的修飾符:
                        與整數類型相關的:
                            UNSIGNED,無符號整數;
                                注意:UNSIGNED修飾符必須緊跟在精確數值類型標識符之後;
                            AUTO_INCREMENT [=] Value:
                                整型數據的遞增或遞減;

                        通用修飾符:
                            NOT NULL:非空約束;一般是爲主鍵做約束;
                            DEFAULT Value:爲字段設置默認值;

數據庫語言

    DDL:數據庫定義語言

           創建數據庫:CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] [CHARACTER SET [=] charset_name  | [DEFAULT] COLLATE [=] collation_name]

                IF NOT EXISTS:
                    如果指定要創建的數據庫已經存在,則不報錯也不執行創建操作;

                db_name:
                    要創建的數據庫的名稱

                CHARACTER SET [=] charset_name:

                    查看mysql服務器所支持的所有字符集及默認排序規則;

                COLLATE [=] collation_name:
                    爲新創建的數據庫指定字符集的排序規則;

MariaDB [(none)]> create database lilei character set = 'utf8';
Query OK, 1 row affected (0.01 sec)
MariaDB [(none)]> create database if not exists lilei character set = 'utf8';
Query OK, 1 row affected, 1 warning (0.00 sec)

            修改數據庫的字符集或排序規則:ALTER {DATABASE | SCHEMA} [db_name] [DEFAULT] [CHARACTER SET [=] charset_name  | [DEFAULT] COLLATE [=] collation_name]

注意:如果數據庫中已經有表,且表中已經插入數據時,更改數據庫的字符集和排序規則可能會導致已存數據的亂碼;

            刪除數據庫:DROP {DATABASE | SCHEMA} [IF EXISTS] db_name

MariaDB [(none)]> drop database lilei;
Query OK, 0 rows affected (0.01 sec)

創建表:

    CREATE TABLE [IF NOT EXISTS] tbl_name (create_definition,...) [table_options]

MariaDB [lilei]> create table han×××1(ID tinyint unsigned not null auto_increment primary key,Name varchar(30));
Query OK, 0 rows affected (0.03 sec)

顯示錶的結構:
                mysql> desc stu_info;

顯示創建表的SQL語句:
                mysql> show create table stu_info;

刪除表:
            DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...

        修改表:修改表的各個字段的屬性和定義的內容;
            ALTER TABLE tbl_name [alter_specification [, alter_specification] ...]

            增加表的字段:
                ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name ]

MariaDB [lilei]> alter table han××× add (Age tinyint not null);
Query OK, 0 rows affected (0.04 sec)               
Records: 0  Duplicates: 0  Warnings: 0


MariaDB [lilei]> alter table han××× add SAge tinyint not null after Age;
Query OK, 0 rows affected (0.04 sec)               
Records: 0  Duplicates: 0  Warnings: 0

            修改表的字段屬性
                CHANGE [COLUMN] old_col_name new_col_name column_definition  [FIRST|AFTER col_name]
                MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]

modify和change不同的是 modify不能修改字段名稱;

MariaDB [lilei]> alter table han××× change SAge sex tinyint not null after Age;
Query OK, 0 rows affected (0.03 sec)               
Records: 0  Duplicates: 0  Warnings: 0

            刪除表的字段:
                DROP [COLUMN] col_name
                
                注意:刪除字段的操作可能會引起數據的變化,所以,刪除字段時要慎重;

DML:數據庫管理語言

    向表中添加數據:
            INSERT [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),...
        Or:
            INSERT [INTO] tbl_name SET col_name={expr | DEFAULT}, ...

MariaDB [lilei]> insert into han××× values(2,'wang',1,2);
MariaDB [lilei]> insert into han××× (Name) values ('zhao'),('yuan');
MariaDB [lilei]> insert into han××× set ID=6,Name='yuan';


            注意:
                1.如果向表中插入的value是字符串,則value必須使用引號引用;
                2.如果向表中插入的value是數字,則value一定不能用引號引用;

        查看錶中的數據內容:
            SELECT select_expr [, select_expr ...] [FROM table_references] [WHERE where_condition]

            1.顯示整張表:
                SELECT * FROM tbl_name;

            2.投影:顯示指定的或符合要求的列;
                SELECT col_name AS con_alias[,col_name AS con_alias,...] FROM tbl_name;

            3.選擇:顯示符合要求或匹配條件的行;
                SELECT col_name AS con_alias[,col_name AS con_alias,...] FROM tbl_name WHERE condition;

                WHERE子句用於指明選擇時依據的條件:
                    col_name 操作符 value

MariaDB [lilei]> select ID from han××× where ID=6;
+----+
| ID |
+----+
|  6 |
+----+

            WHERE條件子句:
                通過指明特定的過濾條件或表達式來實現"選擇"運算;過濾條件有下列幾種:
                    1.算術表達式:Age+10,
                        算術操作符:+, -, *, /, %;
                    2.比較表達式:Age+10<20;
                        比較操作符:=, <=>, <>, !=, >, >=, <, <=;
                    3.邏輯表達式:
                        邏輯操作符:AND, OR, NOT, XOR;
                    4.其他表達式:
                        空值判斷:IS NULL, IS NOT NULL;
                        連續區間判斷:BETWEEN ... AND ...

MariaDB [lilei]> select * from han××× where ID between 3 and 5;
+----+------+-----+-----+
| ID | Name | Age | sex |
+----+------+-----+-----+
|  3 | li   |   0 |   0 |
|  4 | zhao |   0 |   0 |
|  5 | yuan |   0 |   0 |
+----+------+-----+-----+

                        列表從屬關係判斷:IN (LIST);
                        模糊值判斷:
                            LIKE:可以支持通配符,%和_;如果想要使用索引實現加速檢索,則最左側字符不能使用通配符;
                            RLIKE或REGEXP:可以支持正則表達式元字符;只要在查詢條件中包含正則表達式元字符,則一定無法使用索引進行檢索;功能很強大,但檢索性能可能變差;

            GROUP BY子句:
                根據指定的字段將查詢結果進行分組歸類,以方便進行聚合運算;
                常用的聚合運算函數:
                    avg():取平均值運算;
                    max():取最大值運算;
                    min():取最小值運算;
                    sum():做和運算;
                    count():做次數統計;

MariaDB [lilei]> select Name,count(Name) from han××× group by Name;
+------+-------------+
| Name | count(Name) |
+------+-------------+
| 10   |           1 |
| li   |           1 |
| wang |           1 |
| yuan |           2 |
| zhao |           1 |
+------+-------------+

(若同時使用GROUP BY 和where) where 放在group by之前
            HAVING子句:對於經過分組歸類並進行了聚合運算以後的結果進行條件過濾;
                其條件表達式的書寫格式與WHERE子句相同;

            ORDER BY子句:根據指定的字段將查詢結果進行排序,可以使用升序或降序,默認是升序;
                升序:ASC
                降序:DESC

LIMIT子句:
                對於查詢的結果進行限定行數的輸出;

                1.LIMIT [offset,] row_count    offset是一個數:偏移量    row_count :是一個數,顯示幾行

MariaDB [lilei]> select * from han××× limit 1,2;   偏移一行,顯示倆行,也就是從首行開始,略過一行,顯示接下來倆行
+----+------+-----+-----+
| ID | Name | Age | sex |
+----+------+-----+-----+
|  2 | wang |   1 |   2 |
|  3 | li   |   0 |   0 |
+----+------+-----+-----+

                2.LIMIT row_count OFFSET offset

MariaDB [lilei]> select * from han××× limit 2 offset 1;
+----+------+-----+-----+
| ID | Name | Age | sex |
+----+------+-----+-----+
|  2 | wang |   1 |   2 |
|  3 | li   |   0 |   0 |
+----+------+-----+-----+

視圖: 實際上是一個虛表,使用select查詢語句的結果    

    創建視圖:CREATE VIEW view_name [(column_list)] AS SELECT clause;

MariaDB [lilei]> create view han as select ID,Name from han×××;
Query OK, 0 rows affected (0.00 sec)

MariaDB [lilei]> select * from han;
+----+------+
| ID | Name |
+----+------+
|  1 | 10   |
|  2 | wang |
|  3 | li   |
|  4 | zhao |
|  5 | yuan |
|  6 | yuan |
+----+------+

    刪除視圖:DROP VIEW [IF EXISTS] view_name [, view_name] ... [RESTRICT | CASCADE]


注意:之所以創建視圖,是爲了隱藏某些字段的信息,所以我們查詢視圖的時候 顯示的只是基表的一部分,當我們去給視圖內添加數據時,若基表沒顯示的字段部分要求數據不能爲空,則添加失敗,   除非數據庫模式爲寬鬆模式;


    


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章