1、MySQL安裝
(1)安裝方式:mysql
優勢:安裝快,簡單正則表達式
缺點:定死了各個文件的地方,太死板sql
2 、二進制格式的程序包:展開至特定路徑,並通過簡單配置後便可使用(推薦),下實驗二數據庫
(2)mysql 的程序組成:centos
ip socket: 監聽在tcp 的3306 端口,支持遠程通訊
unix sock: 監聽在sock 文件上(/tmp/mysql.sock,/var/lib/mysql/mysql.sock) ,僅支持本機通訊
實驗一:yum源安裝MySQL和開啓設置服務
一、打開官方網站,上邊有各類版本的yum源,找到本身想要的版本設置yum源
https://downloads.mariadb.org/mariadb/repositories/
若上不了網,也可使用本身光盤裏的老版本
二、若不用本身的光盤老版本,要配置yum源,這裏我選了10.2的版本
vim /etc/yum.repos.d/along.repo
[mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.2/centos7-amd64 gpgcheck=0
如有其餘yum源,加一個enabled=0 先臨時關閉,yum clean all 清除緩存,注意:官方給的yum源安裝的Maria沒有安裝相依賴的包,還需本身安裝相依賴的包
查詢端口對應的進程信息 lsof -i :3306 或 netstat -tnlp | grep 3306
注意:開啓服務後,會多一個mysql的用戶,它的家目錄:存放數據庫,至關於數據庫中的每一個表
mysql用戶是安裝包時,執行了個腳本,建立了mysql用戶,提示咱們要是二進制安裝需建立用戶
rpm -q --scripts mariadb-server 能夠查看這個腳本
/usr/bin/mysql_secure_installation
實驗二:二進制安裝mariadb和開啓設置服務
注意:安裝以前要確保本身系統上沒有mariadb服務,有老版本能夠先卸掉,刪除mysql用戶
一、去官網下載本身想要的版本 http://mariadb.org
rz,tar xvf mariadb-10.2.8-linux-x86_64.tar.gz -C /usr/local/
(不像編譯安裝同樣,解包能夠放在任何目錄,這個二進制安裝必須指定在這個目錄)
二、cd /usr/local/ 發現mariadb的目錄名字不符合要求
ln -s mariadb-10.2.8-linux-x86_64/ mysql 建立軟鏈接也能夠更名
useradd -d /app/mysqldb -r -m -s /sbin/nologin mysql
ls support-files/ 包裏自帶的有配置文件,但地方不對,要放在/etc/mysql/my.cnf
cp support-files/my-huge.cnf /etc/mysql/my.cnf 咱們演示一個大的
[mysqld] datadir = /app/mysqldb //指定總目錄,必須的 innodb_file_per_table = on //讓每個表數據庫都是一個文件,方便管理 skip_name_resolve = on //忽略名字的反向解析,加快速度
cd /usr/local/mysql 必定要在這個目錄下執行腳本,由於腳本寫死了
./scripts/mysql_install_db --user=mysql --datadir=/app/mysqldb 執行腳本
完成後就會在/app/mysqldb/ 生成mysql系統數據庫
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld 設置服務在哪一個運行級別,在哪一個運行級別開啓服務
service mysqld start 失敗,看失敗緣由:缺乏日誌文件,日誌文件須有讀寫權限
touch /var/log/mariadb/mariadb.log
chown mysql /var/log/mariadb/mariadb.log
PATH=/usr/local/mysql/bin:$PATH
2、mysql基礎入門操做
-pPASSWORD :用戶的密碼; 建議使用-p, 默認爲空密碼
二、mysql中一些的名詞
三、SQL 語句:(4大類)
DDL: Data Defination Language 數據定義語言,修改表結構
CREATE(建立), DROP(刪除), ALTER(修改表結構)
DML: Data Manipulation Language 數據操做語言,修改表裏的數據
INSERT, DELETE, UPDATE(更新數據)
DQL :Data Query Language 數據的查詢語言
SELECT 用法多,很是靈活
DCL :Data Control Language 數據控制語言,受權限
GRANT, REVOKE(取消受權)
三、對數據庫的操做
查看某個數據庫中的表:show tables [from database_name] 若是已經在這個庫下,不用加from
數據庫有information_schema 庫,這個庫是隻讀庫,只有root特殊權限的用戶登陸才能看到,不能drop刪除
數據庫有#mysql50#.mozilla 相似的庫的處理方法,由於mysql家目錄下有個隱藏文件致使,不能刪除
CREATE DATABASE(數據庫) [IF NOT EXISTS](若是不存在,建立)'DB_NAME'; 建立成功一個,會生成一個表數據庫文件
CHARACTER SET 'character set name' 設置字符集,不推薦設置,不建議調
COLLATE 'collate name' 設置排序規則,不推薦設置
DROP DATABASE [IF EXISTS] 'DB_NAME'; 刪除成功,會刪除對應的表數據庫文件
查看支持全部字符集:SHOW CHARACTER SET; 不須要改
查看支持全部排序規則:SHOW COLLATION; 不須要改
四、獲取命令使用幫助:mysql>help create database;
例:create database testdb; 建立testdb數據庫
drop database testdb; 刪除testdb數據庫
4、建立刪除表
一、查看數據庫中全部的表:show tables from base_name;
① CREATE TABLE [IF NOT EXISTS] 'tbl_name' (col1 type1 修飾符, col2 type2 修飾符, ...)
• PRIMARY KEY(col1,...) ()複合主鍵
• ENGINE [=] engine_name (引擎設置,默認就好)
SHOW ENGINES; 查看支持的engine 引擎類型
• ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT |COMPACT} 行的格式,默認就好
② create table students3 select * [id,name] from students; 也能夠建立一個表,徹底複製另外一個表的結構[或本身選擇的結構];複製的表沒有約束,如主鍵
insert into students3 select * from students; 有students3這個表,徹底複製另外一個表的內容
獲取建立表的幫助:mysql> HELP CREATE TABLE;
三、刪除表: DROP TABLE [IF EXISTS] 'tbl_name';
例1:CREATE TABLE testdb.students (id int UNSIGNED NOT NULL PRIMARY KEY,name VARCHAR (20) NOT NULL,age tinyint UNSIGNED);
解釋:建立testdb庫中名爲students表;表有3列:id、name、age;id:數據類型int爲正、不爲空、設爲主鍵;name:數據類型VARCHAR (20)、不爲空;age:數據類型tinyint UNSIGNED)
例2:create table teachers (id int unsigned not null,name varchar(20) not null,age tinyint unsigned,primary key(id,name));
解釋:建立testdb庫中名爲teachers表;表的複合主鍵爲id和name列;其餘和例1同樣
例3:create table students3 select * from students; 建立students3複製students的內容
5、DDL語句:修改表結構,儘可能不要改表結構,不多用
一、查看錶結構:DESC [db_name.]tb_name;
字段:
添加字段:add
ADD col1 data_type [FIRST加到第一段的後邊|AFTER col_name某一段的後邊]
刪除字段:drop
修改字段:change (字段名), modify (字段屬性)
索引:
添加索引:add
刪除索引: drop
表選項:
修改:change
ALTER TABLE students3 RENAME s3; 改表名
ALTER TABLE s3 ADD phone varchar(11) AFTER name; 在s3表的name字段後加一個phone
ALTER TABLE s1 MODIFY phone int; 把phone的數據類型改成int
ALTER TABLE s1 CHANGE COLUMN phone mobile char(11); 把字段phone更名爲字段mobile,數據類型爲char(11)
ALTER TABLE s1 DROP COLUMN mobile; 刪除字段mobile
ALTER TABLE students ADD gender ENUM('m','f') 增長gender字段,爲枚舉類型,只能是m或f
ALETR TABLE students CHANGE id sid int UNSIGNED NOT NULL PRIMARY KEY; 把修改id字段爲sid,數據類型爲正int、非空、主鍵
ALTER TABLE students ADD UNIQUE KEY(name); 在name字段加惟一鍵
ALTER TABLE students ADD INDEX(age); 在age字段加索引
SHOW INDEXES FROM students; 查看索引信息
ALTER TABLE students DROP age;
6、DML語句,修改表內容
select * from tab_name [WHERE clause [LIMIT [m,]n];] 查看錶中的全部內容,Limit m,n 跳過m行,要n行
select id,name,... from tab_name; 查出指定的表中內容
select count(*) from tab_name; 查看錶中的記錄數量,count()是自帶的函數
INSERT [INTO] tbl_name[(col_name,...)] VALUES(val1,...),(...),... 下例2,3
分析:① tbl_name後不加(),默認按表結構的列;若加(),先後()內容要對應,順序能夠不按表結構,也能夠設null值,但最好不要,
② 選項不是數字,都要加'',例:name='along'
insert into tab_name1 select * from tab_name2; 批量導數據,下例4
UPDATE tbl_name SET col1=val1, col2=val2, ... [WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m,]n]; 下例5
分析:若不加where,直接把全部列都修改了,Limit m,n 跳過m行,要n行
DELETE FROM tbl_name [WHERE clause] [ORDERBY 'col_name' [DESC]];可先排序再指定刪除的行數,下例6
分析:若不加where,直接把全部列都刪除了
• TRUNCATE TABLE tbl_name; 清空表,快速清空,刪除的時候,不計日誌,謹慎使用
① select * from students limit 3,2;
② insert into students(id,name,age) values(1,'along',18); 添加1行信息
③ insert into students values(2,'xiaoming',19),(3,'xiaohong',20); 添加2,3行信息
④ insert s2 select * from students; 複製students表的信息到s2表中
⑤ update s2 set name='xiaohei',age=30 where id=2; 修改id=2行的內容
⑥ delete from s2 where id=3; 刪除s2表的id=3的行
7、DQL 語句,select
SELECT col1,col2,... FROM tbl_name [WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m,]n]; 查詢表內容信息,上例1
*: 全部字段
as :字段別名,若事先作好了表,想要把列的英語改爲中文,不用修改,能夠直接用別名,下例1
解釋:by後指定列,desc反向排序,反向也能夠-col_name
注意:若其中有空值,正向排序空值在第一行,反向排序空值在最後一行,能夠order by -col_name desc 即正向排序,有把空值放在最後一行,下例2
IS NULL ,IS NOT NULL 尋找空值,不能用=,只能用is,因此最好不要有null,很差管理
① select id as 學生編號,name 姓名,age 年齡 from students; 設置別名
② select * from students order by -age desc; 按年齡的列正向排序,null在最後
③ select * from students where age>=20; 顯示age>=20的
select * from students where age between 18 and 20; 顯示18-20的
select * from students where name like 'xiao%'; 顯示name是xiao開頭的
select * from students where name rlike 'ng$'; 顯示name是ng結尾的
select * from s2 where age is null; 顯示null值的行
select * from students where age in (18,20,30); 顯示age=18,20,30的行
8、DCL 數據控制語言,受權限
CREATE USER 'username'@'host' [IDENTIFIED BY 'password'];
例:create user 'along'@'192.168.30.%' identified by 'centos'; 添加along帳號在192.168.30這個網段,能夠輸centos密碼鏈接
SELECT User,Host,Password FROM mysql.user;
五、刪除用戶:DROP USER 'username'@'host';
示例:drop user'along'@'192.168.30.107';
① SET PASSWORD FOR 'user'@'host' = PASSWORD('password');
例:set password for 'along'@'192.168.30.%'=password('along');
② UPDATE user SET password=PASSWORD('magedu') WHERE User='root';
注意:至關於改了user的表,不推薦用,修改表的命令不會立刻生效,需執行FLUSH PRIVILEGES 刷新一下生效
③ /usr/local/mysql/bin/mysqladmin -u root –poldpassword password 'newpassword'
注意:僅建立的用戶,其所擁有的權限很小,因此咱們要進行受權
一、受權
GRANT priv_type,... ON [object_type] db_name.tb_name TO 'user'@'host' [IDENTIFIED BY 'password'] [WITHGRANT OPTION]; 受權並建立帳號
① priv_type: ALL [PRIVILEGES] 受權類型:
insert增,delete刪 , update改,select查,all全部權限
② db_name.tb_name: 對哪一個數據庫的哪一個表受權:
db_name.routine_name :指定庫的存儲過程和函數
例:grant all on test.* to 'along2'@'%' identified by 'centos'; 建立along2用戶,容許其在全部主機經過centos密碼登陸,對test庫的全部表有全部權限
REVOKE priv_type, ... ON db_name.tb_name FROM 'user'@'host
例:revoke delete on test.* from 'along2'@'%'; 回收along2@'%'用戶對test庫的全部表的刪除權限
① MariaDB 服務進程啓動時會讀取mysql 庫中全部受權表至內存
② GRANT 或REVOKE 等執行權限操做會保存於系統表中,MariaDB 的服務進程一般會自動重讀受權表,使之生效