MYSQL:關系型資料庫
存儲引擎: 負責将邏輯層的概念轉化為實體層機制,在實體層完成實體機制。
支援事務:transaction
必須滿足的條件:ACID(一緻性, 持久性, 原子性, 隔離性)
鎖:并發通路
随機通路:資料在磁盤上是随機存儲的
安裝:
OS Vendor使用作業系統安裝:
以CentOS為例: mysql,
mysql-server:
mysql-devel:編譯安裝時需要
MySQL官方提供的安裝:官方網站:www.mysql.com
源碼編譯安裝
通用二進制格式程式包安裝
rpm包安裝
還可以通過鏡像下載下傳:http://mirrors.sohu.com/
MySQL的配置檔案:my.cnf,集中式多段配置檔案
MySQL伺服器程式:mysqld
用戶端程式:mysql, mysqldump, mysqladmin
建議在生産環境中将mysql安裝在邏輯卷上,這樣友善以後的管理,空間不夠的話可以增大空間。
datadir: /var/lib/mysql/
datadir: /usr/local/mysql/data/
mysqld: mysql,:mysql
以mysql使用者的身份操作,屬主和屬組都為mysql,并且對所操作的目錄有讀和寫的權限。
安裝操作
1:建立邏輯卷并挂載
建立磁盤分區
#fdisk /dev/sda
建立實體分區
#pvcreate /dev/sda{3,5}
建立卷組為myvg
#vgcreate myvg /dev/sda{3,5}
建立邏輯卷mydata
#lvcreate -L 20G -n mydata myvg
對其進行格式化
#mke2fs -t ext4 -L MYDATA -b 2048 /dev/myvg/mydata
進行挂載
#mkdir /mydata
#mount -a
要使得能夠開機自動挂載,需要編輯配置檔案/etc/fstab
<a target="_blank" href="http://blog.51cto.com/attachment/201308/104740568.png"></a>
在/mydata下建立data目錄
#mkdir /mydata/data
2:解壓安裝
添加系統使用者mysql
#useradd -r mysql
修改屬主和屬組
#chown -R mysql:mysql /mydata/data
下載下傳的檔案解壓到/usr/local/
#tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz -C /usr/local
在這裡,我們還有檢視是否安裝啟動别的mysql版本的伺服器,如果有,那麼我們需要将其關閉
#ss -tanl其中3306端口需要是關閉狀态
在/usr/local/下
#ln -sv mysql-5.5.33-linux2.6-x86_64 mysql
#chown -R root:mysql /usr/local/mysql/*
#cd mysql/support-files有樣例,我們可以根據自己的需要選擇
将選擇的檔案複制一份到/etc/目錄下并修改檔案名為my.cnf
#cp my-large.cnf /etc/my.cnf
3:修改配置檔案
# vim /etc/my.cnf
找到相關設定進行修改操作
<a target="_blank" href="http://blog.51cto.com/attachment/201308/110426436.png"></a>
thread_concurrency = 4并發核心數, 如果實體核心為2,這裡就可以填寫4
在下面添加datadir = /mydata/data
添加
innodb_file_per_table = 1 每表一個表空間
服務腳本
#cp mysql.server /etc/rc.d/init.d/mysqld
添加mysql服務
#chkconfig --add mysqld
啟動mysql
#service mysqld start
這時候顯示啟動失敗了,分析出來我們要先初始化,因而我們安裝mysql時要注意,第一次安裝啟動時要進行初始化,對所出現的問題我們進行處理
先将/mydata/data/下的所有檔案删除掉
#rm -rf /mydata/data/*
進行初始化
#cd /usr/local/mysql/
#scripts/mysql_install_db --user=mysql --datadir=/mydata/data/初始化成功
啟動服務
這時候還不能連接配接用戶端
# vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
執行腳本
# . /etc/profile.d/mysql.sh
#mysql就可以進入了
4:因為我們的安裝不在标準路徑下,是以還要導出相關檔案
導出幫助檔案
#vim /etc/man.config
MANPATH /usr/local/mysql/man
導出頭檔案
#ln -sv /usr/local/mysql/include /usr/local/mysql
導出庫檔案
#vim /etc/ld.so.conf.d/mysql.conf
/usr/local/mysql/lib
至此我們的mysql配置完成。
mysql> show [global|session] variables; 顯示伺服器參數變量
有些變量的值可以修改,能夠改變mysql的工作特性
有些可以動态調整,即刻生效;
另外一些隻能修改配置檔案後,重新開機生效;
mysql> show [global|session] status; 顯示伺服器狀态變量,記錄了目前包括過去的時間内mysql的運作統計資料
MySQL使用者名:USERNAME@HOST
mysql用戶端執行指令:
用戶端指令:不需語句結束符
mysql> help
伺服器端指令:特指SQL語句, 必須有語句結束符,預設為分号;
mysql> help COMMAND
使用者管理:
建立使用者:
CREATE USER username@host [IDENTIFIED BY 'password'];
使用者或主機可以使用通配符:
%:比對任意長度的任意字元;
_: 比對任意單個字元;
例如:CREATE USER ‘wpuser’@‘172.16.%.%’IDENTIFIED BY 'wppass'
允許172.16.網段的主機連接配接 建立wpuser使用者 密碼為wppass
使用者授權:GRANT ALL PRIVILEGES ON dbname.tablename TO username@host [IDENTIFIED BY 'password'];
dbname.tablename dbname表示庫名
tablename表示表名
修改使用者密碼:
1、mysql> SET PASSWORD FOR username@host=PASSWORD('password');
2、# mysqladmin -uusername password 'password' -p
-p 後面跟以前的密碼
删除使用者:DROP USER username@host;
授權
GRANT ALL ON *.* TO 'root'@'172.16.%.%' IDENTIFIED BY 'mypass';有特殊符号需要用引号引起來
mysql>SELECT VERSION(); 顯示版本号
mysql>SHOW DATABASES; 顯示資料庫
mysql>SELECT user,host,password FROM user; 從user表查詢user,host,password 相關資訊
mysql>FLUSH PRIVILEGES; 重讀授權表
加密碼:
mysql>SET PASSWORD FOR ‘root‘@host=PASSWORD('password');
建立表:
mysql>CREATE TABLE tb_name (col1 defination, col2 defination, ..., key defination);
删除表:
mysql>DROP TABLE tb_name;
INSERT INTO :插入内容
SELECT 字段 FROM 表 WHERE ;
字段:
col1, col2
*
col1 AS NEWNAME, col2,
比較運算:>, <, >=, <=, =, !=
NULL: IS NULL, IS NOT NULL
LIKE :
%: 任意長度的任意字元
_:任意單個字元
IN (LIST)
RLIKE: 正規表達式書寫模式
UPDATE 表名 SET 字段名=值 WHERE;
DELETE FROM 表名 WHERE ;
mysql>
quit, \q 退出
delimiter, \d 變換語句結束符,定義使用的結束符
go, \g 不知道結束符而把語句送到伺服器端去執行
use, \u 設定預設資料庫
ego, \G 不知道結束符而把語句送到伺服器端去執行,并且将每一行的結果縱向顯示
system, \! 不退出目前mysql用戶端程式而執行系統指令
status, \s 顯示目前mysql伺服器的狀态資訊
mysql:執行方式有兩種
互動式方式:
-h, --host= 指定要連接配接的遠端主機
-u, --user= 指定使用者名
-p, --password= 密碼
-D db_name, --database= 可以直接将某個指定的資料庫設定為資料庫
-e 'SQL_Statement;' 不會連接配接到主機,而是将指令送到對方主機後直接将結果取回來
批處理模式:(使用sql腳本)
mysql OPTIONS < script.sql
mysql> source /path/to/script.sql
#vim test.sql
create database wpdb;
Grant all wpdb.* ‘wpuser’@’172.16.%.%’;
Grant all wpdb.* ‘wpuser’@’localhost’;
#mysql -uroot -pmypass < test.sql
mysqld, mysql: /etc/my.cnf配置檔案
/etc/my.cnf, /etc/mysql/my.cnf, $MYSQL_BASE/my.cnf, ~/.my.cnf
#vim .my.cnf
[client]
user=root
host=localhost
password=mypass
#chmod 600 .my.cnf 修改權限對目前使用者有效
這樣本機使用者就不用每次都指定使用者名、主機名、密碼了,而其他使用者不會有權限,
顯示所支援的所有字元集:
mysql> SHOW CHARACTER SET;
顯示所有字元集的排序規則:
mysql> SHOW COLLATION;
關系型資料庫:
Constraint:
主鍵:primary key
不能為空,惟一;
惟一鍵:uniq key
可以為空,惟一;
外鍵:foreign key
引用性限制
檢查性限制:
0<age<150
MySQL基礎操作練習(所屬的庫叫做testdb):
建立如下表(包括結構和内容):
ID Name Age Gender Course
1 Ling Huchong 24 Male Huashan
2 Huang Rong 19 Female Emen
3 Lu Wushaung 18 Female Hengshan
4 Zhu Ziliu 52 Male Kongdong
5 Chen Jialuo 22 Male Shaolin
建立庫:
mysql>create database testdb
啟用testdb庫
mysql>use testdb
建立表tb1
mysql>CREATE TABLE tb1 (ID TINYINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, Name CHAR(30) NOT NULL UNIQUE KEY, Age TINYINT UNSIGNED, Gender CHAR(1) DEFAULT 'M', Course VARCHAR(50) NOT NULL);
檢視資料庫
mysql> show databases;
DESCRIPTION tb1 檢視有幾個位元組
插入内容
mysql> insert into tb1 values (1,'Ling Huchong',24,'Male','Huashan');
mysql> insert into tb1 values (2,'Huang Rong',19,'Female','Emen');
mysql> insert into tb1 values (3,'Lu Wushaung',18,'Female','Hengshan');
mysql> insert into tb1 values (4,'Zhu Ziliu',52,'Male','Kongdong');
mysql> insert into tb1 values (5,'Chen Jialuo',22,'Male','Shaolin');
至此tb1表所有内容都存在了,可以檢視一下:
<a target="_blank" href="http://blog.51cto.com/attachment/201308/135521557.png"></a>
2、完成如下操作
(1)找出性别為女性的所有人;
mysql> SELECT name FROM tb1 WHERE Gender='Female';
(2)找出年齡大于20的所有人;
mysql> SELECT name FROM tb1 WHERE Age>20;
(3)修改Zhu Ziliu的Course為Wudang;
mysql> UPDATE tb1 SET Course='Wudang' WHERE name='Zhu Ziliu';
(4)删除年齡小于等于19歲的所有人;
mysql> DELETE FROM tb1 WHERE Age<=19;
(5)建立此表及所屬的庫;
(6)授權給testuser對testdb庫有所有通路權限;
mysql> GRANT ALL ON testdb.* TO 'testuser'@'%';
mysql>DROP TABLE tb1;删除表tb1
本文轉自 宋鵬超 51CTO部落格,原文連結:http://blog.51cto.com/qidian510/1282064,如需轉載請自行聯系原作者