《資訊安全系統設計與實現》學習筆記12
一、學習筆記
1.什麼是MySQL
MySQL是一個關係資料庫系統。在關係資料庫中,資料儲存在表中。關係資料庫系統的標準查詢語言是SQL(結構化查詢語言)
2.Ubuntu Linux下MySQL的安裝與使用
(1)安裝MySQL
命令sudo apt-get install mysql-server可以安裝一個mysql—server包,mysql-server包包括一個MySQL伺服器和一個客戶機。
(2)連線MySQL
首先要執行MySQL客戶機程式,從X-window終端輸入MySQL客戶機命令mysql,它連線到同一臺計算機上預設本地主機上的MySQL伺服器。連線到MySQL伺服器後,即可訪冋MySQL shell,它只接受MySQL命令或MySQL指令碼,而不接受普通sh命令。在輸入MySQL命令時,要注意以下幾點。
- 所有的MySQL命令列末尾必須是分號。
- MySQL命令列不區分大小寫。
(3)顯示資料庫
SHOW DATABASES命令可顯示MySQL中的當前資料庫。
(4)新建資料庫
CREATE DATABASE XXX命令將建立一個名為XXX的新資料庫。
(5)刪除資料庫
DROP DATABASE dbname會刪除已存在的命名為dbname的資料庫。DROP操作是不可逆的。一旦資料庫被刪除,就無法撤銷或恢復
(6)選擇資料庫
假設MySQL已經有幾個資料庫。為了操作特定的資料庫,必須通過USE dbname命令選擇一個數據庫。
(7)建立表
CREATE TABLE table_name
(8)刪除表
DROP TABLE table_name命令可刪除表。
(9)插入行
要在表中新增行,可使用INSERT命名,具有如下語法形式:INSERT INTO table_name VLAUES(column Vaiuel, column Value2,...);
(10)刪除行
用DELETE命令從表中刪除行,其語法形式如下:
(11)更新表
UPDATE命令用於修改表中的現有記錄(列)。它的語法形式如下:UPDATE table_name SET coll = valuel, col2 = value2,... WHERE condition;
(12)修改表
ALTER TABLE命令用於新增、刪除或修改當前表中的列。它還用於新增和刪除當前表 中的各種約束條件。
2.MySQL中的資料型別
MySQL中使用的基本資料型別,主要有三類:數字、字串、日期和時間。
- 數值型別:
INT:整數(4位元組),TINYINT:(1位元組),SMALLINT:(2 位元組)
FLOAT:浮動指標數。
- 字串型別:
CHAR(size):固定長度字串,長度為1〜255字元。
VARCHAR(size):可變長度字串,但不能使用任何空格。
TEXT:可變長度的字串。
- 日期和時間型別:
DATE:日期格式為 YYYY-MM-DD。
TIME:以S格式儲存時間。
3.關聯表
一個真正的資料庫可能包含多個相互關聯的表。在MySQL中,使用主鍵-外來鍵約束條件來定義表關係。在兩個表之間建立連結,其中一個表的主鍵與另一個表的外來鍵相關聯。在MySQL中,表可能以幾種方式相關聯,包括:
- 一對一(1-1)關係:
一對一(1-1)關係是指兩個表僅基於一個匹配行相互關聯的關係。可以使用主鍵-外來鍵約束條件建立這類關係。
- 一對多(l-M)關係:
一對多關係是指一個表中的一行在另一個表中有多個匹配行的關係。可以使用主鍵-外來鍵關係來建立這種關係。
- 多對多(M-M)關係:
如果一個表中的多條記錄與另一個表中的多條記錄相關,則兩個表具有多對多(M-M) 關係。處理M-M關係的標準方法是在兩個表之間建立一個連線表。連線 表使用外來鍵來引用兩個表中的主鍵,從而在兩個表之間建立連線。
- 自引用關係
4.連線操作
在MySQL中,可使用連線操作在多個表中檢索資料。連線操作有4種不同的型別。
- (INNER) JOIN table 1, table2:檢索兩個表中共有的項。
- LEFT JOIN table 1, table2:檢索表1中的項以及兩個表中共有的項。
- RIGHT JOIN tablel,table2:檢索表2中的項以及兩個表中共有的項。
- OUTER JOIN tabell,table2:檢索兩個表中非共有以及沒有用的項。
對於正則集運算,MySQL中的連線操作可以解釋如下。+表示兩個集合的並集,^表 示兩個集合的交集。
二、問題與解決辦法
執行書上程式碼時遇到了問題,首先我先安裝了MySQL
接著我執行書上使用C語言構建MySQL客戶機程式這部分程式碼
#include <stdio.h>
#include <my_global.h>
#include <mysql.h>
int maln(int argc, char *argc[])
{
printf("MySQL client version is : %s\n", mysql_get_client_info());
}
報錯顯示my_global.h:沒有那個檔案或目錄。後面的程式碼也都有這樣的報錯
//連線MySQL伺服器
#include <stdio.h>
#include <stdlib.h>
#include <my_global. h>
#include <mysql.h>
int main(int argc, char *argv[])
{
// 1. define a connection object
MYSQL con;
// 2. Initialize the connection object
if (mysql_init(&con))
{ // return object address
printf("Connection handle initialized\n");
}
else
{
printf("Connection handle initialization failed\n");
exit(1);
}
// 3. Connect to MySQL server on localhost
if (mysql_real_connect(&con, "localhost", "root", "root_password", "CS360", 3306, NULL, 0))
{
printf("Connection to remote MySQL server 0K\n");
}
else
{
printf("Connection to remote MySQL failed\n");
exit(1);
}
// 4. Close the connection when done
mysql_close(&con);
}
在網上找了一種解決辦法是:輸入sudo apt-get install libmysqlclient-dev命令安裝libmysqlclient-dev包,但是我安裝了之後仍然有這個報錯,到現在還沒有找到解決辦法,希望上課的時候能得到解答。
三、學習感悟
資料庫在大二下學期上web課的時候就接觸過,那時候沒太好好學。然後資料庫在公文傳輸系統中也用到了,但是那時候就是跟著網上的教程一步一步來,照葫蘆畫瓢,但其實對其中的基本知識和原理還是不太清楚的。這次在自學的時候很明顯能發現跟著教程走和自己從頭學還是不一樣的。跟著別人的教程走雖然省事,但是由於別人已經解決了問題,缺少了自己發現問題解決問題的過程,有些東西已經學不到了。這次自學的時候遇到了好多困難,雖然有的還沒找到解決辦法,但是我覺得已經比之前的收穫大很多了。