[MariaDB/MySQL] 建立連線帳號與指派權限

建立帳號,其中「myaccount」是帳號,「mypassword」是密碼,主機為 localhost。

CREATE USER 'myaccount'@'localhost' IDENTIFIED BY 'mypassword';

 

權限設定的指令結構如下(MariaDB 10.2):

GRANT
    priv_type [(column_list)]
      [, priv_type [(column_list)]] ...
    ON [object_type] priv_level
    TO user  [IDENTIFIED [BY [PASSWORD] 'password']
        |{VIA|WITH} plugin_name 
           [{USING|AS} 'plugin_option']]
        [, user [IDENTIFIED [BY [PASSWORD] 'password']
        |{VIA|WITH} plugin_name] 
           [{USING|AS} 'plugin_option']]
    user_options...

GRANT PROXY ON user_specification
    TO user_specification [, user_specification] ...
    [WITH GRANT OPTION]

user_options:
    [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
    [WITH with_option [with_option] ...]

object_type:
    TABLE
  | FUNCTION
  | PROCEDURE

priv_level:
    *
  | *.*
  | db_name.*
  | db_name.tbl_name
  | tbl_name
  | db_name.routine_name

with_option:
    GRANT OPTION
  | MAX_QUERIES_PER_HOUR count
  | MAX_UPDATES_PER_HOUR count
  | MAX_CONNECTIONS_PER_HOUR count
  | MAX_USER_CONNECTIONS count
  | MAX_STATEMENT_TIME time

tls_option:
    SSL
  | X509
  | CIPHER 'cipher'
  | ISSUER 'issuer'
  | SUBJECT 'subject'

Read more “[MariaDB/MySQL] 建立連線帳號與指派權限”

[Linux] 在 Bash 的自動完成中忽略英文字母大小寫

Bash 在做自動完成(Auto Completion)的預設情況下,對於鍵入的文字大小寫是有區分的,自身平常鍵盤輸入是維持小寫,在碰到有大寫的情況下,要按著 Shift 鍵或是利用 CapsLock 切換成大寫,我自己會稍嫌麻煩,因此我把 Auto Completion 設定為忽略大小寫,這樣可以讓我在輸入指令時比較方便。

設定的方式也非常簡單,在使用者家目錄下新增一個 .inputrc 檔案,並將 set completion-ignore-case On 加進去即可。

echo 'set completion-ignore-case On' >> ~/.inputrc

Reference: command line – Can I make Tab auto-completion case-insensitive in the terminal? – Ask Ubuntu

[MariaDB/MySQL] 在 Update 子查詢中使用 Limit 限制影響範圍

一般情況下,我們可以很簡單的利用 Limit 語法在進行資料異動中限制影響範圍。

UPDATE `my_table` SET `my_col` = 'data' LIMIT 2;

 

但是涉及使用子查詢的情境時,這招便不管用了。

例如今天資料長這樣:

+--------+--------+
| number | my_col |
+--------+--------+
|      1 | a      |
|      1 | a      |
|      2 | b      |
|      2 | b      |
|      3 | c      |
|      3 | c      |
+--------+--------+

 

我想要 Update 前面兩種資料,也就是要下 Limit 2,但是 number 一樣的話就要一起 Update,所以 number 為 1 和 2 的 record 應該都要 Update,所以預期應該要有 4 筆 record 被 Update。直覺利用 Sub-Query 應該可以做到:

UPDATE `my_table` SET `my_col` = 'data' WHERE `number` IN (
    SELECT DISTINCT `number` FROM `my_table` LIMIT 2
);

 

但是如果在 MariaDB/MySQL 5.5 或之後的版本執行時應該會得到 [Err] 1235 - This version of MariaDB doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

 

那這樣要怎麼辦呢?工具是死的,人是活的,Stackoverflow 就有人想到辦法繞過去了 。我們把 Limit 語法放到第三層子查詢(子查詢中的子查詢)就好了!

UPDATE `my_table` SET `my_col` = 'data' WHERE `number` IN (
    SELECT `number` FROM (
        SELECT DISTINCT `number` FROM `my_table` LIMIT 2
    ) as `sub_query_2`
);

 


Reference: MySQL – UPDATE query with LIMIT – Stack Overflow

[Ubuntu] 關閉圖形化介面

有時候在進行 Server 安裝設定時會想要短暫用一下 GUI 偷懶一下,但是完成後就會需要把 GUI 拿掉,把 GUI 使用的系統資源保留給其它服務,但是日後有時候又有臨時需求,也不想要反覆安裝與移除 GUI 軟體,這時候就可以透過 systemctl 去做切換。

 

使用下列指令後重新啟動系統,即可關閉 GUI:

sudo systemctl set-default multi-user.target

 

使用下列指令後重新啟動系統,即可重新啟用 GUI:

sudo systemctl set-default graphical.target

 

此方法適用於大部分的主流 GUI,如 GNOME、KDE 等。


Reference: systemd – How to disable X server autostart in Debian Jessie? – Unix & Linux Stack Exchange