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
在/mydata下創建data目錄
#mkdir/mydata/data
2:解壓安裝
添加系統用戶mysql
#useradd -r mysql
修改屬主和屬組
#chown -R mysql:mysql /mydata/data
下載的文件解壓到/usr/local/
#tar xfmysql-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
找到相關設置進行修改操作
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/初始化成功
啟動服務
#service mysqld start
這時候還不能連接客戶端
# 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;
Create user‘wpuser’@’172.16.%.%’identified by‘wppass’;
Create user‘wpuser’@’localhost’identified by‘wppass’;
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
MySQL基礎操作練習(所屬的庫叫做testdb):
新建如下表(包括結構和內容):
ID ? ?Name ? ? ? ? ?Age ? ? Gender ? ? Course
1 ? ? Ling Huchong ? 24 ? ? ?Male ? ? ? Huashan
2 ? ? Huang Rong ? ?19 ? ? ?FemaleEmen
3 ? ? Lu Wushaung ? 18 ? ? ?FemaleHengshan
4 ? ? Zhu Ziliu52 ? ? ?MaleKongdong
5 ? ? Chen Jialuo22 ? ? ?MaleShaolin
創建庫:
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 TINYINTUNSIGNED, 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表所有內容都存在了,可以查看一下:
2、完成如下操作
(1)找出性別為女性的所有人;
mysql> SELECT name FROM tb1 WHERE Gender='Female';
(2)找出年齡大于20的所有人;
mysql> SELECT name FROMtb1WHERE Age>20;
(3)修改Zhu Ziliu的Course為Wudang;
mysql> UPDATEtb1SET Course='Wudang' WHERE name='Zhu Ziliu';
(4)刪除年齡小于等于19歲的所有人;
mysql> DELETE FROMtb1WHERE Age<=19;
(5)創建此表及所屬的庫;
(6)授權給testuser對testdb庫有所有訪問權限;
mysql> GRANT ALL ON testdb.* TO 'testuser'@'%';
mysql>DROP TABLE tb1;刪除表tb1