什麼是數據庫?php
數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫。html
每一個數據庫都有一個或多個不一樣的 API 用於建立,訪問,管理,搜索和複製所保存的數據。node
咱們也能夠將數據存儲在文件中,可是在文件中讀寫數據速度相對較慢。mysql
因此,如今咱們使用關係型數據庫管理系統(RDBMS)來存儲和管理大數據量。所謂的關係型數據庫,是創建在關係模型基礎上的數據庫,藉助於集合代數等數學概念和方法來處理數據庫中的數據。linux
RDBMS 即關係數據庫管理系統(Relational Database Management System)的特色:web
RDBMS 術語sql
在咱們開始學習MySQL 數據庫前,讓咱們先了解下RDBMS的一些術語:數據庫
MySQL 爲關係型數據庫(Relational Database Management System), 這種所謂的"關係型"能夠理解爲"表格"的概念, 一個關係型數據庫由一個或數個表格組成, 如圖所示的幾個表格:編程
MySQL數據庫windows
MySQL 是一個關係型數據庫管理系統,由瑞典 MySQL AB 公司開發,目前屬於 Oracle 公司。MySQL 是一種關聯數據庫管理系統,關聯數據庫將數據保存在不一樣的表中,而不是將全部數據放在一個大倉庫內,這樣就增長了速度並提升了靈活性。
全部平臺的 MySQL 下載地址爲: MySQL 下載 。 挑選你須要的 MySQL Community Server 版本及對應的平臺。
注意:安裝過程咱們須要經過開啓管理員權限來安裝,不然會因爲權限不足致使沒法安裝。
Linux/UNIX 上安裝 MySQL
Linux平臺上推薦使用RPM包來安裝Mysql,MySQL AB提供瞭如下RPM包的下載地址:
# 安裝前,咱們能夠檢測系統是否自帶安裝 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 數據庫:
cd C:\web\mysql-8.0.11\bin
mysqld --initialize --console
... 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
mysql -u root -p
Enter password:
若密碼存在, 輸入密碼登陸, 不存在則直接按回車登陸。登陸成功後你將會看到 Welcome to the MySQL monitor... 的提示語。
而後命令提示符會一直以 mysq> 加一個閃爍的光標等待命令的輸入, 輸入 exit 或 quit 退出登陸。
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 數據庫中的 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 RUNOOB;
Database changed
mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | RUNOOB | | cdcol | | mysql | | onethink | | performance_schema | | phpmyadmin | | test | | wecenter | | wordpress | +--------------------+ 10 rows in set (0.02 sec)
mysql> use RUNOOB; Database changed mysql> SHOW TABLES; +------------------+ | Tables_in_runoob | +------------------+ | employee_tbl | | runoob_tbl | | tcount_tbl | +------------------+ 3 rows in set (0.00 sec)
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)
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)
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,查詢結果按列打印
mysqli_function(value,value,...);
mysqli_connect($connect); mysqli_query($connect,"SQL 語句"); mysqli_fetch_array() mysqli_close()
# 實例 (MySQLi) <?php $retval = mysqli_function(value, [value,...]); if( !$retval ) { die ( "相關錯誤信息" ); } # 其餘 MySQL 或 PHP 語句 ?>
使用mysql二進制方式鏈接
您可使用MySQL二進制方式進入到mysql命令提示符下來鏈接MySQL數據庫。
實例
[root@host]# mysql -u root -p Enter password:******
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.
mysql> exit
Bye
使用 PHP 腳本鏈接 MySQL
語法
mysqli_connect(host,username,password,dbname,port,socket);
參數說明:
參數 描述 host # 可選。規定主機名或 IP 地址。 username # 可選。規定 MySQL 用戶名。 password # 可選。規定 MySQL 密碼。 dbname # 可選。規定默認使用的數據庫。 port # 可選。規定嘗試鏈接到 MySQL 服務器的端口號。 socket # 可選。規定 socket 或要使用的已命名 pipe。
語法
bool mysqli_close ( mysqli $link )
實例
你能夠嘗試如下實例來鏈接到你的 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);
?>
CREATE DATABASE 數據庫名;
[root@host]# mysql -u root -p Enter password:****** # 登陸後進入終端 mysql> create DATABASE RUNOOB;
使用 mysqladmin 建立數據庫
[root@host]# mysqladmin -u root -p create RUNOOB Enter password:******
以上命令執行成功後會建立 MySQL 數據庫 RUNOOB。
使用 PHP腳本 建立數據庫
語法
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); ?>
執行成功後,返回以下結果:
若是數據庫已存在,執行後,返回以下結果:
drop 命令刪除數據庫
drop 命令格式:
drop database <數據庫名>;
例如刪除名爲 RUNOOB 的數據庫:
mysql> drop database RUNOOB;
使用 mysqladmin 刪除數據庫
[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腳本刪除數據庫
語法
mysqli_query(connection,query,resultmode);
參數 描述 connection # 必需。規定要使用的 MySQL 鏈接。 query # 必需,規定查詢字符串。 resultmode # 可選。一個常量。能夠是下列值中的任意一個: MYSQLI_USE_RESULT(若是須要檢索大量數據,請使用這個) MYSQLI_STORE_RESULT(默認)
實例
# 刪除數據庫 <?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數據庫
實例
如下實例選取了數據庫 RUNOOB:
[root@host]# mysql -u root -p Enter password:****** mysql> use RUNOOB; Database changed mysql>
使用PHP腳本選擇MySQL數據庫
語法
mysqli_select_db(connection,dbname);
參數 描述 connection # 必需。規定要使用的 MySQL 鏈接。 dbname # 必需,規定要使用的默認數據庫。
實例
# 選擇數據庫 <?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); ?>
數值類型
類型 | 大小 | 範圍(有符號) | 範圍(無符號) | 用途 |
---|---|---|---|---|
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的值 | 小數值 |
日期和時間類型
類型 | 大小 (字節) |
範圍 | 格式 | 用途 |
---|---|---|---|---|
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 | 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字節 | 極大文本數據 |
以上內容是對 MySQL的數據庫簡單介紹和怎麼操做,後續還會對錶的操做進行更新,詳細請聽下回分解