Mysql資料庫的二進位安裝和基礎入門操作

来源:http://www.cnblogs.com/along21/archive/2017/10/14/7668023.html
-Advertisement-
Play Games

前言:Mysql資料庫,知識非常的多,要想學精學通這塊知識,估計也要花費和學linux一樣的精力和時間。小編也是只會些毛皮,給大家分享一下~ 一、MySQL安裝 (1)安裝方式: 1 、程式包yum安裝,下實驗一 優點:安裝快,簡單 缺點:定死了各個文件的地方,太死板 2 、二進位格式的程式包:展開 ...


前言:Mysql資料庫,知識非常的多,要想學精學通這塊知識,估計也要花費和學linux一樣的精力和時間。小編也是只會些毛皮,給大家分享一下~

一、MySQL安裝

(1)安裝方式:

1 、程式包yum安裝,下實驗一

  優點:安裝快,簡單

  缺點:定死了各個文件的地方,太死板

2 、二進位格式的程式包:展開至特定路徑,並經過簡單配置後即可使用(推薦),下實驗二

3 、源代碼:編譯安裝,太麻煩

 

(2)mysql 的程式組成:

Client:

  mysql :CLI 互動式客戶端程式

  mysqldump, mysqladmin...

Server:

  mysqld_safe mysql的備份

  mysqld

  mysqld_multi :多實例

伺服器監聽的兩種socket 地址:

  ip socket: 監聽在tcp 的3306 埠,支持遠程通信

  unix sock: 監聽在sock 文件上(/tmp/mysql.sock,/var/lib/mysql/mysql.sock) ,僅支持本機通信

 

實驗一:yum源安裝MySQL和開啟設置服務

1、打開官方網站,上邊有各種版本的yum源,找到自己想要的版本設置yum源

https://downloads.mariadb.org/mariadb/repositories/

若上不了網,也可以使用自己光碟里的老版本

 

2、若不用自己的光碟老版本,要配置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沒有安裝相依賴的包,還需自己安裝相依賴的包

 

3、yum安裝和開啟服務

這裡,就直接安裝光碟里的老版本了

yum -y install mariadb-server

systemctl start mariadb 開啟服務

  ss -nutl 打開了3306的tcp埠

  查詢埠對應的進程信息 lsof -i :3306 或 netstat -tnlp | grep 3306

註意:開啟服務後,會多一個mysql的用戶,它的家目錄:存放資料庫,相當於資料庫中的每個表

mysql用戶是安裝包時,執行了個腳本,創建了mysql用戶,提示我們要是二進位安裝需創建用戶

rpm -q --scripts mariadb-server 可以查看這個腳本

 

 

4、mysql 運行

發現是root,能查能刪,很不安全

還能mysql xxx 匿名登錄

 

5、運行安全腳本

/usr/bin/mysql_secure_installation

 

實驗二:二進位安裝mariadb和開啟設置服務

註意:安裝之前要確保自己系統上沒有mariadb服務,有老版本可以先卸掉,刪除mysql用戶

1、去官網下載自己想要的版本 http://mariadb.org

rpm -qi mariadb 可以查詢官網

上傳,解包解壓縮

rz,tar xvf mariadb-10.2.8-linux-x86_64.tar.gz -C /usr/local/

(不像編譯安裝一樣,解包可以放在任何目錄,這個二進位安裝必須指定在這個目錄)

 

2、cd /usr/local/ 發現mariadb的目錄名字不符合要求

ln -s mariadb-10.2.8-linux-x86_64/ mysql 創建軟連接也可以改名

 

3、創建mysql用戶

useradd -d /app/mysqldb -r -m -s /sbin/nologin mysql

 

4、創建修改配置文件

ls support-files/ 包里自帶的有配置文件,但地方不對,要放在/etc/mysql/my.cnf

mkdir /etc/mysql

cp support-files/my-huge.cnf /etc/mysql/my.cnf 我們演示一個大的

vim /etc/mysql/my.cnf 修改配置文件

[mysqld]

datadir = /app/mysqldb //指定總目錄,必須的

innodb_file_per_table = on //讓每一個表資料庫都是一個文件,方便管理

skip_name_resolve = on //忽略名字的反向解析,加快速度

 

5、執行腳本,創建系統資料庫

cd /usr/local/mysql 一定要在這個目錄下執行腳本,因為腳本寫死了

./scripts/mysql_install_db --user=mysql --datadir=/app/mysqldb 執行腳本

完成後就會在/app/mysqldb/ 生成mysql系統資料庫

 

6、把服務腳本複製過去

cp support-files/mysql.server /etc/init.d/mysqld

chkconfig --add mysqld 設置服務在哪個運行級別,在哪個運行級別開啟服務

chkconfig --list mysqld

service mysqld start 失敗,看失敗原因:缺少日誌文件,日誌文件須有讀寫許可權

 

7、創建配置文件

mkdir /var/log/mariadb/

touch /var/log/mariadb/mariadb.log

chown mysql /var/log/mariadb/mariadb.log

service mysqld start 開啟成功

設置PATH:

vim /etc/profile.d/mysql.sh

PATH=/usr/local/mysql/bin:$PATH

. /etc/profile.d/mysql.sh

 

8、運行安全初始化腳本,同上實驗

mysql_secure_installation

 

 

二、mysql基礎入門操作

1、命令行互動式命令:mysql

mysql 命令的選項:

  -uUSERNAME: 用戶名;預設為root

  -hHOST: 伺服器主機; 預設為localhost

  -pPASSWORD :用戶的密碼; 建議使用-p, 預設為空密碼

 

2、mysql中一些的名詞

資料庫:database

表:table

索引:index

引擎:engines

列、欄位:column

\G:豎著顯示

 

3、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(取消授權)

 

、對資料庫的操作

1、查看資料庫:show databases;

查看某個資料庫中的表:show tables [from database_name] 如果已經在這個庫下,不用加from

資料庫有information_schema 庫,這個庫是只讀庫,只有root特殊許可權的用戶登錄才能看到,不能drop刪除

資料庫有#mysql50#.mozilla 類似的庫的處理方法,因為mysql家目錄下有個隱藏文件導致,不能刪除

把這些隱藏文件移走就好了

 

2、創建資料庫:

CREATE DATABASE(資料庫) [IF NOT EXISTS](如果不存在,創建)'DB_NAME'; 創建成功一個,會生成一個表資料庫文件

  CHARACTER SET 'character set name' 設置字元集,不推薦設置,不建議調

  COLLATE 'collate name' 設置排序規則,不推薦設置

註意:資料庫對象的命名規則

必須以字母開頭

可包括數字和三個特殊字元(# _ $)

不要使用MySQL 的保留字

同一Schema(資料庫) 下的對象不能同名

 

3、刪除資料庫

DROP DATABASE [IF EXISTS] 'DB_NAME'; 刪除成功,會刪除對應的表資料庫文件

查看支持所有字元集:SHOW CHARACTER SET; 不需要改

查看支持所有排序規則:SHOW COLLATION; 不需要改

4、獲取命令使用幫助:mysql>help create database;

 

例:create database testdb;  創建testdb資料庫

drop database testdb;  刪除testdb資料庫

 

四、創建刪除表

1、查看資料庫中所有的表:show tables from base_name;

 查看表結構desc tbl_name;

 

2、創建表,依照範式

CREATE TABLE [IF NOT EXISTS] 'tbl_name' (col1 type1 修飾符, col2 type2 修飾符, ...)

欄位信息:

• col type1 指定類型

• PRIMARY KEY(col1,...) ()複合主鍵

• INDEX(col1, ...) 索引

• UNIQUE 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;

 

3、刪除表: DROP TABLE [IF EXISTS] 'tbl_name';

 

4、例子:

例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的內容

 

五、DDL語句:修改表結構,儘量不要改表結構,很少用

1、查看表結構:DESC [db_name.]tb_name;

2、修改表結構 alter

ALTER TABLE 'tbl_name'

  欄位:

    添加欄位:add

      ADD col1 data_type [FIRST加到第一段的後邊|AFTER col_name某一段的後邊]

    刪除欄位:drop

    修改欄位:change (欄位名), modify (欄位屬性)

    索引:

      添加索引:add

      刪除索引: drop

    表選項:

      修改:change

查看幫助:Help ALTER TABLE

 

3、例子:

Help ALTER TABLE 查看幫助

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欄位加索引

DESC students; 查看這個表

SHOW INDEXES FROM students; 查看索引信息

ALTER TABLE students DROP age;

 

六、DML語句,修改表內容

1、查看

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()是自帶的函數

 

2、修改表內容:

INSERT 添加,插入,下有例子

  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: 更新,修改表內容,下有例子

  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:刪除表內容,下有例子

  DELETE FROM tbl_name [WHERE clause] [ORDERBY 'col_name' [DESC]];可先排序再指定刪除的行數,下例6

  分析:若不加where,直接把所有列都刪除了

TRUNCATE TABLE tbl_name; 清空表,快速清空,刪除的時候,不計日誌,謹慎使用

 

3、例子

① 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的行

 

七、DQL 語句,select

DQL :SELECT,用法很多

SELECT col1,col2,... FROM tbl_name [WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m,]n]; 查詢表內容信息,上例1

1、欄位表示法:

  *: 所有欄位

  as :欄位別名,若事先做好了表,想要把列的英語改成中文,不用修改,可以直接用別名,下例1

 

2、排序:order by col_name [desc]

  解釋:by後指定列,desc反向排序,反向也可以-col_name

  註意:若其中有空值,正向排序空值在第一行,反向排序空值在最後一行,可以order by -col_name desc 即正向排序,有把空值放在最後一行,下例2

 

3、WHERE clause:where 後的選項

操作符:下例3

  >, <, >=, <=, ==, !=

  BETWEEN ... AND ...

  LIKE:模糊匹配,

    % :任意長度的任意字元

    _ :任意單個字元;

  RLIKE :正則表達式模式匹配

  IS NULL ,IS NOT NULL 尋找空值,不能用=,只能用is,所以最好不要有null,不好管理

  IN (val1,val2,…) 離散值顯示

條件邏輯操作:

  and ,or ,not

 

例子:

① 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的行

 

 

八、DCL 數據控制語言,授許可權

(1)用戶賬號

1、用戶賬號:'user'@'host'

  user: 用戶名

  host: 允許用戶通過哪些主機遠程連接mysqld 服務

    IP 、網路地址、主機名、通配符(% 和_)

2、創建用戶:

CREATE USER 'username'@'host' [IDENTIFIED BY 'password'];

例:create user 'along'@'192.168.30.%' identified by 'centos'; 添加along賬號在192.168.30這個網段,可以輸centos密碼連接

註意:這裡的賬號和linux的用戶不是一個東西

 

3、查看當前等登錄的用戶:

SELECT user();

4、查看已經添加的用戶:

SELECT User,Host,Password FROM mysql.user;

 

5、刪除用戶:DROP USER 'username'@'host';

示例:drop user'along'@'192.168.30.107';

 

6、更改口令:多用第一種

SET PASSWORD FOR 'user'@'host' = PASSWORD('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'

註意:僅創建的用戶,其所擁有的許可權很小,所以我們要進行授權

 

(2)DCL,授權,回收許可權

1、授權

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.*: 指定庫的所有表

  db_name.tb_name: 指定庫的指定表

  db_name.routine_name :指定庫的存儲過程和函數

例:grant all on test.* to 'along2'@'%' identified by 'centos'; 創建along2用戶,允許其在所有主機通過centos密碼登錄,對test庫的所有表有所有許可權

 

2、回收授權:

REVOKE priv_type, ... ON db_name.tb_name FROM 'user'@'host

例:revoke delete on test.* from 'along2'@'%'; 回收along2@'%'用戶對test庫的所有表的刪除許可權

 

註意:

① MariaDB 服務進程啟動時會讀取mysql 庫中所有授權表至記憶體

② GRANT 或REVOKE 等執行許可權操作會保存於系統表中,MariaDB 的服務進程通常會自動重讀授權表,使之生效

③ 對於不能夠或不能及時重讀授權表的命令,可手動讓MariaDB 的服務進程重讀授權表:

mysql> FLUSH PRIVILEGES;

 

好了,關於mysql,小編也只是剛接觸,感覺自己還在門外,希望大家一起進步!!!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天我將要講的是fragment間的數據是如何進行傳遞的。這裡我將舉個簡單的例子。 首先要有個MainActivity,它托管了MainFragment,而MainFragment又托管了DatePickerFragment。其間用到了簡單的模型Crime,它只有Date類型的mDate一個屬性。例 ...
  • 傳統font大小適配可能會根據屏幕寬度與iphone5或iphone6寬度的一個比例來適配。但如果有這樣一個需求,在顯示@2x圖片的手機上顯示一種字體,在顯示@3x圖片的手機上顯示另一個固定大小的字體。 所以這裡的重點是要區分手機屏幕顯示圖片是@2x型還是@3x型的。 CGFloat scale = ...
  • mysql中用於表示時間的三種類型date, datetime, timestamp (如果算上int的話,四種) 比較容易混淆,下麵就比較一下這三種類型的異同 相同點 都可以用於表示時間都呈字元串顯示 不同點 1.顧名思義,date只表示'YYYY-MM-DD'形式的日期,datetime表示'Y ...
  • 一、視圖 什麼是視圖【View】 (1)視圖是一種虛表 (2)視圖建立在已有表的基礎上, 視圖賴以建立的這些表稱為基表(3)向視圖提供數據內容的語句為 SELECT 語句,可以將視圖理解為存儲起來的 SELECT 語句(4)視圖向用戶提供基表數據的另一種表現形式(5)視圖沒有存儲真正的數據,真正的數 ...
  • 一、事務 回顧什麼是事務?一個不可分割的子操作形成一個整體,該整體要麼全部執行成功,要麼全部執行失敗。例如:轉帳回顧為什麼要用事務?如果不用事務的話,為轉帳為例,可能出現一個用戶錢增加了,另一個用戶錢不變回顧編程中,事務可用於哪一層?事務放在業務層回顧jdbc編程中,如何使用事務?connectio ...
  • 昨天整理了關於Oracle的查詢的相關知識,今天將之前的學習筆記整理了一下,準備介紹一下關於Oracle增刪改的相關知識。之後博主也會將之前學習的一些學習的基礎的筆記作為博文發出來,希望讀者能夠多多指正,畢竟之前的學習肯定存在了些許的不足之處。整理筆記已經按照分類分類完成了。 一、回顧SQL92/9 ...
  • ORA-12170: TNS:Connect timeout occurred ORA-12514: TNS: 監聽程式當前無法識別連接描述符中請求的服務 ORA-12705: Cannot access NLS data files or invalid environment s... ...
  • 本文版權歸博客園和作者吳雙本人共同所有 轉載和爬蟲請註明原文地址 www.cnblogs.com/tdws。 本文參考和學習資料 《ES權威指南》 一.基本概念 存儲數據到ES中的行為叫做索引,每個索引可以包含多個類型,這些不同的類型存儲著多個文檔,每個文檔有多個屬性。 索引 index/index ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...