寫在前言:本篇博客從mysql的安裝開始提及,至於什麼是數據庫以及數據的由來什麼的,不在詳談!!!html
1.apt安裝 mysql
apt install mysql-server
2.源碼安裝linux
1.解壓tar包 cd /software tar -xzvf mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz mv mysql-5.6.21-linux-glibc2.5-x86_64 mysql-5.6.21 2.添加用戶與組 groupadd mysql useradd -r -g mysql mysql chown -R mysql:mysql mysql-5.6.21 3.安裝數據庫 su mysql cd mysql-5.6.21/scripts ./mysql_install_db --user=mysql --basedir=/software/mysql-5.6.21 --datadir=/software/mysql-5.6.21/data 4.配置文件 cd /software/mysql-5.6.21/support-files cp my-default.cnf /etc/my.cnf cp mysql.server /etc/init.d/mysql vim /etc/init.d/mysql #若mysql的安裝目錄是/usr/local/mysql,則可省略此步 修改文件中的兩個變動值 basedir=/software/mysql-5.6.21 datadir=/software/mysql-5.6.21/data 5.配置環境變量 vim /etc/profile export MYSQL_HOME="/software/mysql-5.6.21" export PATH="$PATH:$MYSQL_HOME/bin" source /etc/profile 6.添加自啓動服務 chkconfig --add mysql chkconfig mysql on 7.啓動mysql service mysql start 8.登陸mysql及改密碼與配置遠程訪問 mysqladmin -u root password 'your_password' #修改root用戶密碼 mysql -u root -p #登陸mysql,須要輸入密碼 mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION; #容許root用戶遠程訪問 mysql>FLUSH PRIVILEGES; #刷新權限 源碼安裝mysql
window 安裝:sql
#1、下載:MySQL Community Server 5.7.16 http://dev.mysql.com/downloads/mysql/ #2、解壓 若是想要讓MySQL安裝在指定目錄,那麼就將解壓後的文件夾移動到指定目錄,如:C:\mysql-5.7.16-winx64 #3、添加環境變量 【右鍵計算機】--》【屬性】--》【高級系統設置】--》【高級】--》【環境變量】--》【在第二個內容框中找到 變量名爲Path 的一行,雙擊】 --> 【將MySQL的bin目錄路徑追加到變值值中,用 ; 分割】 #4、初始化 mysqld --initialize-insecure #5、啓動MySQL服務 mysqld # 啓動MySQL服務 #6、啓動MySQL客戶端並鏈接MySQL服務 mysql -u root -p # 鏈接MySQL服務器
2.把mysql搞成一個服務:數據庫
# 製做MySQL的Windows服務,在終端執行此命令: "c:\mysql-5.7.16-winx64\bin\mysqld" --install # 移除MySQL的Windows服務,在終端執行此命令: "c:\mysql-5.7.16-winx64\bin\mysqld" --remove 註冊成服務以後,之後再啓動和關閉MySQL服務時,僅需執行以下命令或者在windows服務管理點擊開啓或者關閉: # 啓動MySQL服務 net start mysql # 關閉MySQL服務 net stop mysql
1.1 查看數據庫vim
show databases;
默認數據庫:windows
information_schema: 虛擬庫,不佔用磁盤空間,存儲的是數據庫啓動後的一些參數,如用戶表信息、列信息、權限信息、字符信息等
performance_schema: MySQL 5.5開始新增一個數據庫:主要用於收集數據庫服務器性能參數,記錄處理查詢請求時發生的各類事件、鎖等現象
mysql: 受權庫,主要存儲系統用戶的權限信息
test: MySQL數據庫系統自動建立的測試數據庫服務器
1.2 使用數據庫ide
use dbname;
1.3 建立數據庫函數
數據庫命名規則: 1,能夠由字母、數字、下劃線、@、#、$ 2.區分大小寫 3.惟一性 4.不能使用關鍵字如 create select 5.不能單獨使用數字 6.最長128位 建立數據庫 CREATE DATABASE 數據庫名稱 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; 查看數據庫 show databases; show create database db1; select database(); 刪除數據庫 DROP DATABASE db1; 修改數據庫 alter database db1 charset utf8;
1.4 用戶管理
用戶管理特殊命令 建立用戶 create user '用戶名'@'IP地址' identified by '密碼'; create user zzl@localhost identified by '123'; 刪除用戶 drop user '用戶名'@'IP地址'; drop user 'zzl'@localhost; 修改用戶 rename user '用戶名'@'IP地址'; to '新用戶名'@'IP地址'; rename user 'zl'@localhost to zzll@127.0.0.1; 修改密碼 set password for '用戶名'@'IP地址' = Password('新密碼') set password for root@localhost = Password('666'); PS:用戶權限相關數據保存在mysql數據庫的user表中,因此也能夠直接對其進行操做(不建議)
1.5 受權管理
show grants for '用戶'@'IP地址' -- 查看權限 show grants for 'zzll'@'localhost' grant 權限 on 數據庫.表 to '用戶'@'IP地址' -- 受權 grant select on test.tb1 to zzll@localhost; revoke 權限 on 數據庫.表 from '用戶'@'IP地址' -- 取消權限 revoke select on test.tb1 to zzll@localhost;
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 由複製從屬使用
對於目標數據庫以及內部其餘: 數據庫名.* 數據庫中的全部 數據庫名.表 指定數據庫中的某張表 數據庫名.存儲過程 指定數據庫中的存儲過程 *.* 全部數據庫
用戶名@IP地址 用戶只能在改IP下才能訪問 用戶名@192.168.1.% 用戶只能在改IP段下才能訪問(通配符%表示任意) 用戶名@% 用戶能夠再任意IP下訪問(默認IP地址爲%)
1.存儲引擎
查看支持的存儲引擎:
show engines;
介紹各個存儲引擎:
1.數據存儲在內存中,數據庫重啓或者掛掉,數據將會丟失, 2.使用的是hash索引
暫略
2.表介紹
表至關於文件,表中的一條記錄就至關於文件的一行內容,不一樣的是,表中的一條記錄有對應的標題,稱爲表的字段
3.表相關操做:
#建立數據庫 mysql> create database db_name charset utf8; Query OK, 1 row affected (0.01 sec) #切換到db_name數據庫中 mysql> use db_name Database changed #建立表 mysql> create table t1( -> nid int not null, -> name varchar(20), -> sex enum('male','female'), -> age int(3) -> ); Query OK, 0 rows affected (0.06 sec) #查看錶 mysql> show tables; +-------------------+ | Tables_in_db_name | +-------------------+ | t1 | +-------------------+ 1 row in set (0.01 sec) #查看錶結構 mysql> desc t1; +-------+-----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-----------------------+------+-----+---------+-------+ | nid | int(11) | NO | | NULL | | | name | varchar(20) | YES | | NULL | | | sex | enum('male','female') | YES | | NULL | | | age | int(3) | YES | | NULL | | +-------+-----------------------+------+-----+---------+-------+ 4 rows in set (0.01 sec) #查看錶的數據 mysql> select * from t1; Empty set (0.00 sec) #插入數據到表中 mysql> insert into t1 values(1,'zzl','male',18); Query OK, 1 row affected (0.01 sec) #查看數據 mysql> select * from t1; +-----+------+------+------+ | nid | name | sex | age | +-----+------+------+------+ | 1 | zzl | male | 18 | +-----+------+------+------+ 1 row in set (0.00 sec)
4.基本數據類型
MySQL支持多種類型,大體能夠分爲三類:數值、日期/時間和字符串(字符)類型。
4.1:數值類型:
1.整數類型:TINYINT SMALLINT MEDIUMINT INT BIGINT
通常存儲的是:年齡,等級,各類號碼等等
###################################### tinyint[(m)] [unsigned] [zerofill] 小整數,數據類型用於保存一些範圍的整數數值範圍: 有符號: -128 ~ 127 無符號: 0 ~ 255 PS: MySQL中無布爾值,使用tinyint(1)構造。 ########################################## int[(m)][unsigned][zerofill] 整數,數據類型用於保存一些範圍的整數數值範圍: 有符號: -2147483648 ~ 2147483647 無符號: 0 ~ 4294967295 ############################################# bigint[(m)][unsigned][zerofill] 大整數,數據類型用於保存一些範圍的整數數值範圍: 有符號: -9223372036854775808 ~ 9223372036854775807 無符號: 0 ~ 1844674407370955161
驗證:
tinyint默認有符號
#-129 插入不進去
#有符號,最小值爲-128
#有符號,最大值127
#128插入不進去
#設置無符號tinyint
# -1插入不進去
#無符號,最小值爲0
#無符號,最大值爲255
#256插入不進去
int有符號
#默認爲有符號整數
#-2147483649存不進去
#有符號,最小值爲-2147483648
#有符號,最大值爲2147483647
#2147483648存不進去
int無符號
| -1 |#-1存不進去,超出範圍
| 0 | #無符號,最小值爲0
| 4294967295 | #無符號,最大值爲4294967295
| 4294967295 | #存不進去,超出範圍
bigint有符號
bigint無符號
用zerofill測試整數類型的顯示寬度
超過寬度限制後,仍然能夠存
注意:爲該類型指定寬度時,僅僅只是指定查詢結果的顯示寬度,與存儲範圍無關,存儲範圍以下
其實咱們徹底不必爲整數類型指定顯示寬度,使用默認的就能夠了
int的存儲寬度是4個Bytes,即32個bit,即2**32
無符號最大值爲:4294967296-1
有符號最大值:2147483648-1
有符號和無符號的最大數字須要的顯示寬度均爲10,而針對有符號的最小值則須要11位才能顯示徹底,因此int類型默認的顯示寬度爲11是很是合理的
最後:整形類型,其實沒有必要指定顯示寬度,用默認的就好了
2.浮點數類型
******************************************************* #FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] 定義: 單精度浮點數(非準確小數值),m是數字總個數,d是小數點後個數。m最大值爲255,d最大值爲30 有符號: -3.402823466E+38 to -1.175494351E-38, 1.175494351E-38 to 3.402823466E+38 無符號: 1.175494351E-38 to 3.402823466E+38 精確度: **** 隨着小數的增多,精度變得不許確 **** *************************************************** #DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] 定義: 雙精度浮點數(非準確小數值),m是數字總個數,d是小數點後個數。m最大值爲255,d最大值爲30 有符號: -1.7976931348623157E+308 to -2.2250738585072014E-308 2.2250738585072014E-308 to 1.7976931348623157E+308 無符號: 2.2250738585072014E-308 to 1.7976931348623157E+308 精確度: ****隨着小數的增多,精度比float要高,但也會變得不許確 **** *************************************************** decimal[(m[,d])] [unsigned] [zerofill] 定義: 準確的小數值,m是數字總個數(負號不算),d是小數點後個數。 m最大值爲65,d最大值爲30。 精確度: **** 隨着小數的增多,精度始終準確 **** 對於精確數值計算時須要用此類型 decaimal可以存儲精確值的緣由在於其內部按照字符串存儲。
示例:
mysql> create table t1(x float(256,31)); ERROR 1425 (42000): Too big scale 31 specified for column 'x'. Maximum is 30. mysql> create table t1(x float(256,30)); ERROR 1439 (42000): Display width out of range for column 'x' (max = 255) mysql> create table t1(x float(255,30)); #建表成功 Query OK, 0 rows affected (0.02 sec) mysql> create table t2(x double(255,30)); #建表成功 Query OK, 0 rows affected (0.02 sec) mysql> create table t3(x decimal(66,31)); ERROR 1425 (42000): Too big scale 31 specified for column 'x'. Maximum is 30. mysql> create table t3(x decimal(66,30)); ERROR 1426 (42000): Too-big precision 66 specified for 'x'. Maximum is 65. mysql> create table t3(x decimal(65,30)); #建表成功 Query OK, 0 rows affected (0.02 sec) mysql> show tables; +---------------+ | Tables_in_db1 | +---------------+ | t1 | | t2 | | t3 | +---------------+ rows in set (0.00 sec) mysql> insert into t1 values(1.1111111111111111111111111111111); #小數點後31個1 Query OK, 1 row affected (0.01 sec) mysql> insert into t2 values(1.1111111111111111111111111111111); Query OK, 1 row affected (0.00 sec) mysql> insert into t3 values(1.1111111111111111111111111111111); Query OK, 1 row affected, 1 warning (0.01 sec) mysql> select * from t1; #隨着小數的增多,精度開始不許確 +----------------------------------+ | x | +----------------------------------+ | 1.111111164093017600000000000000 | +----------------------------------+ row in set (0.00 sec) mysql> select * from t2; #精度比float要準確點,但隨着小數的增多,一樣變得不許確 +----------------------------------+ | x | +----------------------------------+ | 1.111111111111111200000000000000 | +----------------------------------+ row in set (0.00 sec) mysql> select * from t3; #精度始終準確,d爲30,因而只留了30位小數 +----------------------------------+ | x | +----------------------------------+ | 1.111111111111111111111111111111 | +----------------------------------+ row in set (0.00 sec)
3.位類型(做爲了解)
BIT(M)能夠用來存放多位二進制數,M範圍從1~64,若是不寫默認爲1位。
注意:對於位字段須要使用函數讀取
bin()顯示爲二進制
hex()顯示爲十六進制
4.2:日期/時間類型:
表示時間值的日期和時間類型爲DATETIME、DATE、TIMESTAMP、TIME和YEAR
YEAR YYYY(1901/2155) DATE YYYY-MM-DD(1000-01-01/9999-12-31) TIME HH:MM:SS('-838:59:59'/'838:59:59') DATETIME YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y) TIMESTAMP YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某時)
驗證:
year:
time,date,datetime
timestamp:
經過上面的兩個示例,對比下datetime與timestamp的區別:
1.DATETIME的日期範圍是1001——9999年,TIMESTAMP的時間範圍是1970——2038年。 2.DATETIME存儲時間與時區無關,TIMESTAMP存儲時間與時區有關,顯示的值也依賴於時區。在mysql服務器,操做系統以及客戶端鏈接都有時區的設置。 3.DATETIME使用8字節的存儲空間,TIMESTAMP的存儲空間爲4字節。所以,TIMESTAMP比DATETIME的空間利用率更高。 4.DATETIME的默認值爲null;TIMESTAMP的字段默認不爲空(not null),默認值爲當前時間(CURRENT_TIMESTAMP),若是不作特殊處理,而且update語句中沒有指定該列的更新值,則默認更新爲當前時間。
4.3:字符串類型:
#char類型:定長,簡單粗暴,浪費空間,存取速度快 字符長度範圍:0-255(一箇中文是一個字符,是utf8編碼的3個字節) 存儲: 存儲char類型的值時,會往右填充空格來知足長度 例如:指定長度爲10,存>10個字符則報錯,存<10個字符則用空格填充直到湊夠10個字符存儲 檢索: 在檢索或者說查詢時,查出的結果會自動刪除尾部的空格,除非咱們打開pad_char_to_full_length SQL模式(SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';) #varchar類型:變長,精準,節省空間,存取速度慢 用來保存變長字符類型,對於 VARCHAR 類型,N 的範圍爲 0 ~ 65 535
4.4 枚舉類型和集合類型
字段的值只能在給定範圍中選擇,如單選框,多選框
enum 單選 只能在給定的範圍內選一個值,如性別 sex 男male/女female
set 多選 在給定的範圍內能夠選擇一個或一個以上的值(愛好1,愛好2,愛好3...)
示例:
5.表的完整性約束
http://www.cnblogs.com/ylqh/p/8479435.html