第十四章:MySQL數(shù)據(jù)庫系統(tǒng)
MySQL簡介
- MySQL(MySQL2018)是一個關(guān)系數(shù)據(jù)庫系統(tǒng)(Codd 1970)。在關(guān)系數(shù)據(jù)庫中,數(shù)據(jù)存儲在表中。每個表由多個行和列組成。表中的數(shù)據(jù)相互關(guān)聯(lián)。表也可能與其他表有關(guān)聯(lián)關(guān)系結(jié)構(gòu)使得可在表上運行查詢來檢索信息并修改數(shù)據(jù)庫中的數(shù)據(jù)。關(guān)系數(shù)據(jù)庫系統(tǒng)的標(biāo)準(zhǔn)查詢語言是SQL(結(jié)構(gòu)化查詢語言)包括MySQL
- MySQL是一個開源數(shù)據(jù)庫管理系統(tǒng),由服務(wù)器和客戶機組成。在將客戶機連接到服務(wù)器后,用戶可向服務(wù)器輸入SQL命令,以便創(chuàng)建數(shù)據(jù)庫,刪除數(shù)據(jù)庫,存儲、組織和檢索數(shù)據(jù)庫中的數(shù)據(jù)。MySQL有廣泛的應(yīng)用。除了提供標(biāo)準(zhǔn)的數(shù)據(jù)庫系統(tǒng)服務(wù)外,MySQL和PHP(PHP 2018)已成為大多數(shù)數(shù)據(jù)管理和在線商務(wù)網(wǎng)站的主干網(wǎng)。本章介紹了MySQL。我們將介紹MySQL的基礎(chǔ)知識,包括如何在Linux 中安裝/配置MySOL,如何使用MySQL創(chuàng)建和管理簡單數(shù)據(jù)庫,以及如何在C語言和PHP編程環(huán)境中與MySQL交互
安裝MySQL
Ubuntu Linux
- 對于Ubuntu 16.04及之后版本,可通過以下操作安裝
sudo apt-get install mysql-server
安裝MySQL后,可通過運行腳本對其進行配置已獲得更好的安全性
mysql_secure_installation
![]()
![]()
Slackware Linux
- 設(shè)置my.cnf : MySQL在啟動時加載一個名為my.cnf的配置文件。該文件要在首次設(shè)置MySQL時創(chuàng)建。在/etc目錄中,有幾個示例my.cnf文件,文件名分別是my-small. cnf. my-large.cnf等。選擇所需的版本來創(chuàng)建my.cnf文件,如
cp /etc/my-small.cnf /etc/my.cnf - 安裝所需數(shù)據(jù)庫:MySQL需要一個所需數(shù)據(jù)庫集,用于用戶識別等。要安裝它們, 可使用mysql用戶作為超級用戶,并使用以下命令安裝所需的初始數(shù)據(jù)庫
mysql_install_db - 設(shè)置所需的系統(tǒng)權(quán)限:該步驟確保mysql用戶擁有mysql系統(tǒng)的所有權(quán)
chown -R inysql.mysql /var/lib/mysql - 通過以下操作使Zetc/rc.d/rc.mysqld可執(zhí)行:
chmod 7S5 /etc/rc.d/rc.mysqld
使用MySQL
連接到MySQL服務(wù)器
- 使用MySQL的第一步是運行MySQL客戶機程序。從X-window終端輸人MySQL客戶機命令mysql,它連接到同一臺計算機上默認本地主機上的MySQL服務(wù)器
mysql -u root -p
Enter password:
mysql>
顯示數(shù)據(jù)庫
SHOW DATABASES命令可顯示MySQL 中的當(dāng)前數(shù)據(jù)庫
![]()
新建數(shù)據(jù)庫
- 如果數(shù)據(jù)庫dbname還不存在,那么
CREATE DATABASEdbname命令將創(chuàng)建一個名為dbname的新數(shù)據(jù)庫。如果數(shù)據(jù)庫已經(jīng)存在則可以使用可選的IF NOT EXISTS子對該命令進行限定,以避免出現(xiàn)錯誤消息
![]()
刪除數(shù)據(jù)庫
DROP DATABASE dbname會刪除已存在的命名數(shù)據(jù)庫。該命令可以用一個可選的IFEXISTS 子句限定。注意,DROP 操作是不可逆的。一旦數(shù)據(jù)庫被刪除,就無法撤銷或恢復(fù)因此,須謹慎使用
![]()
選擇數(shù)據(jù)庫
- 假設(shè)MySOL已經(jīng)有幾個數(shù)據(jù)庫。為了操作特定的數(shù)據(jù)庫,用戶必須通過
USE dbname命令選擇一個數(shù)據(jù)庫
創(chuàng)建表
CREATE TABLE table name命令會在當(dāng)前數(shù)據(jù)庫中創(chuàng)建一個表。命令語法如下:
CREATE TABLE [IF NOT EXISTS] tableName (
columnName columnType columnAttribute, ...
PRIMARY KEY(columnName).
FOREIGN KEY (columnNmae) REFERENCES tableName (columnNmae)
)
DESCRIBE或DESC命令顯示表格式和列屬性
刪除表
DROP TABLE table name命令可刪除表
MySQL中的數(shù)據(jù)類型
- 數(shù)值類型
- INT:整數(shù)(4字節(jié)),TINYINT:(1字節(jié)),SMALLINT:(2字節(jié))等
- FLOAT:浮動指針數(shù)
- 字符串類型
- CHAR(size):固定長度字符串,長度為1~255 字符
- VARCHAR(size):可變長度字符串,但不能使用任何空格
- TEXT:可變長度的字符串
- 日期和時間類型
- DATE:日期格式為YYYY-MM-DD
- TIME:以HH:MM:SS格式保存時間
插入行
- 要在表中添加行,可使用INSERT命名,具有語法形式:
INSERT INTO table name VLAUES(columnValuel,columnValue2,....);
刪除行
- 使用
DELETE命令從表中刪除行,其語法形式如下:
DELETE FROM table name; # delete all rows of a table
DELETE FROM table_name WHERE condition; # delete row by condition
更新表
UPDATE命令用于修改表中的現(xiàn)有記錄(列)。它的語法形式如下
UPDATE table_name SET coll = valuel, col2 = value2,...WHERE condition;
修改表
- 修改表名
ALTER TABLE table name renAme To new_name; - 添加列
ALTER TABLE table name ADD column name datatype; - 刪除行
ALTER TABLE table name DROP column name datatype; - 更改/修改行
ALTER TABLE table name DROP column name datatype;
關(guān)聯(lián)表
- 一對一(1-1)關(guān)系
一對一(1-1)關(guān)系是指兩個表僅基于一個匹配行相互關(guān)聯(lián)的關(guān)系。可以使用主鍵-外鍵約束條件創(chuàng)建這類關(guān)系。假設(shè)在cs360 數(shù)據(jù)庫中,每個學(xué)生都有一個唯一的電子郵箱地址。我們可在 students 表中添加每個學(xué)生的電子郵箱地址,但這需要在學(xué)生表中新增一列。相反,我們可以創(chuàng)建一個只包含學(xué)生電子郵箱地址的單獨 email 表,并通過mail 表中的唯一外鍵定義兩個表之間的1-1關(guān)系,該外鍵引用students 表中的主鍵 - 一對多(1-M)關(guān)系
在數(shù)據(jù)塊中,一對多或1-M關(guān)系比1-1關(guān)系更常見,也更有用。一對多關(guān)系是指一個表中的一行在另一個表中有多個匹配行的關(guān)系。可以使用主鍵-外鍵關(guān)系來創(chuàng)建這種關(guān)系 - 多對多(M-M)關(guān)系
如果一個表中的多條記錄與另一個表中的多條記錄相關(guān),則兩個表具有多對多(M-M)關(guān)系。例如,每名學(xué)生可以上幾門課,每門課通常有多名學(xué)生。所以,students 表與課程注冊表之間是 M-M關(guān)系。處理M-M 關(guān)系的標(biāo)準(zhǔn)方法是在兩個表之間創(chuàng)建一個連接表。連接表使用外鍵來引用兩個表中的主鍵,從而在兩個表之間創(chuàng)建連接 - 自引用關(guān)系
表可以通過某些列自我關(guān)聯(lián)
連接操作
- 在MySQL中,可使用連接操作在多個表中檢索數(shù)據(jù)。連接操作有4種不同的類型
- (INNER)JOIN tablel,table2:檢索兩個表中共有的項
- LEFT JOIN tablel,table2:檢索表1中的項以及兩個表中共有的項
- RIGHT JOIN tablel,table2:檢索表2中的項以及兩個表中共有的項
- OUTER JOIN tabell, table2:檢索兩個表中非共有以及沒有用的項
蘇格拉底提問




問題:MySQL初始用戶名與密碼不知道,無法登錄
解決:







浙公網(wǎng)安備 33010602011771號