Linux下MySQL 資料庫的基本操作

来源:http://www.cnblogs.com/Glory-D/archive/2017/09/14/7518541.html
-Advertisement-
Play Games

MySQL常用語句操作: 1. 創建資料庫相關命令; 2. 新建資料庫之後的相關操作 - ALTER,DROP,UPDATE; 3. 資料庫表間數據複製; 4. 資料庫重命名; 5. 資料庫用戶許可權相關; 6. 多表查詢語句 ...


1. 創建資料庫相關命令:
  首先,下載MySQL相關軟體包:aptitude install mysql-server/mysql-client
  MySQL中的root用戶類似於Linux下的root用戶,擁有最多高的許可權,若操作不當會對數據造成嚴重的危害。因此,針對每一個應用程式創建
    對應的資料庫及操作用戶是一個好習慣。
  mysql -u root -p + 回車   -u後跟用戶名,-p表示需要密碼登錄,首次進入mysql用root用戶(輸入root用戶賬戶的密碼,這個密碼要麼是在安裝過程中,
    要麼是使用mysqladmin工具獲得的。)。若進入失敗,原因可能是原始密碼未正確配置,可嘗試用密碼'root'登錄。若仍報錯,可參考如下解決方法:
    http://www.cnblogs.com/kerrycode/p/4368312.html
    http://blog.csdn.net/yangxt/article/details/17200611
    mysql的相關安裝目錄可參考:
    http://www.linuxidc.com/Linux/2014-10/108644.htm
    下麵命令嘗試可用:
    mysqladmin -u root -p password + 回車(若之前有密碼,則會顯示在password之後)
    Enter password: 輸入新密碼(不可見)
  mysql> STATUS(\s)  - 列出當前mysql的相關狀態信息
  mysql> SHOW DATABASES;  - 顯示資料庫列表
  mysql> USE DB_name;  - 選中資料庫DB_name
  mysql> SHOW TABLES;  - 顯示DB_name下的TABLES列表
  mysql> CREATE DATABASE DB_name;  - 創建一個新的資料庫,當然,首先你應該以root用戶登錄,普通用戶並沒有創建資料庫的權利
  mysql> GRANT SELECT,INSERT,DELETE,UPDATE ON DB_name TO user_name IDENTIFIED
      > by 'user_psd';  - 授予新用戶user_name對於資料庫DB_name的指定許可權,登錄密碼user_psd。該用戶擁有的許可權:SELECT,INSERT,DELETE,UPDATE
  mysql DB_name -u user_name -p  - 用新創建的用戶user_name登錄資料庫DB_name
  mysql mytest -u root -p  - 用root用戶登錄資料庫DB_name,當我們需要為資料庫DB_name創建新表時,需要root用戶的許可權,如下,創建新表的過程:
  mysql> CREATE TABLE employees (
    - > empid int not null,  - 該欄位列值非空
    -> lastname varchar(30),
    -> firstname varchar(30),
    -> salary float,
    -> primary key (empid));  - 該欄位列值唯一,"primary key" 表示該列是表的主鍵, MySQL將自動索引該列
  mysql> SHOW COLUMNS FROM employees;  - 顯示employees各欄位信息(有時我們需要知道表的結構才能確定插入內容的格式)
  mysql> SHOW CREATE TABLE employees;  - 顯示表employees的創建過程,同樣可以查看其內部結構
  mysql> INSERT INTO table VALUES (...);  - 項表table插入一條信息,如:mysql> INSERT INTO employees VALUES (1, 'Blum', 'Rich', 25000.00);
    若:mysql> INSERT INTO employees VALUES (1, 'Blum', 'Barbara', 45000.00);
    則:ERROR 1062 (23000): Duplicate entry '1' for key 1
  mysql> DELETE FROM employees WHERE empid = 1;  - 刪除empid = 1的那條信息
  mysql> DELETE FROM employees;  - 刪除指定資料庫employees的所有表
  mysql> SELECT * FROM employees;  - 查詢表employees的所有欄位內容,SELECT為查詢命令
  mysql> SELECT datafields FROM table;  - 查詢欄位列表datafields指定的內容(個欄位間用“,”分割)。常用的三個過濾器修飾符如下:
    WHERE:顯示符合特定條件的數據行子集。如:mysql> SELECT * FROM employees WHERE salary > 40000;
    ORDER BY:以指定順序顯示數據行。
    LIMIT:只顯示數據行的一個子集。
  E.G. :
    mysql> SELECT * FROM employees;
    +-------+----------+-----------+--------+
    | empid | lastname | firstname | salary |
    +-------+----------+-----------+--------+
    | 0 | ER | ZHANG | 4500 |
    | 1 | SAN | ZHANG | 5500 |
    | 2 | SI | ZHANG | 6500 |
    | 3 | WU | ZHANG | 7500 |
    | 4 | LIU | ZHANG | 8500 |
    | 5 | QI | ZHANG | 9500 |
    +-------+----------+-----------+--------+
  mysql> SELECT lastname, salary FROM employees WHERE salary > 5000 && salary < 8000;
    +----------+--------+
    | lastname | salary |
    +----------+--------+
    | SAN | 5500 |
    | SI | 6500 |
    | WU | 7500 |
    +----------+--------+
  mysql> SELECT * FROM employees1 ORDER BY lastname (ASC/DECS);  - 按欄位lastname排序查詢表employees1
  mysql> SELECT * FROM employees1 WHERE salary LIKE '6%';  - 限制salary為數字6開頭的項,LIKE字句可以代替“=”使用
  mysql> exit/quit  - 退出資料庫軟體

2. 新建資料庫之後的相關操作:
  ALTER:
    mysql> ALTER TABLE table_name ...;  - 創建表之後,有時我們需要對標的結構進行修改,就用這個作為命令頭部
    mysql> ALTER TABLE table_name RENAME (AS) table_new_name;  - 表重命名
    mysql> ALTER TABLE table_name ADD 列名 列數據類型 [AFTER 插入位置];  - 在表中新增一個欄位信息
    mysql> ALTER TABLE table_name CHANGE 列名稱 列新名稱 新數據類型;  - 指定列重命名
    mysql> ALTER TABLE table_name DROP 列名稱;  - 刪除指定列
  DROP:
    mysql> DROP TABLE table_name;  - 刪除指定表
    mysql> DROP DATABASE database_name;  - 刪除指定資料庫
    mysqladmin -u root -p drop database_name;  - 同樣可以使用mysqladmin命令在mysql軟體之外刪除指定資料庫
  UPDATE:
    +-------+----------+-----------+--------+
    | empid | lastname | firstname | salary |
    +-------+----------+-----------+--------+ +-------+----------+-----------+--------+
    | 5 | QI | ZHANG | 9500 | | 5 | QI | ZHANG | 9500 |
    | 7 | BA | ZAHNG | 9500 | --> | 6 | BA | ZAHNG | 9500 |
    +-------+----------+-----------+--------+ +-------+----------+-----------+--------+
    mysql> UPDATE employees1
      -> SET empid = 6
      -> WHERE lastname = BA;  - 限定條件

3. 資料庫表間數據複製:http://www.jb51.net/article/47562.htm
  同一資料庫表間複製:
    INSERT (INTO) table1 select * from table2;  - 完全複製(mysql測試可用)
    INSERT (INTO) table1 select distinct * from table2;  - 不複製重覆紀錄(mysql測試不可用)
    INSERT (INTO) table1 select top 5 * from table2;  - 前五條紀錄(mysql測試不可用)
  跨資料庫表間複製:
    INSERT (INTO) (current.)table1 select * from src_database.table2;  - 完全複製
    INSERT (INTO) (current.)table1 select distinct * from src_database.table2;  - 不複製重覆紀錄
    INSERT (INTO) (current.)table1 select top 5 * from src_database.table2;  - 前五條紀錄
  若table1不存在,則首先應該創建表,並使其結構與src_database結構相同方可copy:
    CREATE TABLE table1 LIKE (src_database.)table2;  - +(src_database.)取決於是否在同一個資料庫
    INSERT table1 SELECT * FROM (src_database.)table2;

4. 資料庫重命名的幾種方法:http://www.cnblogs.com/allenhua/p/5393189.html
  以方法四為例(mysqldump導出數據再導入):mytest -> mytest1
  mysqldump -u root -p mytest > mytest_dump.SQL
  mysql -u root -p -e "CREATE DATABASE mytest1"
  mysql -u root -p mytest1 < mytest_dump.SQL
  mysql -u root -p -e "DROP DATABASE mytesst"

5. 資料庫用戶許可權相關:
  mysql> GRANT ALL PRIVILEGES ON mytest1.* TO test@localhost IDENTIFIED BY 'test';  - 授予用戶test對於資料庫mytest1的所有許可權
  mysql> GRANT SELECT, INSERT, DELETE,... ON mytest1.* TO test@localhost IDENTIFIED BY 'test';  - 授予用戶test指定許可權
  mysql> DELETE FROM user WHERE user = 'test';  - 刪除用戶test
  mysql> FLUSH PRIVILEGES;  - 刷新各用戶許可權
  mysql> select * from user;  - 查詢所有用戶的權利

6. 多表查詢:
  mysql> SELECT salary FROM employees1
    -> UNION (ALL)
    -> SELECT salary FROM employees2;  - 合併employees1與employees2兩表salary結果,無重覆。+(ALL)全列出可重覆
      +--------+
      | salary |
      +--------+
      | 4500 |
      | 5500 |
      | 6500 |
      | 7500 |
      | 8500 |
      | 9500 |
      | 10500 |
      | 11500 |
      +--------+
  三種JOIN查詢方式:http://www.runoob.com/mysql/mysql-join.html

    兩個實例資料庫結構如下:
    mysql> SELECT * FROM tcount_tbl;
    +---------------+--------------+
    | runoob_author | runoob_count |
    +---------------+--------------+
    | 菜鳥教程     |   10   |
    | RUNOOB.COM |   20   |
    | Google     |   22   |
    +---------------+--------------+
    mysql> SELECT * from runoob_tbl;
    +-----------+---------------+---------------+-----------------+
    | runoob_id | runoob_title | runoob_author | submission_date |
    +-----------+---------------+---------------+-----------------+
    | 1     | 學習 PHP  | 菜鳥教程   | 2017-04-12 |
    | 2     | 學習 MySQL | 菜鳥教程   | 2017-04-12 |
    | 3     | 學習 Java  | RUNOOB.COM | 2015-05-01 |
    | 4     | 學習 Python | RUNOOB.COM | 2016-03-06 |
    | 5     | 學習 C   | FK        | 2017-04-05 |
    +-----------+---------------+---------------+-----------------+
    INNER JOIN(內連接,或等值連接):獲取兩個表中欄位匹配關係的記錄

                
      mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a
         -> INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
      等價於:
      mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a, tcount_tbl b
         -> WHERE a.runoob_author = b.runoob_author;
      +-------------+-----------------+----------------+
      | a.runoob_id | a.runoob_author | b.runoob_count |
      +-------------+-----------------+----------------+
    --> | 1 | 菜鳥教程 | 10 |
    --> | 2 | 菜鳥教程 | 10 |
      | 3 | RUNOOB.COM | 20 |
      | 4 | RUNOOB.COM | 20 |
      +-------------+-----------------+----------------+
    LEFT JOIN(左連接):獲取左表所有記錄,即使右表沒有對應匹配的記錄

                
      mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a
         -> LEFT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
      +-------------+-----------------+----------------+
      | a.runoob_id | a.runoob_author | b.runoob_count |
      +-------------+-----------------+----------------+
    --> | 1 | 菜鳥教程 | 10 |
    --> | 2 | 菜鳥教程 | 10 |
      | 3 | RUNOOB.COM | 20 |
      | 4 | RUNOOB.COM | 20 |
      | 5 | FK | NULL |
      +-------------+-----------------+----------------+
    RIGHT JOIN(右連接):與 LEFT JOIN 相反,用於獲取右表所有記錄,即使左表沒有對應匹配的記錄

                
      mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a
         -> RIGHT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
      +-------------+-----------------+----------------+
      | a.runoob_id | a.runoob_author | b.runoob_count |
      +-------------+-----------------+----------------+
    --> | 1 | 菜鳥教程 | 10 |
    --> | 2 | 菜鳥教程 | 10 |
      | 3 | RUNOOB.COM | 20 |
      | 4 | RUNOOB.COM | 20 |
      | NULL | NULL | 22 |
      +-------------+-----------------+----------------+


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文介紹如何獲取視頻中某個時間點的數據 調用以下方法即可,特別註意,在獲取圖片時的參數單位為微秒,不是毫秒 如果錯用了毫秒會一直獲取第一幀的畫面 ...
  • UIScrollViewDelegate - (void)scrollViewDidScroll:(UIScrollView *)scrollView;//scrollview 滾動的時候調用該方法,任何 offset 值改變都會調用該方法. - (void)scrollViewDidZoom:(U ...
  • 最近閑來無事,整理一下UICollectionView的相關方法以備使用 UICollectionViewFlowLayout和UICollectionViewLayout UICollectionViewFlowLayout是UICollectionViewLayout是一個子類,我們通常用的比較 ...
  • 作為從安卓的的入門選手,第一次看到還以為是個第三方呢,從github下來之後感覺不對啊,這麼多東西,後來一搜原來是個插件,而且不用從github上下載。 安裝的方法很簡單。 第一步:打開安卓studio的配置,找到Plugins,在右邊搜索ButterKnife ,你就會看到下麵這個界面。沒有錯,這 ...
  • 最近閑來無事,總結一下 UITableViewDataSource和 UITableViewDelegate方法 UITableViewDataSource @required - (NSInteger)tableView:(UITableView *)tableView numberOfRowsI ...
  • 作為安卓入門選手,在導入第三方的時候才發現居然有兩個build.gradle,我說咋不對啊,原來是導錯了(可能是因為我沒有看安卓培訓的視頻吧)。 那麼就說一下這兩個的作用(一個Project的,一個Module的): 簡單一點來說Project中的gradle是聲明的資源包括依賴項、第三方插件、ma ...
  • Android記憶體泄漏是一個經常要遇到的問題,程式在記憶體泄漏的時候很容易導致OOM的發生。那麼如何查找記憶體泄漏和避免記憶體泄漏就是需要知曉的一個問題,首先我們需要知道一些基礎知識。 Java的四種引用 強引用: 強引用是Java中最普通的引用,隨意創建一個對象然後在其他的地方引用一下,就是強引用,強引 ...
  • Scipy 高端科學計算:http://blog.chinaunix.net/uid-21633169-id-4437868.html import os #引用操作系統函數文件 import scipy.misc #引用scipy包misc模塊 圖像形式存取數組 import numpy as n ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...