linux下的mysql操做 mysql
一、# 打開 MySQL 服務linux
sudo service mysql startsql
二、#使用 root 用戶登陸,密碼爲空數據庫
mysql -u root函數
三、建立數據庫3d
CREATE DATABASE <數據庫名字>;(注意不要漏掉分號 ;)blog
四、鏈接數據庫排序
use <數據庫名字>;索引
show tables; (能夠查看該數據庫下的表)數學
五、新建數據表
CREATE TABLE 表的名字
(
列名a 數據類型(數據長度),
列名b 數據類型(數據長度),
列名c 數據類型(數據長度)
);
select * from <表的名字>; (查看錶的內容)
六、插入表內容
INSERT INTO 表的名字(列名a,列名b,列名c) VALUES(值1,值2,值3);
七、SQL的約束
約束類型 | 主鍵約束 | 默認值約束 | 惟一約束 | 外鍵約束 | 非空約束 |
關鍵字 | PRIMARY KEY | DEFAULT | UNIQUE | FOREIGN KEY | NOT NULL |
七、1 主鍵約束
主鍵 (PRIMARY KEY)是用於約束表中的一行,做爲這一行的惟一標識符,在一張表中經過主鍵就能準肯定位到一行,所以主鍵十分重要。
主鍵不能有重複且不能爲空。
七、2 默認值約束
默認值約束 (DEFAULT) 規定,當有 DEFAULT 約束的列,插入數據爲空時,將使用默認值。
七、3 惟一約束
惟一約束 (UNIQUE) 比較簡單,它規定一張表中指定的一列的值必須不能有重複值,即這一列每一個值都是惟一的。
七、4 外鍵約束
外鍵 (FOREIGN KEY) 既能確保數據完整性,也能表現表之間的關係。
一個表能夠有多個外鍵,每一個外鍵必須 REFERENCES (參考) 另外一個表的主鍵,被外鍵約束的列,取值必須在它參考的列中有對應值。
七、5 非空約束
非空約束 (NOT NULL),聽名字就能理解,被非空約束的列,在插入值時必須非空。
八、select語句
八、1 select語句的基本格式:
SELECT 要查詢的列名 FROM 表名字 WHERE 限制條件;
八、2 數學符號條件
SELECT name,age FROM employee WHERE age>25;
SELECT name,age,phone FROM employee WHERE name='Mary';
八、3 「AND"與「OR」
#篩選出 age 小於 25,或 age 大於 30
SELECT name,age FROM employee WHERE age<25 OR age>30;
#篩選出 age 大於 25,且 age 小於 30
SELECT name,age FROM employee WHERE age>25 AND age<30;
而剛纔的限制條件 age>25 AND age<30 ,若是須要包含25和30這兩個數字的話,能夠替換爲 age BETWEEN 25 AND 30
八、4 IN 和NOT IN
SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt IN ('dpt3','dpt4');
SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt NOT IN ('dpt1','dpt3');
八、5 通配符
關鍵字 LIKE 在SQL語句中和通配符一塊兒使用,通配符表明未知字符。SQL中的通配符是 _ 和 % 。
其中 _ 表明一個未指定字符,% 表明不定個未指定字符。
好比,要只記得電話號碼前四位數爲1101,然後兩位忘記了,則能夠用兩個 _ 通配符代替:
SELECT name,age,phone FROM employee WHERE phone LIKE '1101__';
另外一種狀況,好比只記名字的首字母,又不知道名字長度,則用 % 通配符代替不定個字符:
SELECT name,age,phone FROM employee WHERE name LIKE 'J%';
八、6 對結果排序
爲了使查詢結果看起來更順眼,咱們可能須要對結果按某一列來排序,這就要用到 ORDER BY 排序關鍵詞。
默認狀況下,ORDER BY的結果是升序排列,而使用關鍵詞ASC和DESC可指定升序或降序排序。
好比,咱們按salary降序排列,SQL語句爲:
SELECT name,age,salary,phone FROM employee ORDER BY salary DESC;
八、7 內置函數與計算
函數名: COUNT SUM AVG MAX MIN
做用: 計數 求和 求平均值 最大值 最小值
八、8 子查詢
上面討論的 SELECT 語句都僅涉及一個表中的數據,然而有時必須處理多個表才能得到所需的信息。
例如:想要知道名爲 "Tom" 的員工所在部門作了幾個工程。員工信息儲存在 employee 表中,但工程信息儲存在project 表中。
對於這樣的狀況,咱們能夠用子查詢:
SELECT of_dpt,COUNT(proj_name) AS count_project FROM project GROUP BY of_dpt
HAVING of_dpt IN
(SELECT in_dpt FROM employee WHERE name='Tom');
八、9 鏈接查詢
在處理多個表時,子查詢只有在結果來自一個表時纔有用。但若是須要顯示兩個表或多個表中的數據,這時就必須使用鏈接 (join) 操做。
鏈接的基本思想是把兩個或多個表看成一個新的表來操做,以下:
SELECT id,name,people_num
FROM employee,department
WHERE employee.in_dpt = department.dpt_name
ORDER BY id;
這條語句查詢出的是,各員工所在部門的人數,其中員工的 id 和 name 來自 employee 表,people_num 來自 department 表
九、數據庫及表的刪除和修改
九、1 對數據庫的修改
DROP DATABASE <數據庫名> (傳說中的從入門到刪庫)
九、2 對一張表的修改
重命名一張表:
RENAME TABLE 原名 TO 新名字;
ALTER TABLE 原名 RENAME 新名;
ALTER TABLE 原名 RENAME TO 新名;
九、3 刪除一張表
DROP TABLE <表名>
九、4 對一列的修改(即對錶結構的修改)
一、增長一列:
ALTER TABLE 表名字 ADD COLUMN 列名字 數據類型 約束;
ALTER TABLE 表名字 ADD 列名字 數據類型 約束;
好比咱們新增一列 weight (體重)放置在 age (年齡)的後面:
ALTER TABLE employee ADD weight INT(4) DEFAULT 120 AFTER age;
若是想放在第一列的位置,則使用 FIRST 關鍵詞,如語句:
ALTER TABLE employee ADD test INT(10) DEFAULT 11 FIRST;
二、刪除一列:
刪除表中的一列和剛纔使用的新增一列的語句格式十分類似,只是把關鍵詞 ADD 改成 DROP ,
語句後面不須要有數據類型、約束或位置信息。具體語句格式:
ALTER TABLE 表名字 DROP COLUMN 列名字;
或: ALTER TABLE 表名字 DROP 列名字;
三、重命名一列:
這條語句其實不僅可用於重命名一列,準確地說,它是對一個列作修改(CHANGE) :
ALTER TABLE 表名字 CHANGE 原列名 新列名 數據類型 約束;
四、改變數據類型:
要修改一列的數據類型,除了使用剛纔的CHANGE語句外,還能夠用這樣的MODIFY語句:
ALTER TABLE 表名字 MODIFY 列名字 新數據類型;
再次提醒,修改數據類型必須當心,由於這可能會致使數據丟失。
九、5 對錶的內容修改
一、修改表中某個值:
UPDATE 表名字 SET 列1=值1,列2=值2 WHERE 條件;
注:必定要加WHERE的條件
二、刪除一行記錄:
刪除表中的一行數據,也必須加上WHERE條件,不然整列的數據都會被刪除。刪除語句:
DELETE FROM 表名字 WHERE 條件;
十、其餘基本操做
索引:能夠加快查詢速度
視圖:是一種虛擬存在的表
導入:從文件中導入數據到表
導出:從表中導出到文件中
備份:mysqldump 備份數據庫到文件
恢復:從文件恢復數據庫
一、索引
索引是一種與表有關的結構,它的做用至關於書的目錄,能夠根據目錄中的頁碼快速找到所需的內容。
當表中有大量記錄時,若要對錶進行查詢,沒有索引的狀況是全表搜索:將全部記錄一一取出,和查詢條件進行一一對比,
而後返回知足條件的記錄。這樣作會消耗大量數據庫系統時間,並形成大量磁盤 I/O 操做。
而若是在表中已創建索引,在索引中找到符合查詢條件的索引值,經過索引值就能夠快速找到表中的數據,能夠大大加快查詢速度。
對一張表中的某個列創建索引,有如下兩種語句格式:
ALTER TABLE 表名字 ADD INDEX 索引名 (列名);
CREATE INDEX 索引名 ON 表名字 (列名);
二、視圖
視圖是從一個或多個表中導出來的表,是一種虛擬存在的表。它就像一個窗口,經過這個窗口能夠看到系統專門提供的數據,
這樣,用戶能夠不用看到整個數據庫中的數據,而只關心對本身有用的數據。
注意理解視圖是虛擬的表:
數據庫中只存放了視圖的定義,而沒有存放視圖中的數據,這些數據存放在原來的表中;
使用視圖查詢數據時,數據庫系統會從原來的表中取出對應的數據;
視圖中的數據依賴於原來表中的數據,一旦表中數據發生改變,顯示在視圖中的數據也會發生改變;
在使用視圖的時候,能夠把它看成一張表。
建立視圖的語句格式爲:
CREATE VIEW 視圖名(列a,列b,列c) AS SELECT 列1,列2,列3 FROM 表名字;
三、導入
導入操做,能夠把一個文件裏的數據保存進一張表。導入語句格式爲:
LOAD DATA INFILE '文件路徑和文件名' INTO TABLE 表名字;
四、導出
導出與導入是相反的過程,是把數據庫某個表中的數據保存到一個文件之中。導出語句基本格式爲:
SELECT 列1,列2 INTO OUTFILE '文件路徑和文件名' FROM 表名字;
注意:語句中 「文件路徑」 之下不能已經有同名文件。
五、備份
備份與導出的區別:
導出的文件只是保存數據庫中的數據;
而備份,則是把數據庫的結構,包括數據、約束、索引、視圖等所有另存爲一個文件。
mysqldump 是 MySQL 用於備份數據庫的實用程序。
它主要產生一個 SQL 腳本文件,其中包含從頭從新建立數據庫所必需的命令CREATE TABLE INSERT 等。
使用 mysqldump 備份的語句:
mysqldump -u root 數據庫名>備份文件名; #備份整個數據庫
mysqldump -u root 數據庫名 表名字>備份文件名; #備份整個表
六、恢復
用備份文件恢復數據庫,其實咱們早就使用過了。在本次實驗的開始,咱們使用過這樣一條命令:
source /tmp/SQL6/MySQL-06.sql
這就是一條恢復語句,它把 MySQL-06.sql 文件中保存的mysql_shiyan 數據庫恢復。
輸入語句進行恢復,把備份的 bak.sql 恢復到 test 數據庫:
mysql -u root test < bak.sql