MySQL 【教程一】
前言
什麼是資料庫?
資料庫(Database)是按照資料結構來組織、儲存和管理資料的倉庫。
每個資料庫都有一個或多個不同的 API 用於建立,訪問,管理,搜尋和複製所儲存的資料。
我們也可以將資料儲存在檔案中,但是在檔案中讀寫資料速度相對較慢。
所以,現在我們使用關係型資料庫管理系統(RDBMS)來儲存和管理大資料量。所謂的關係型資料庫,是建立在關係模型基礎上的資料庫,藉助於集合代數等數學概念和方法來處理資料庫中的資料。
RDBMS 即關係資料庫管理系統(Relational Database Management System)的特點:
- 1.資料以表格的形式出現
- 2.每行為各種記錄名稱
- 3.每列為記錄名稱所對應的資料域
- 4.許多的行和列組成一張表單
- 5.若干的表單組成database
RDBMS 術語
在我們開始學習MySQL 資料庫前,讓我們先了解下RDBMS的一些術語:
- 資料庫: 資料庫是一些關聯表的集合。
- 資料表: 表是資料的矩陣。在一個數據庫中的表看起來像一個簡單的電子表格。
- 列: 一列(資料元素) 包含了相同型別的資料, 例如郵政編碼的資料。
- 行:一行(=元組,或記錄)是一組相關的資料,例如一條使用者訂閱的資料。
- 冗餘:儲存兩倍資料,冗餘降低了效能,但提高了資料的安全性。
- 主鍵:主鍵是唯一的。一個數據表中只能包含一個主鍵。你可以使用主鍵來查詢資料。
- 外來鍵:外來鍵用於關聯兩個表。
- 複合鍵:複合鍵(組合鍵)將多個列作為一個索引鍵,一般用於複合索引。
- 索引:使用索引可快速訪問資料庫表中的特定資訊。索引是對資料庫表中一列或多列的值進行排序的一種結構。類似於書籍的目錄。
- 參照完整性: 參照的完整性要求關係中不允許引用不存在的實體。與實體完整性是關係模型必須滿足的完整性約束條件,目的是保證資料的一致性。
MySQL 為關係型資料庫(Relational Database Management System), 這種所謂的"關係型"可以理解為"表格"的概念, 一個關係型資料庫由一個或數個表格組成, 如圖所示的幾個表格:
- 表頭(header): 每一列的名稱;
- 列(col): 具有相同資料型別的資料的集合;
- 行(row): 每一行用來描述某條記錄的具體資訊;
- 值(value): 行的具體資訊, 每個值必須與該列的資料型別相同;
- 鍵(key): 鍵的值在當前列中具有唯一性。
MySQL資料庫
MySQL 是一個關係型資料庫管理系統,由瑞典 MySQL AB 公司開發,目前屬於 Oracle 公司。MySQL 是一種關聯資料庫管理系統,關聯資料庫將資料儲存在不同的表中,而不是將所有資料放在一個大倉庫內,這樣就增加了速度並提高了靈活性。
- MySQL 是開源的,所以你不需要支付額外的費用。
- MySQL 支援大型的資料庫。可以處理擁有上千萬條記錄的大型資料庫。
- MySQL 使用標準的 SQL 資料語言形式。
- MySQL 可以運行於多個系統上,並且支援多種語言。這些程式語言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。
- MySQL 對PHP有很好的支援,PHP 是目前最流行的 Web 開發語言。
- MySQL 支援大型資料庫,支援 5000 萬條記錄的資料倉庫,32 位系統表文件最大可支援 4GB,64 位系統支援最大的表文件為8TB。
- MySQL 是可以定製的,採用了 GPL 協議,你可以修改原始碼來開發自己的 MySQL 系統。
MySQL 安裝
所有平臺的 MySQL 下載地址為: MySQL 下載 。 挑選你需要的 MySQL Community Server 版本及對應的平臺。
注意:安裝過程我們需要通過開啟管理員許可權來安裝,否則會由於許可權不足導致無法安裝。
Linux/UNIX 上安裝 MySQL
Linux平臺上推薦使用RPM包來安裝Mysql,MySQL AB提供了以下RPM包的下載地址:
- MySQL - MySQL伺服器。你需要該選項,除非你只想連線執行在另一臺機器上的MySQL伺服器。
- MySQL-client - MySQL 客戶端程式,用於連線並操作Mysql伺服器。
- MySQL-devel - 庫和包含檔案,如果你想要編譯其它MySQL客戶端,例如Perl模組,則需要安裝該RPM包。
- MySQL-shared - 該軟體包包含某些語言和應用程式需要動態裝載的共享庫(libmysqlclient.so*),使用MySQL。
- MySQL-bench - MySQL資料庫伺服器的基準和效能測試工具。
# 安裝前,我們可以檢測系統是否自帶安裝 MySQL: rpm -qa | grep mysql
# 如果你係統有安裝,那可以選擇進行解除安裝: rpm -e mysql # 普通刪除模式 rpm -e --nodeps mysql # 強力刪除模式,如果使用上面命令刪除時,提示有依賴的其它檔案,則用該命令可以對其進行強力刪除
安裝 MySQL:
接下來我們在 Centos7 系統下使用 yum 命令安裝 MySQL,需要注意的是 CentOS 7 版本中 MySQL資料庫已從預設的程式列表中移除,所以在安裝前我們需要先去官網下載 Yum 資源包,下載地址為:https://dev.mysql.com/downloads/repo/yum/
# wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm # rpm -ivh mysql-community-release-el7-5.noarch.rpm # yum update # yum install mysql-server
# 許可權設定: chown mysql:mysql -R /var/lib/mysql
# 初始化 MySQL: mysqld --initialize
# 啟動 MySQL: systemctl start mysqld # 檢視 MySQL 執行狀態: systemctl status mysqld
注意:如果我們是第一次啟動 mysql 服務,mysql 伺服器首先會進行初始化的配置。
此外,你也可以使用 MariaDB 代替,MariaDB 資料庫管理系統是 MySQL 的一個分支,主要由開源社群在維護,採用 GPL 授權許可。開發這個分支的原因之一是:甲骨文公司收購了 MySQL 後,有將 MySQL 閉源的潛在風險,因此社群採用分支的方式來避開這個風險。
# MariaDB的目的是完全相容MySQL,包括API和命令列,使之能輕鬆成為MySQL的代替品。 yum install mariadb-server mariadb # mariadb資料庫的相關命令是: systemctl start mariadb #啟動MariaDB systemctl stop mariadb #停止MariaDB systemctl restart mariadb #重啟MariaDB systemctl enable mariadb #設定開機啟動
驗證 MySQL 安裝
在成功安裝 MySQL 後,一些基礎表會表初始化,在伺服器啟動後,你可以通過簡單的測試來驗證 MySQL 是否工作正常。
使用 mysqladmin 工具來獲取伺服器狀態:
使用 mysqladmin 命令來檢查伺服器的版本, 在 linux 上該二進位制檔案位於 /usr/bin 目錄,在 Windows 上該二進位制檔案位於C:\mysql\bin 。
[root@host]# mysqladmin --version
linux上該命令將輸出以下結果,該結果基於你的系統資訊:
mysqladmin Ver 8.23 Distrib 5.0.9-0, for redhat-linux-gnu on i386
如果以上命令執行後未輸出任何資訊,說明你的Mysql未安裝成功。
使用 MySQL Client(Mysql客戶端) 執行簡單的SQL命令
你可以在 MySQL Client(Mysql客戶端) 使用 mysql 命令連線到 MySQL 伺服器上,預設情況下 MySQL 伺服器的登入密碼為空,所以本例項不需要輸入密碼。
命令如下:
[root@host]# mysql
以上命令執行後會輸出 mysql>提示符,這說明你已經成功連線到Mysql伺服器上,你可以在 mysql> 提示符執行SQL命令:
mysql> SHOW DATABASES; +----------+ | Database | +----------+ | mysql | | test | +----------+ 2 rows in set (0.13 sec)
Mysql安裝後需要做的
Mysql安裝成功後,預設的root使用者密碼為空,你可以使用以下命令來建立root使用者的密碼:
[root@host]# mysqladmin -u root password "new_password";
現在你可以通過以下命令來連線到Mysql伺服器:
[root@host]# mysql -u root -p Enter password:*******
注意:在輸入密碼時,密碼是不會顯示了,你正確輸入即可。
Windows 上安裝 MySQL
Windows 上安裝 MySQL 相對來說會較為簡單,最新版本可以在 MySQL 下載 中下載中檢視(更詳細安裝:Windows 上安裝 MySQL)。
點選 Download 按鈕進入下載頁面,點選下圖中的 No thanks, just start my download. 就可立即下載:
下載完後,我們將 zip 包解壓到相應的目錄,這裡我將解壓後的資料夾放在 C:\web\mysql-8.0.11 下。
接下來我們需要配置下 MySQL 的配置檔案
開啟剛剛解壓的資料夾 C:\web\mysql-8.0.11 ,在該資料夾下建立 my.ini 配置檔案,編輯 my.ini 配置以下基本資訊:
[client] # 設定mysql客戶端預設字符集 default-character-set=utf8 [mysqld] # 設定3306埠 port = 3306 # 設定mysql的安裝目錄 basedir=C:\\web\\mysql-8.0.11 # 設定 mysql資料庫的資料的存放目錄,MySQL 8+ 不需要以下配置,系統自己生成即可,否則有可能報錯 # datadir=C:\\web\\sqldata # 允許最大連線數 max_connections=20 # 服務端使用的字符集預設為8位元編碼的latin1字符集 character-set-server=utf8 # 建立新表時將使用的預設儲存引擎 default-storage-engine=INNODB
接下來我們來啟動下 MySQL 資料庫:
- 以管理員身份開啟 cmd 命令列工具,切換目錄:
cd C:\web\mysql-8.0.11\bin
- 初始化資料庫:
mysqld --initialize --console
- 執行完成後,會輸出 root 使用者的初始預設密碼,如:
... 2018-04-20T02:35:05.464644Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: APWCY5ws&hjQ ...
APWCY5ws&hjQ 就是初始密碼,後續登入需要用到,你也可以在登陸後修改密碼。
- 輸入以下安裝命令:
mysqld install
- 啟動輸入以下命令即可:
net start mysql
# 注意: 在 5.7 需要初始化 data 目錄: cd C:\web\mysql-8.0.11\bin mysqld --initialize-insecure # 初始化後再 # 執行 net start mysql 即可啟動 mysql。
登入 MySQL
當 MySQL 服務已經執行時, 我們可以通過 MySQL 自帶的客戶端工具登入到 MySQL 資料庫中, 首先開啟命令提示符, 輸入以下格式的命名:
mysql -h 主機名 -u 使用者名稱 -p
- 引數說明:
- -h : 指定客戶端所要登入的 MySQL 主機名, 登入本機(localhost 或 127.0.0.1)該引數可以省略;
- -u : 登入的使用者名稱;
- -p : 告訴伺服器將會使用一個密碼來登入, 如果所要登入的使用者名稱密碼為空, 可以忽略此選項。
- 如果我們要登入本機的 MySQL 資料庫,只需要輸入以下命令即可:
mysql -u root -p
- 按回車確認, 如果安裝正確且 MySQL 正在執行, 會得到以下響應:
Enter password:
若密碼存在, 輸入密碼登入, 不存在則直接按回車登入。登入成功後你將會看到 Welcome to the MySQL monitor... 的提示語。
然後命令提示符會一直以 mysq> 加一個閃爍的游標等待命令的輸入, 輸入 exit 或 quit 退出登入。
啟動及關閉 MySQL 伺服器
Windows 系統下
在 Windows 系統下,開啟命令視窗(cmd),進入 MySQL 安裝目錄的 bin 目錄。
啟動:
cd c:/mysql/bin mysqld --console
關閉:
cd c:/mysql/bin mysqladmin -uroot shutdown
Linux 系統下
首先,我們需要通過以下命令來檢查MySQL伺服器是否啟動:
ps -ef | grep mysqld
如果MySql已經啟動,以上命令將輸出mysql程序列表, 如果mysql未啟動,你可以使用以下命令來啟動mysql伺服器:
root@host# cd /usr/bin ./mysqld_safe &
如果你想關閉目前執行的 MySQL 伺服器, 你可以執行以下命令:
root@host# cd /usr/bin ./mysqladmin -u root -p shutdown Enter password: ******
MySQL 使用者設定
如果你需要新增 MySQL 使用者,你只需要在 mysql 資料庫中的 user 表新增新使用者即可。
以下為新增使用者的的例項,使用者名稱為guest,密碼為guest123,並授權使用者可進行 SELECT, INSERT 和 UPDATE操作許可權:
root@host# mysql -u root -p Enter password:******* mysql> use mysql; Database changed mysql> INSERT INTO user (host, user, password, select_priv, insert_priv, update_priv) VALUES ('localhost', 'guest', PASSWORD('guest123'), 'Y', 'Y', 'Y'); Query OK, 1 row affected (0.20 sec) mysql> FLUSH PRIVILEGES; Query OK, 1 row affected (0.01 sec) mysql> SELECT host, user, password FROM user WHERE user = 'guest'; +-----------+---------+------------------+ | host | user | password | +-----------+---------+------------------+ | localhost | guest | 6f8c114b58f2ce9e | +-----------+---------+------------------+ 1 row in set (0.00 sec)
在新增使用者時,請注意使用MySQL提供的 PASSWORD() 函式來對密碼進行加密。 你可以在以上例項看到使用者密碼加密後為: 6f8c114b58f2ce9e.
注意:在 MySQL5.7 中 user 表的 password 已換成了authentication_string。
注意:password() 加密函式已經在 8.0.11 中移除了,可以使用 MD5() 函式代替。
注意:在注意需要執行 FLUSH PRIVILEGES 語句。 這個命令執行後會重新載入授權表。
如果你不使用該命令,你就無法使用新建立的使用者來連線mysql伺服器,除非你重啟mysql伺服器。
你可以在建立使用者時,為使用者指定許可權,在對應的許可權列中,在插入語句中設定為 'Y' 即可
Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv使用者許可權列表如下
另外一種新增使用者的方法為通過SQL的 GRANT 命令,以下命令會給指定資料庫TUTORIALS新增使用者 zara ,密碼為 zara123 。
root@host# mysql -u root -p Enter password:******* mysql> use mysql; Database changed mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP -> ON TUTORIALS.* -> TO 'zara'@'localhost' -> IDENTIFIED BY 'zara123';
以上命令會在mysql資料庫中的user表建立一條使用者資訊記錄。
注意: MySQL 的SQL語句以分號 (;) 作為結束標識。
/etc/my.cnf 檔案配置
一般情況下,你不需要修改該配置檔案,該檔案預設配置如下:
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock [mysql.server] user=mysql basedir=/var/lib [safe_mysqld] err-log=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
在配置檔案中,你可以指定不同的錯誤日誌檔案存放的目錄,一般你不需要改動這些配置。
管理MySQL的命令
以下列出了使用Mysql資料庫過程中常用的命令:
- USE 資料庫名 :
- 選擇要操作的Mysql資料庫,使用該命令後所有Mysql命令都只針對該資料庫。
mysql> use RUNOOB; Database changed
- SHOW DATABASES:
- 列出 MySQL 資料庫管理系統的資料庫列表。
mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | RUNOOB | | cdcol | | mysql | | onethink | | performance_schema | | phpmyadmin | | test | | wecenter | | wordpress | +--------------------+ 10 rows in set (0.02 sec)
- SHOW TABLES:
- 顯示指定資料庫的所有表,使用該命令前需要使用 use 命令來選擇要操作的資料庫。
mysql> use RUNOOB; Database changed mysql> SHOW TABLES; +------------------+ | Tables_in_runoob | +------------------+ | employee_tbl | | runoob_tbl | | tcount_tbl | +------------------+ 3 rows in set (0.00 sec)
- SHOW COLUMNS FROM 資料表:
- 顯示資料表的屬性,屬性型別,主鍵資訊 ,是否為 NULL,預設值等其他資訊。
mysql> SHOW COLUMNS FROM runoob_tbl; +-----------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------+--------------+------+-----+---------+-------+ | runoob_id | int(11) | NO | PRI | NULL | | | runoob_title | varchar(255) | YES | | NULL | | | runoob_author | varchar(255) | YES | | NULL | | | submission_date | date | YES | | NULL | | +-----------------+--------------+------+-----+---------+-------+ 4 rows in set (0.01 sec)
- SHOW INDEX FROM 資料表:
- 顯示資料表的詳細索引資訊,包括PRIMARY KEY(主鍵)。
mysql> SHOW INDEX FROM runoob_tbl; +------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | runoob_tbl | 0 | PRIMARY | 1 | runoob_id | A | 2 | NULL | NULL | | BTREE | | | +------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 1 row in set (0.00 sec)
- SHOW TABLE STATUS LIKE [FROM db_name] [LIKE 'pattern'] \G:
- 該命令將輸出Mysql資料庫管理系統的效能及統計資訊。
mysql> SHOW TABLE STATUS FROM RUNOOB; # 顯示資料庫 RUNOOB 中所有表的資訊 mysql> SHOW TABLE STATUS from RUNOOB LIKE 'runoob%'; # 表名以runoob開頭的表的資訊 mysql> SHOW TABLE STATUS from RUNOOB LIKE 'runoob%'\G; # 加上 \G,查詢結果按列列印
- PHP Mysqli函式格式如下:
mysqli_function(value,value,...);
- 以上格式中 function部分描述了mysql函式的功能,如
mysqli_connect($connect); mysqli_query($connect,"SQL 語句"); mysqli_fetch_array() mysqli_close()
- 以下例項展示了PHP呼叫mysql函式的語法:
# 例項 (MySQLi) <?php $retval = mysqli_function(value, [value,...]); if( !$retval ) { die ( "相關錯誤資訊" ); } # 其他 MySQL 或 PHP 語句 ?>
MySQL 連線
使用mysql二進位制方式連線
您可以使用MySQL二進位制方式進入到mysql命令提示符下來連線MySQL資料庫。
例項
- 以下是從命令列中連線mysql伺服器的簡單例項:
[root@host]# mysql -u root -p Enter password:******
- 在登入成功後會出現 mysql> 命令提示視窗,你可以在上面執行任何 SQL 語句。
- 以上命令執行後,登入成功輸出結果如下:
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2854760 to server version: 5.0.9 Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
- 在以上例項中,我們使用了root使用者登入到mysql伺服器,當然你也可以使用其他mysql使用者登入。
- 如果使用者許可權足夠,任何使用者都可以在mysql的命令提示視窗中進行SQL操作。
- 退出 mysql> 命令提示視窗可以使用 exit 命令,如下所示:
mysql> exit Bye
使用 PHP 指令碼連線 MySQL
- PHP 提供了 mysqli_connect() 函式來連線資料庫。
- 該函式有 6 個引數,在成功連結到 MySQL 後返回連線標識,失敗返回 FALSE 。
語法
mysqli_connect(host,username,password,dbname,port,socket);
引數說明:
引數 描述 host # 可選。規定主機名或 IP 地址。 username # 可選。規定 MySQL 使用者名稱。 password # 可選。規定 MySQL 密碼。 dbname # 可選。規定預設使用的資料庫。 port # 可選。規定嘗試連線到 MySQL 伺服器的埠號。 socket # 可選。規定 socket 或要使用的已命名 pipe。
- 你可以使用 PHP 的 mysqli_close() 函式來斷開與 MySQL 資料庫的連結。
- 該函式只有一個引數為 mysqli_connect() 函式建立連線成功後返回的 MySQL 連線識別符號。
語法
bool mysqli_close ( mysqli $link )
- 本函式關閉指定的連線標識所關聯的到 MySQL 伺服器的非持久連線。如果沒有指定 link_identifier則關閉上一個開啟的連線。
- 提示:通常不需要使用 mysqli_close(),因為已開啟的非持久連線會在指令碼執行完畢後自動關閉。
例項
你可以嘗試以下例項來連線到你的 MySQL 伺服器:
# 連線 MySQL <?php $dbhost = 'localhost'; // mysql伺服器主機地址
$dbuser = 'root'; // mysql使用者名稱
$dbpass = '123456'; // mysql使用者名稱密碼
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysqli_error());
}
echo '資料庫連線成功!';
mysqli_close($conn);
?>
MySQL 建立資料庫
- 我們可以在登陸 MySQL 服務後,使用 create 命令建立資料庫,語法如下:
CREATE DATABASE 資料庫名;
- 以下命令簡單的演示了建立資料庫的過程,資料名為 RUNOOB:
[root@host]# mysql -u root -p Enter password:****** # 登入後進入終端 mysql> create DATABASE RUNOOB;
使用 mysqladmin 建立資料庫
- 使用普通使用者,你可能需要特定的許可權來建立或者刪除 MySQL 資料庫。
- 所以我們這邊使用root使用者登入,root使用者擁有最高許可權,可以使用 mysql mysqladmin 命令來建立資料庫。
- 以下命令簡單的演示了建立資料庫的過程,資料名為 RUNOOB:
[root@host]# mysqladmin -u root -p create RUNOOB Enter password:******
以上命令執行成功後會建立 MySQL 資料庫 RUNOOB。
使用 PHP指令碼 建立資料庫
- PHP 使用 mysqli_query 函式來建立或者刪除 MySQL 資料庫。
- 該函式有兩個引數,在執行成功時返回 TRUE,否則返回 FALSE。
語法
mysqli_query(connection,query,resultmode);
引數 描述 connection # 必需。規定要使用的 MySQL 連線。 query # 必需,規定查詢字串。 resultmode
# 可選。一個常量。可以是下列值中的任意一個: MYSQLI_USE_RESULT(如果需要檢索大量資料,請使用這個) MYSQLI_STORE_RESULT(預設)
例項
-
以下例項演示了使用PHP來建立一個數據庫:
# 建立資料庫 <?php $dbhost = 'localhost'; // mysql伺服器主機地址 $dbuser = 'root'; // mysql使用者名稱 $dbpass = '123456'; // mysql使用者名稱密碼 $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('連線錯誤: ' . mysqli_error($conn)); } echo '連線成功<br />'; $sql = 'CREATE DATABASE RUNOOB'; $retval = mysqli_query($conn,$sql ); if(! $retval ) { die('建立資料庫失敗: ' . mysqli_error($conn)); } echo "資料庫 RUNOOB 建立成功\n"; mysqli_close($conn); ?>
執行成功後,返回如下結果:
如果資料庫已存在,執行後,返回如下結果:
MySQL 刪除資料庫
- 使用普通使用者登陸 MySQL 伺服器,你可能需要特定的許可權來建立或者刪除 MySQL 資料庫,所以我們這邊使用 root 使用者登入,root 使用者擁有最高許可權。
- 在刪除資料庫過程中,務必要十分謹慎,因為在執行刪除命令後,所有資料將會消失。
drop 命令刪除資料庫
drop 命令格式:
drop database <資料庫名>;
例如刪除名為 RUNOOB 的資料庫:
mysql> drop database RUNOOB;
使用 mysqladmin 刪除資料庫
- 你也可以使用 mysql mysqladmin 命令在終端來執行刪除命令。
- 以下例項刪除資料庫 RUNOOB(該資料庫在前一章節已建立):
[root@host]# mysqladmin -u root -p drop RUNOOB Enter password:******
- 執行以上刪除資料庫命令後,會出現一個提示框,來確認是否真的刪除資料庫:
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 'RUNOOB' database [y/N] y Database "RUNOOB" dropped
使用PHP指令碼刪除資料庫
- PHP使用 mysqli_query 函式來建立或者刪除 MySQL 資料庫。
- 該函式有兩個引數,在執行成功時返回 TRUE,否則返回 FALSE。
語法
mysqli_query(connection,query,resultmode);
引數 描述 connection # 必需。規定要使用的 MySQL 連線。 query # 必需,規定查詢字串。 resultmode # 可選。一個常量。可以是下列值中的任意一個: MYSQLI_USE_RESULT(如果需要檢索大量資料,請使用這個) MYSQLI_STORE_RESULT(預設)
例項
- 以下例項演示了使用PHP mysqli_query函式來刪除資料庫:
# 刪除資料庫 <?php $dbhost = 'localhost:3306'; // mysql伺服器主機地址 $dbuser = 'root'; // mysql使用者名稱 $dbpass = '123456'; // mysql使用者名稱密碼 $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('連線失敗: ' . mysqli_error($conn)); } echo '連線成功<br />'; $sql = 'DROP DATABASE RUNOOB'; $retval = mysqli_query( $conn, $sql ); if(! $retval ) { die('刪除資料庫失敗: ' . mysqli_error($conn)); } echo "資料庫 RUNOOB 刪除成功\n"; mysqli_close($conn); ?>
執行成功後,數結果為:
注意: 在使用PHP指令碼刪除資料庫時,不會出現確認是否刪除資訊,會直接刪除指定資料庫,所以你在刪除資料庫時要特別小心。
MySQL 選擇資料庫
- 在你連線到 MySQL 資料庫後,可能有多個可以操作的資料庫,所以你需要選擇你要操作的資料庫。
從命令提示視窗中選擇MySQL資料庫
- 在 mysql> 提示視窗中可以很簡單的選擇特定的資料庫。你可以使用SQL命令來選擇指定的資料庫。
例項
以下例項選取了資料庫 RUNOOB:
[root@host]# mysql -u root -p Enter password:****** mysql> use RUNOOB; Database changed mysql>
- 執行以上命令後,你就已經成功選擇了 RUNOOB 資料庫,在後續的操作中都會在 RUNOOB 資料庫中執行。
- 注意:所有的資料庫名,表名,表字段都是區分大小寫的。所以你在使用SQL命令時需要輸入正確的名稱。
使用PHP指令碼選擇MySQL資料庫
- PHP 提供了函式 mysqli_select_db 來選取一個數據庫。函式在執行成功後返回 TRUE ,否則返回 FALSE 。
語法
mysqli_select_db(connection,dbname);
引數 描述 connection # 必需。規定要使用的 MySQL 連線。 dbname # 必需,規定要使用的預設資料庫。
例項
- 以下例項展示瞭如何使用 mysqli_select_db 函式來選取一個數據庫:
# 選擇資料庫 <?php $dbhost = 'localhost:3306'; // mysql伺服器主機地址 $dbuser = 'root'; // mysql使用者名稱 $dbpass = '123456'; // mysql使用者名稱密碼 $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('連線失敗: ' . mysqli_error($conn)); } echo '連線成功'; mysqli_select_db($conn, 'RUNOOB' ); mysqli_close($conn); ?>
MySQL 資料型別
- MySQL中定義資料欄位的型別對你資料庫的優化是非常重要的。
- MySQL支援多種型別,大致可以分為三類:數值、日期/時間和字串(字元)型別。
數值型別
- MySQL支援所有標準SQL數值資料型別。
- 這些型別包括嚴格數值資料型別(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似數值資料型別(FLOAT、REAL和DOUBLE PRECISION)。
- 關鍵字INT是INTEGER的同義詞,關鍵字DEC是DECIMAL的同義詞。
- BIT資料型別儲存位欄位值,並且支援MyISAM、MEMORY、InnoDB和BDB表。
- 作為SQL標準的擴充套件,MySQL也支援整數型別TINYINT、MEDIUMINT和BIGINT。下面的表顯示了需要的每個整數型別的儲存和範圍。
型別 | 大小 | 範圍(有符號) | 範圍(無符號) | 用途 |
---|---|---|---|---|
TINYINT | 1 位元組 | (-128,127) | (0,255) | 小整數值 |
SMALLINT | 2 位元組 | (-32 768,32 767) | (0,65 535) | 大整數值 |
MEDIUMINT | 3 位元組 | (-8 388 608,8 388 607) | (0,16 777 215) | 大整數值 |
INT或INTEGER | 4 位元組 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整數值 |
BIGINT | 8 位元組 | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 極大整數值 |
FLOAT | 4 位元組 | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 單精度 浮點數值 |
DOUBLE | 8 位元組 | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 雙精度 浮點數值 |
DECIMAL | 對DECIMAL(M,D) ,如果M>D,為M+2否則為D+2 | 依賴於M和D的值 | 依賴於M和D的值 | 小數值 |
日期和時間型別
- 表示時間值的日期和時間型別為DATETIME、DATE、TIMESTAMP、TIME和YEAR。
- 每個時間型別有一個有效值範圍和一個"零"值,當指定不合法的MySQL不能表示的值時使用"零"值。
- TIMESTAMP型別有專有的自動更新特性,將在後面描述。
型別 | 大小 (位元組) | 範圍 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | 時間值或持續時間 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和時間值 |
TIMESTAMP | 4 |
1970-01-01 00:00:00/2038 結束時間是第 2147483647 秒,北京時間 2038-1-19 11:14:07,格林尼治時間 2038年1月19日 凌晨 03:14:07 |
YYYYMMDD HHMMSS | 混合日期和時間值,時間戳 |
字串型別
- 字串型別指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。該節描述了這些型別如何工作以及如何在查詢中使用這些型別。
型別 | 大小 | 用途 |
---|---|---|
CHAR | 0-255位元組 | 定長字串 |
VARCHAR | 0-65535 位元組 | 變長字串 |
TINYBLOB | 0-255位元組 | 不超過 255 個字元的二進位制字串 |
TINYTEXT | 0-255位元組 | 短文字字串 |
BLOB | 0-65 535位元組 | 二進位制形式的長文字資料 |
TEXT | 0-65 535位元組 | 長文字資料 |
MEDIUMBLOB | 0-16 777 215位元組 | 二進位制形式的中等長度文字資料 |
MEDIUMTEXT | 0-16 777 215位元組 | 中等長度文字資料 |
LONGBLOB | 0-4 294 967 295位元組 | 二進位制形式的極大文字資料 |
LONGTEXT | 0-4 294 967 295位元組 | 極大文字資料 |
- CHAR 和 VARCHAR 型別類似,但它們儲存和檢索的方式不同。它們的最大長度和是否尾部空格被保留等方面也不同。在儲存或檢索過程中不進行大小寫轉換。
- BINARY 和 VARBINARY 類似於 CHAR 和 VARCHAR,不同的是它們包含二進位制字串而不要非二進位制字串。也就是說,它們包含位元組字串而不是字元字串。這說明它們沒有字符集,並且排序和比較基於列值位元組的數值值。
- BLOB 是一個二進位制大物件,可以容納可變數量的資料。有 4 種 BLOB 型別:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它們區別在於可容納儲存範圍不同。
- 有 4 種 TEXT 型別:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。對應的這 4 種 BLOB 型別,可儲存的最大長度不同,可根據實際情況選擇。
以上內容是對 MySQL的資料庫簡單介紹和怎麼操作,後續還會對錶的操作進行更新,詳細請聽下回分解
&n