文章

目前顯示的是 五月, 2018的文章

MySQL使用者權限設定

圖片
MySQL使用者權限資訊用user、db、host、tables_priv和columns_priv表被儲存在mysql資料庫中。 關於使用者權限的相關指令,說明如下 (1)使用 root 進入 MySQL mysql> mysql -u root -p (2)遠端登入 mysql> mysql -u root -h remote_host_ip -p remote_host_ip 指你要登入的遠端MySQL (3)修改使用者密碼 mysql> SET PASSWORD FOR '目標使用者'@'主機' = PASSWORD(' 密碼 '); mysql> flush privileges; (4)建立使用者,並給予權限 grant usage on *.* to  'username'@'localhost'  identified by ' yourpassword ' with grant option;  grant all privileges on *.* to  'username'@'localhost'  identified by ' yourpassword '; flush privileges; INSERT INTO user(host,user,password) VALUES(' % ',' username ',password(' userpassword ')); GRANT ALL ON *.* TO 'username'@localhost IDENTIFIED BY ' userpassword ' WITH GRANT OPTION; FLUSH PRIVILEGES; GRANT SELECT,INSERT,UPDATE,DELETE,CREATE ON dbname .* TO ' username '@localhost IDENTIFIED BY ' userpassword &#

MySQL VIEW

圖片
mix 2 MySQL資料庫中,View元件可以用來保存一段你指定的查詢敘述。 (1)CREATE VIEW語法  CREATE [ OR REPLACE ] [ ALGORITHM = { UNDEFINED | MERGE | TEMPTABLE } ] [ DEFINER = { user | CURRENT_USER } ] [ SQL SECURITY { DEFINER | INVOKER } ] VIEW view_name [ ( column_list ) ] AS select_statement [ WITH [ CASCADED | LOCAL ] CHECK OPTION ] https://dev.mysql.com/doc/refman/8.0/en/create-view.html 範例 mysql> CREATE TABLE t (qty INT, price INT); mysql> INSERT INTO t VALUES(3, 50); mysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t; mysql> SELECT * FROM v; 範例 WITH CHECK OPTION; mysql> CREATE TABLE t1 (a INT); mysql> CREATE VIEW v1 AS SELECT * FROM t1 WHERE a < 2 -> WITH CHECK OPTION; mysql> CREATE VIEW v2 AS SELECT * FROM v1 WHERE a > 0 -> WITH LOCAL CHECK OPTION; mysql> CREATE VIEW v3 AS SELECT * FROM v1 WHERE a > 0 -> WITH CASCADED CHECK OPTION; 因為v2使用WITH LOCAL CHECK OPTION; 僅會針

MySQL ~ Prepare, Execute, Deallocate

圖片
Prepare, Execute, Deallocate是一個使用變數來執行的一個功能,主要目的是 : (1)在尚未寫入正式程式時做測試使用。 (2)當暫時需要做些重複動作時使用。 Prepare ~ 準備程序 Execute  ~ 執行程序 Deallocate ~ 解除程序 範例 : mysql> PREPARE stmt1 FROM 'SELECT productCode, productName FROM products WHERE productCode = ?'; mysql> SET @pc = 'S10_1678'; mysql> EXECUTE stmt1 USING @pc; mysql> DEALLOCATE PREPARE stmt1; 範例 : mysql> PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse'; mysql> SET @a = 3; mysql> SET @b = 4; mysql> EXECUTE stmt1 USING @a, @b; mysql> DEALLOCATE PREPARE stmt1; 上述動作就是在做 ~ a的平方加上b的平方,然後開根號。 POW(?,2) 指的就是把變數帶入問號的位置,然後平方。 SQRT是指開根號。 範例 : mysql> USE test; mysql> CREATE TABLE t1 (a INT NOT NULL); mysql> INSERT INTO t1 VALUES (4), (8), (11), (32), (80); mysql> SET @table = 't1'; mysql> SET @s = CONCAT('SELECT * FROM ', @table); mysql> PREPARE stmt3 FROM @s; mysql> EXECUTE stmt3; mysql>DEALLOCATE P

如何從需求的條件寫出SQL指令?

圖片
需求~要列出符合【某個條件】的【某項資料】,應該如何寫出SQL指令呢? 第一步 : 找齊資料表。 【某項資料】是在哪個資料表? 以及【某個條件】中的判斷條件是在哪個資料表? 所以這個步驟 ,就可以把資料表都找齊了。 第二步 : 篩選出來【正確的資料表】。 但是許多情況,【某項資料】會存在許多資料表中,這個時候就要判斷,哪個資料表才是正確的。 方法就是把第一步找到的資料表,畫出關聯性,【某項資料】一定會存在具有關聯性的資料表中。所以就可以把不在關聯的資料表刪除。 第三步 : 套用再調整。 套用 SELECT 【某項資料】 FROM 【正確的資料表】 WHERE 【某個條件】AND 主鍵外鍵的關聯 其他部分 (如GROUP BY、HAVING、ORDER BY等等) 調整 看看那些欄位需要冠上 ~ 資料表.資料欄,例如 學生資料表.學生姓名 例如~ 要列出開課編號為o0001的「開課編號」、「學生姓名」。 由第一步,相關的欄位是 「 開課編號 」 、「學生姓名」。 「學生姓名」存在於學生資料庫, 「 開課編號 」存在於 選課資料表、 開課資料表、 時間資料表。 由第二 步,學生資料庫與 選課資料表,透過 學生編號來產生關聯。 開課資料表、 時間資料表則跟 學生資料庫沒有 關聯。 由第三 步 SELECT 開課編號,學生姓名 FROM 學生資料庫 s, 選課資料表 r WHERE 開課編號='o0001' AND s.sid=r.sid; 【練習】 資料表如下: 學生資料表(學生編號,身分證字號,學生姓名,科系編號,年級,班級) 老師資料表(老師編號,身分證字號,老師姓名,科系編號,老師類別) 選課資料表(學生編號,開課編號,成績) 開課資料表(開課編號,課程編號,老師編號,修課年級限制,教室編號) 時間資料表(開課編號,開課時間編號) 課程資料表(課程編號,課程名稱,科系代號,學分數,選修別) 科系資料表(科系編號,科系名稱) (1)要列出學生編號為s0001所修課程的「開課編號」,請寫出SQL指令。 SELECT 開課編號 FROM 選課資料表 WHERE 學生編號='s0001'; (2)要列出開課編號為o0001的