# Mysql
Mysql是最流行的關系型數據庫管理系統,在WEB應用方面MySQL是最好的RDBMS(Relational
Database Management System:關系數據庫管理系統)應用軟件之一。
## 安裝
壓縮版安裝
1. mysql-5.7.4-m14-winx64.zip下載
2. 解壓到D:/mysql.(路徑自己指定)
3. 在D:/mysql/mysql-5.7.4-m14-winx64下新建my.ini配置文件
內容如下:
> ####################配置文件開始###################
> # For advice on how to change settings please see
> # *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
> # *** default location during install, and will be replaced if you
> # *** upgrade to a newer version of MySQL.
> [client]
> default-character-set=utf8
> [mysqld]
> port=3306
> basedir ="D:/Program Files/MySQL/MySQL Server 5.7"
> datadir ="D:/Program Files/MySQL/MySQL Server 5.7/data/"
> tmpdir ="D:/Program Files/MySQL/MySQL Server 5.7/data/"
> socket ="D:/Program Files/MySQL/MySQL Server 5.7/data/mysql.sock"
> log-error="D:/Program Files/MySQL/MySQL Server 5.7/data/mysql_error.log"
> character_set_server=utf8
> init_connect='SET NAMES utf8'
> #server_id = 2
> #skip-locking
> max_connections=100
> table_open_cache=256
> query_cache_size=1M
> tmp_table_size=32M
> thread_cache_size=8
> innodb_data_home_dir="D:/Program Files/MySQL/MySQL Server 5.7/data/"
> innodb_flush_log_at_trx_commit =1
> innodb_log_buffer_size=128M
> innodb_buffer_pool_size=128M
> innodb_log_file_size=10M
> innodb_thread_concurrency=16
> innodb-autoextend-increment=1000
> join_buffer_size = 128M
> sort_buffer_size = 32M
> read_rnd_buffer_size = 32M
> max_allowed_packet = 32M
> explicit_defaults_for_timestamp=true
> sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
> #sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
> ####################配置文件結束###################
4. 重點是以下配置,其中datadir的目錄名稱必須是:D:/Program Files/MySQL/MySQL Server 5.7。
在windows系統環境變量path,加入如下內容
D:/mysql/mysql-5.7.4-m14-winx64/bin;(注意加分號)
5. 將mysql注冊為windows系統服務
具體操作是在命令行中執行以下命令(需要以管理員身份運行命令行):
增加服務命令:mysqld install MySQL --defaults-file="D:/Program Files/MySQL/MySQL Server 5.7/default.ini"
移除服務命令為:mysqld remove
6. 第5步成功后,打開系統服務管理
可以看到mysql系統服務(此處需要注意):
需要在mysql服務的登陸屬性里配置管理員用戶登陸(不配置從服務管理里啟動報1035錯誤,在命令行啟動報啟動失敗)
~~~
在命令行啟動mysql命令為: net start mysql
關閉mysql命令為:net stop mysql
~~~
修改root的密碼為123456
~~~
命令行執行:mysql –uroot
mysql>show databases;
mysql>use mysql;
mysql> UPDATE user SET password=PASSWORD('root') WHERE user='root';
mysql> FLUSH PRIVILEGES;
mysql> QUIT
~~~
新版本
`update MySQL.user set authentication_string=password('root') where user='root' ;`
**注意**
遠程登陸
允許root用戶在任何地方進行遠程登錄,并具有所有庫任何操作權限,具體操作如下:
1)在本機先使用root用戶登錄mysql:
`命令行執行:mysql -u root -p`
輸入密碼(第7步中設置的密碼):123456
2)進行授權操作:
`mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION;`
重載授權表:
~~~
mysql>FLUSH PRIVILEGES;
退出mysql:quit..
~~~
data文件夾
5.7版本在解壓后是沒有data這個文件夾的,不要手動建立一個空的data文件夾,而是進入cmd,輸入mysqld --initialize-insecure自動生成無密碼的root用戶,同時自動生成一個data文件夾,這時候再進行MySQL的安裝,net start mysql,啟動服務。
如果你已經安裝好了MySQL,那么先刪除你手動建立的data文件夾,然后再輸入mysqld --initialize-insecure【如果不輸入-insecure會生成隨機密碼,第一次登陸會出現問題】,啟動服務即可
服務沒有安裝。
解決辦法: 在 mysql bin目錄下 以管理員的權限 執行 `mysqld -install`命令
然后仍然以管理員的權限` net start mysql `開啟Mysql服務了。
安裝版安裝
注意
這里只有關鍵步驟截圖
配置
添加環境變量
命令行操作
常見命令
mysql服務
~~~
net stop mysql
net start mysql
~~~
登陸mysql
mysql -h 主機ip -u 用戶名 -p 用戶密碼
一般操作
Show Databases;
Use database-name
Show tables;
Select
Insert
update
delete
可視化工具
(Navicat Premium)
## Select
SELECT語句的執行的邏輯查詢處理步驟:
> (8)SELECT (9)DISTINCT
> (11)<TOP_specification> <select_list>
> (1)FROM <left_table>
> (3) <join_type> JOIN <right_table>
> (2) ON <join_condition>
> (4)WHERE <where_condition>
> (5)GROUP BY <group_by_list>
> (6)WITH {CUBE | ROLLUP}
> (7)HAVING <having_condition>
> (10)ORDER BY <order_by_list>
> 每個步驟產生一個虛擬表,該虛擬表被用作下一個步驟的輸入。只有最后一步生成的表返回給調用者。如
> 果沒有某一子句,則跳過相應的步驟。
> 1. FROM:對FROM子句中的前兩個表執行笛卡爾積,生成虛擬表VT1。
> 2. ON:對VT1應用ON篩選器。只有那些使<join_condition>為真的行才被插入VT2。
> 3. OUTER(JOIN):如果指定了OUTER JOIN,保留表中未找到匹配的行將作為外部行添加到VT2,生成VT3。
> 如果FROM子句包含兩個以上的表,則對上一個聯接生成的結果表和下一個表重復執行步驟1到步驟3,直到
> 處理完所有的表為止。
> 4. 對VT3應用WHERE篩選器。只有使<where_condition>為TRUE的行才被插入VT4。
> 5. GROUP BY:按GROUP BY 子句中的列列表對VT4中的行分組,生成VT5。
> 6. CUBE|ROLLUP:把超組插入VT5,生成VT6。
> 7. HAVING:對VT6應用HAVING篩選器。只有使<having_condition>為TRUE的組才會被插入VT7。
> 8. SELECT:處理SELECT列表,產生VT8。
> 9. DISTINCT:將重復的行從VT8中移除,產生VT9。
> 10. ORDER BY:將VT9中的行按ORDER BY子句中的列列表排序,生成一個有表(VC10)。
> 11. TOP:從VC10的開始處選擇指定數量或比例的行,生成表VT11,并返回給調用者。
## where
> 操作符 描述
> = 等于
> <> 不等于
> > 大于
> > 小于
> >= 大于等于
> <= 小于等于
BETWEEN 在某個范圍內
LIKE 搜索某種模式
**注釋**:在某些版本的 SQL 中,操作符 <> 可以寫為 !=。
AND 和 OR 運算符
AND 和 OR 可在 WHERE 子語句中把兩個或多個條件結合起來。
如果第一個條件和第二個條件都成立,則 AND 運算符顯示一條記錄。
如果第一個條件和第二個條件中只要有一個成立,則 OR 運算符顯示一條記錄。
# Insert
`INSERT INTO 表名稱 VALUES (值1, 值2,....)`
我們也可以指定所要插入數據的列:
`INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)`
## Update
`UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值`
## Delete
`DELETE FROM 表名稱 WHERE 列名稱 = 值`
# 實例
## 查詢
~~~
SELECT
SELECT * FROM dm_info
SELECT 查詢的列 FROM 表名
SELECT name FROM dm_info
* 表示所有的列
SELECT * FROM dm_info WHERE valid =1
SELECT * FROM dm_info ORDER BY id DESC #降序
SELECT num nm,batch,name ,major FROM dm_info ORDER BY batch DESC,major DESC
SELECT * FROM dm_info WHERE `name` LIKE '祥' # _代表一個任意字符 %代表任意多個字符
模糊查詢的 %key%
SELECT * FROM dm_info WHERE id <>10 #I= or <>
SELECT * FROM dm_info WHERE 4 < id<10 # 4<id and id<10
SELECT * FROM dm_info WHERE id BETWEEN 4 and 10 # 4<=id<=10
SELECT * FROM dm_info WHERE `name` LIKE "?%"
SELECT * FROM dm_info WHERE `name` LIKE "1" or 1=1 or "%" #曾" or 1=1 or `name` = "
SELECT DISTINCT major FROM dm_info #DISTINCT 去除重復的數據 --- union full union
SELECT batch FROM dm_info
SELECT COUNT(batch) FROM dm_info
SELECT AVG( batch) FROM dm_info #GROUP BY 分組
~~~
分頁
~~~
SELECT * FROM dm_info ORDER BY id DESC LIMIT 0,10
SELECT * FROM dm_info LIMIT 10
#SELECT * FROM (SELECT * FROM dm_info ORDER BY id ASC LIMIT 20 ) as ttt ORDER BY id DESC LIMIT 10
SELECT * FROM dm_info WHERE id in(5,6,7,8,9)
SELECT * FROM dm_info WHERE id NOT in(5,6,7,8,9)
SELECT * FROM dm_info WHERE batch is not null
SELECT * FROM dm_info where id >14 and id<25
SELECT * FROM dm_info LIMIT 6,2
~~~
## 非查詢
更新 UPDATE
~~~
UPDATE dm_info
SET `name`='1',sex='未知',batch='100'
WHERE id=10
~~~
刪除 DELETE
` delete FROM dm_info WHERE id<10`
添加 insert
~~~
INSERT INTO dm_info(name,sex,) VALUES('zxy','未知')
INSERT INTO `dm_info` VALUES (DEFAULT,'zxysilent', '曾祥銀', '男', 'XXYJSKX', '信息與計算科學', '漢族', '南充市', 'abddddd', true);
~~~