MySQL是Oracle公司開發、發佈和支持的最流行的開源SQL資料庫管理系統。 ...
關於MySQL
官方文檔:https://dev.mysql.com/doc/refman/8.0/en/
MySQL是Oracle公司開發、發佈和支持的最流行的開源SQL資料庫管理系統。
【主要特點】
- 開源
- 使用BTree索引
- 支持多線程,對多核CPU性能可以達到更好的發揮
- 用C和C++編寫
CentOS7.6 安裝MySQL8.0
環境準備
- 卸載mariadb
rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64
centos7 內部集成了mariadb,而安裝mysql的話會和mariadb的文件衝突,所以需要先卸載掉mariadb。
【如果之前安裝了mysql需要先卸載】
yum remove mysql*
刪除安裝目錄
whereis mysql
rm -rf /usr/share/mysql
安裝MySQL
獲取yum源(MySQL官網)
安裝yum源
rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
查看各版本啟動狀況
yum repolist all | grep mysql
預設開啟最新版8.0
[調整命令】禁用8.0,開啟5.7
yum-config-manager --disable mysql80-community yum-config-manager --enable mysql57-community
命令在yum-utils 包里,安裝既可以解決無法找到yum-config-manager命令:
yum -y install yum-utils
安裝mysqll
yum -y install mysql-community-server
配置MySQL遠程連接
查看mysql版本
mysql -V
啟動mysql&&設置開機自啟
systemctl start mysqld systemctl enable mysqld
查看預設生成密碼
grep 'temporary password' /var/log/mysqld.log
登錄修改密碼
mysql -uroot -p
修改密碼
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NoPassword564925080!'; mysql5.7之後預設安裝了密碼安全檢查插件(validate_password),預設密碼檢查策略要求密碼必須包含:大小寫字母、數字和特殊符號,並且長度不能少於8位。否則會提示ERROR 1819 (HY000): Your password does not satisfy the current policy requirements錯誤.
授權遠程登錄用戶
預設的密碼加密方式是:caching_sha2_password,而現在很多客戶端工具還不支持這種加密認證方式,連接測試的時候就會報錯:client does not support authentication protocol requested by server; consider upgrading MySQL client
CREATE USER 'noneplus'@'%' IDENTIFIED BY 'Noneplus564925080!'; GRANT ALL ON *.* TO 'noneplus'@'%'; //修改認證方式為mysql_native_password ALTER USER 'noneplus'@'%' IDENTIFIED WITH mysql_native_password BY 'Noneplus564925080!'; flush privileges;
開放伺服器3306埠
遠程連接
MySQL常用命令
登錄
mysql -u root -p
資料庫相關命令
show databases;
create database database_name;
use database_name;
drop database_name;
資料庫表相關命令
【資料庫和資料庫表相關命令都屬於DDL數據定義語言】
show tables; [先切換到指定資料庫]
//創建表
CREATE TABLE `user_info` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT '用戶id',
`username` varchar(10) DEFAULT NULL COMMENT '用戶姓名',
`password` varchar(20) DEFAULT NULL COMMENT '用戶密碼',
`age` int(5) DEFAULT NULL COMMENT '年齡',
`email` varchar(20) DEFAULT NULL COMMENT '郵箱',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8 COMMENT='用戶信息表'
//查看表定義
show create table user_info \G;
drop table user_info;
//刪除表欄位
alter table user_info column age;
//修改表
Alter table user_info modify username varchar(15);
//增加表的欄位
alter table user_info add column gender int(1);
//欄位改名
alter table user_info change age age1 int(3);
//modify,add,change都可以進行排序
Alter table user_info modify username varchar(15) first; //放在最前面
alter table user_info add column gender int(1) after age;//欄位至於age之後
//修改表名
alter table user_info rename person_info;
增刪改查命令
【增刪改查屬於DML數據操作語言】
插入
INSERT INTO user_info(username,password,age,email) VALUES('hq','123456789',22,'[email protected]')
更新
UPDATE user_info SET username='hq',age=23,email='[email protected]' WHERE id=5
刪除
DELETE FROM user_info WHERE id=6
查詢
SELECT * FROM user_info WHERE id = 6
SELECT * FROM user_info WHERE id = 6 and age<30
排序【預設升序】
SELECT * FROM user_info ORDER BY ID DESC LIMIT 10 //查詢最後十條數據
SELECT * FROM user_info ORDER BY ID DESC LIMIT 10,20 //查詢最後20條數據的前10條
統計數據總條數
SELECT COUNT(1) FROM user_info;
統計最大值,最小值,求和
SELECT MAX(age),MIN(age) ,SUM(age) FROM user_info;
表連接查詢
select ename,deptname from emp,dept where emp.deptno=dept.deptno;
MySQL常用數據類型
數值類型
整數類型 | 位元組 | 最小值 | 最大值 |
---|---|---|---|
tinyint | 1 | 有符號-128 無符號0 | 有符號127 無符號255 |
smallint | 2 | 有符號-32768 無符號0 | 有符號32767 無符號65535 |
mediumint | 3 | 有符號-800w 無符號0 | 有符號800w 無符號167w |
int,integer | 4 | 有符號-21億 無符號0 | 有符號21億 無符號42億 |
bigint | 8 | 有符號-92w兆 無符號0 | 有符號92w兆 無符號184w兆 |
int(5)指定顯式寬度【不顯式指定預設int(11)】,當數值寬度小於五位的時候,預設填滿。zerofill指用0填充。
unsigned表示是否帶符號
浮點數類型 | 位元組 | 最小值 | 最大值 |
---|---|---|---|
float | 4 | ||
double | 8 |
定點數類型 | 位元組 | 最小值 | 最大值 |
---|---|---|---|
decimal(M,D) | M+2 | 有符號-128 無符號0 | 有符號127 無符號255 |
表示一共顯示M位數字,包括整數位和小數位,其中D位代表小數點有幾位
decimal不指定精度預設整數位為10,小數位為0.
日期時間類型
類型 | 位元組 | 最小值 | 最大值 |
---|---|---|---|
date | 4 | 1000-01-01 | 9999-12-31 |
datetime | 8 | 1000-01-01 00:00:00 | 9999-12-31 23:59:59 |
timestamp | 4 | 1970010108001 | 2038年的某個時刻 |
記錄系統當前時間可用timestamp,支持不同地方的時區差異
TIMESTAMP 存儲的時間範圍 1970-01-01 00:00:01 ~ 2038-01-19-03:14:07
字元串類型
類型 | 描述 |
---|---|
char | 0-255位元組 |
varchar | 0-65535位元組 |
tinyblob | 0-255位元組 |
blob | 0-65535位元組 |
mediumblob | 0-16772150位元組 |
longblob | 0-4294967295位元組 |
tinytext | 0-255位元組 |
text | 0-65535位元組 |
mediumtext | 0-16772150位元組 |
longtext | 0-4294967295位元組 |
varbinary(M) | 0-M位元組 |
binary(M) | 0-M位元組 |
MySQL支持的運算符
算術運算符
算術運算符 | 說明 |
---|---|
+ | 加法運算 |
- | 減法運算 |
* | 乘法運算 |
/ | 除法運算,返回商 |
% | 求餘運算,返回餘數 |
比較運算符
比較運算符 | 說明 |
---|---|
= | 等於 |
< | 小於 |
<= | 小於等於 |
> | 大於 |
>= | 大於等於 |
<=> | 安全的等於,不會返回 UNKNOWN |
<> 或!= | 不等於 |
IS NULL 或 ISNULL | 判斷一個值是否為 NULL |
IS NOT NULL | 判斷一個值是否不為 NULL |
LEAST | 當有兩個或多個參數時,返回最小值 |
GREATEST | 當有兩個或多個參數時,返回最大值 |
BETWEEN AND | 判斷一個值是否落在兩個值之間 |
IN | 判斷一個值是IN列表中的任意一個值 |
NOT IN | 判斷一個值不是IN列表中的任意一個值 |
LIKE | 通配符匹配 |
REGEXP | 正則表達式匹配 |
邏輯運算符
邏輯運算符 | 說明 |
---|---|
NOT 或者 ! | 邏輯非 |
AND 或者 && | 邏輯與 |
OR 或者 || | 邏輯或 |
XOR | 邏輯異或【相同為0,不同為1】 |
位運算符
位運算符 | 說明 |
---|---|
| | 按位或 |
& | 按位與 |
^ | 按位異或 |
<< | 按位左移 |
>> | 按位右移 |
~ | 按位取反,反轉所有比特 |
運算符優先順序
優先順序由低到高排列 | 運算符 |
---|---|
1 | =(賦值運算)、:= |
2 | II、OR |
3 | XOR |
4 | &&、AND |
5 | NOT |
6 | BETWEEN、CASE、WHEN、THEN、ELSE |
7 | =(比較運算)、<=>、>=、>、<=、<、<>、!=、 IS、LIKE、REGEXP、IN |
8 | | |
9 | & |
10 | <<、>> |
11 | -(減號)、+ |
12 | *、/、% |
13 | ^ |
14 | -(負號)、〜(位反轉) |
15 | ! |