背景 Mysql是一個關係型資料庫,由瑞典Mysql AB開發,目前屬於Oracle旗下的產品。Mysql是目前最流行的關係型資料庫管理系統之一,在WEB方面,Mysql是最好的RDBMS(Relational Database Management System)。Mysql是一種關係資料庫管理系 ...
背景
Mysql是一個關係型資料庫,由瑞典Mysql AB開發,目前屬於Oracle旗下的產品。Mysql是目前最流行的關係型資料庫管理系統之一,在WEB方面,Mysql是最好的RDBMS(Relational Database Management System)。Mysql是一種關係資料庫管理系統,關係資料庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度並提高了靈活性。
其他類似軟體:
關係型資料庫:sqllite、db2、Oracle、access、sql sever、Mysql
非關係型資料庫:MongoDB、redis
安裝
在Windows系統上,我們下載完Mysql後安裝到任意目錄下,可以看到裡面有一個bin文件,打開
裡面有mysql.exe和mysqld.exe兩個執行檔,它們分別是客戶端和服務端
啟用
在取得bin目錄路徑後,初始化服務端
輸入上面語句後我們會發現原目錄下會多出一個data的文件夾
然後再啟動服務端
之後我們再打開一個新的command,實現客戶端連接到服務端
這裡預設的用戶名是root密碼為空,執行時按回車跳過就好
使用show databases;去看data文件下的文件:
也可以創建一個新的db文件:
添加環境變數
如果覺得每次執行時都要加上一長串的路徑很麻煩我們可以直接在系統上添加環境變數
獲取bin的路徑:F:\mysql-8.0.11-winx64\mysql-8.0.11-winx64\bin
然後右鍵電腦->高級系統設置->高級->環境變數->找到系統變數的Path在後面加上;路徑
這樣我們在執行服務端和客戶端就不用再加上路徑了
服務端:
客戶端:
製作Windows上的Mysql服務
這樣我們就可以在服務的進程上看到了Mysql服務,我們就可以點擊左上的啟動此服務
或者我們輸入下麵語句也可以啟動服務
如果要停止Mysql服務
移除Mysql服務
創建用戶及授權
首先在data文件夾下的文件夾(比如db1)我們可以稱為資料庫,而db1文件夾下的文件(Excel文件),我們稱為表,在這個表中的一行行排列的就是數據行
預設的用戶是root,那麼這個root被放在哪裡呢?
Mysql在一個用戶登錄的時候會在user中查看裡面是否有這個用戶的信息
那如何創建新的用戶?
語法:
create user 'username'@'IP addres' identified by 'password'; #限制只能在這台機器上登錄 create user 'username'@'192.168.43.%' identified by 'password'; #%表示在最後一位數沒有要求,只需要考慮前三尾數相同即可 create user 'username'@'%' identified by 'password'; #表示所有機器都可以登入
授權用戶
grant 許可權名 on db1.t1 to 'username'@'%'; #只能讓該用戶訪問db1文件夾下的表t1 grant 許可權名 on db1.* to 'username'@'%'; #能讓該用戶訪問db1文件夾下的所有表 grant 許可權名 on *.* to 'username'@'%'; #表示可以讓該用戶訪問所有資料庫的內容
許可權名稱:
all privileges 除grant外的所有許可權 select 僅查許可權 select,insert 查和插入許可權 usage 無訪問許可權 alter 使用alter table alter routine 使用alter procedure和drop procedure create 使用create table create routine 使用create procedure create temporary tables 使用create temporary tables create user 使用create user、drop user、rename user和revoke all privileges create view 使用create view delete 使用delete drop 使用drop table execute 使用call和存儲過程 file 使用select into outfile 和 load data infile grant option 使用grant 和 revoke index 使用index insert 使用insert lock tables 使用lock table process 使用show full processlist select 使用select show databases 使用show databases show view 使用show view update 使用update reload 使用flush shutdown 使用mysqladmin shutdown(關閉MySQL) super 使用change master、kill、logs、purge、master和set global。還允許mysqladmin調試登陸 replication client 伺服器位置的訪問 replication slave 由複製從屬使用
使用
創建一個新用戶並給他授權
然後我們重新開啟一個客戶端並登入新用戶資料查看他能夠看到的數據
其他用戶管理語法:
刪除用戶:drop user 'username'@'IP address'; 修改用戶:rename user 'username'@'IP address'; 修改密碼:set password for 'username'@'IP address' = Password('new password')
其他授權語法:
查看許可權:show grants for 'username'@'IP address'; 取消授權:revoke 許可權名 on 'Database'.'Table' from 'username'@'IP address';
查看用戶登錄資料
操作資料庫及數據表
1.操作文件夾
<1>create database 新的資料庫名; 創建一個新的資料庫
增加編碼的要求:create database 新的資料庫名 charset utf8; 這樣寫這個資料庫的預設編碼是以utf-8
<2>show databases; 顯示所有資料庫
<3>drop database 資料庫名; 刪除現有資料庫
2.操作文件
<1>show tables; 顯示出所有表格
<2>create table 表名(第一列數據名 數據類型,第二列數據名 數據類型...); 創建一個新的表名
①增加編碼要求:create table 表名(第一列數據名 數據類型,第二列數據名 數據類型...) default charset=utf8;
②增加引擎要求:create table 表名(第一列數據名 數據類型,第二列數據名 數據類型...) engine= innodb default charset=utf8;
innodb:支持事務,能恢復到之前的狀態,原子性操作
myisum
③null、not null、default、auto_increment:
null->就是我的數據可以為空
not null->就是我的數據不可以為空
default->可以為我的數據設置一個預設值
auto_increment->用於自增,一般來說要搭配primary key使用;primary key的作用為約束(不能重覆也不能為空)、加速查找,一個表裡面只能有一個自增列,並且要有一個主鍵
3.操作文件中的內容
<1>insert into 表名(第一列數據名,第二列數據名...) values(值1,值2...); 往表內插入數據
<2>selcet * from 表名; 查看表內所有信息
接上1的步驟結果
再添加一條信息
<3>解決中文數據問題
<4>delete from 表名; 清空這個表的數據
若一個表只有一個自增數,它的id已經增加到3,若使用delete from 去清空這個表,再之後又新增了一筆資料後,它的自增值不重新開始
<5>truncate table 表名; 清空這個表的數據,執行速度快
使用trucate table就不會出現自增值不會不重新計算的情況
<6>drop table 表名; 刪除這個表
數據表基本數據類型
按整數去分:
1.int
int unsighed:無符號整數 範圍:0 ~ 4294967295
int sighed:有符號整數 範圍:-2147483648 ~ 2147483647
2.tinyint
tinyint unsighed:無符號小整數 範圍:0 ~ 255
tinyint sighed:有符號小整數 範圍:-128 ~ 127
3.bigint
bigint unsighed:無符號大整數 範圍:0 ~ 18446744073709551615
bigint sighed:有符號大整數 範圍:-9223372036854775808 ~ 9223372036854775807
按小數去分:
1.FLOAT[(m,d)]
並不准確的小數 數值越大越不准確,m是數字總個數,d是小數點後個數
FLOAT unsighed:無符號單精度浮點數 範圍:
-1.7976931348623157E+308 ~ -2.2250738585072014E-308
0
2.2250738585072014E-308 ~ 1.7976931348623157E+308
FLOAT sighed:有符號單精度浮點數 範圍:
0
1.175494351E-38 to 3.402823466E+38
2.DOUBLE[(m,d)]
並不准確的小數 數值越大越不准確,m是數字總個數,d是小數點後個數
DOUBLE unsighed:無符號雙精度浮點數 範圍:
-1.7976931348623157E+308 to -2.2250738585072014E-308
0
2.2250738585072014E-308 to 1.7976931348623157E+308
DOUBLE sighed:有符號雙精度浮點數 範圍:
0
2.2250738585072014E-308 to 1.7976931348623157E+308
3.decimal[(m[,d])]
精準的小數值,m是數字總個數(負號不算),d是小數點後個數,m最大值為65,d最大值為30
按字元串去分:
1.char(m)
char數據類型用於表示固定長度的字元串,可以包含最多達255個字元.其中m代表字元串的長度。即使數據小於m長度,也會占用長度。
2.varchar(m)
varchars數據類型用於變長的字元串,可以包含最多達255個字元。其中m代表該數據類型所允許保存的字元串的最大長度,只要長度小於該最大值的字元串都可以被保存在該數據類型中。
雖然varchar使用起來較為靈活,但是從整個系統的性能角度來說,char數據類型的處理速度更快,有時甚至可以超出varchar處理速度的50%。因此,用戶在設計資料庫時應當綜合考慮各方面的因素,以求達到最佳的平衡
創建數據表時把定長的數據往前放置,把不固定長度的數據往後放
3.text
text數據類型用於保存變長的大字元串,可以組多到65535 (2**16 − 1)個字元
4.mediumtext
範圍:16,777,215 (2**24 − 1)個字元
5.longtext
範圍:4,294,967,295 or 4GB (2**32 − 1)個字元
將上傳文件存硬碟,DB存路徑
按時間類型分:
1.DATE
YYYY-MM-DD(1000-01-01/9999-12-31)
2.TIME
HH:MM:SS('-838:59:59'/'838:59:59')
3.YEAR
YYYY(1901/2155)
4.DATETIME
YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y)
5.TIMESTAMP
YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某時)
按二進位數據分:
1.TinyBlob
2.Blob
3.MediumBlob
4.LongBlob
其他:
1.bit[(m)]
二進位位(101001),m表示二進位位的長度(1-64),預設m=1
2.enum
枚舉類型An ENUM column can have a maximum of 65,535 distinct elements.(The practical limit is less than 3000.) 示例: CREATE TABLE shirts ( name VARCHAR(40), size ENUM('x-small', 'small', 'medium', 'large', 'x-large') ); INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),('polo shirt','small');
3.set
集合類型A SET column can have a maximum of 64 distinct members. 示例: CREATE TABLE myset (col SET('a', 'b', 'c', 'd')); INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');
基本的增刪改查
1.插入
insert into 表名(第一列數據名,第二列數據名...) values(值1,值2...);
2.刪除
delete from 表名 where id<6; 只刪除id小於6的數據
3.修改
①讓表中所有的這個列下的值都改成一個固定數據:update 表名 set 列名=修改的固定值;
②基於①但有條件得去修改update 表名 set 列名=修改的固定值 where 列名=值;
4.查看
select * from 表名;