所謂夢想,就是永不停息的瘋狂。。。。。
一.基礎
注意:SQL語句一般不區分大小寫,但是一般為了區分保留字和變數名,把保留字大寫,變數名和資料小寫。
1.開啟MySQL服務
sudo service mysql start
2.用root登入
mysql -u root
3.建立資料庫
格式:CREATE DATABASE <資料庫名字>;
eg:
CREATE DATABASE mysql_shiyan;
4.檢視資料庫
show databases;
5.連線資料庫
格式:use <資料庫名字>
eg:
use mysql_shiyan
6.查看錶
show tables;
7.建立表
8.查看錶中所有資料CREATE TABLE employee(id int(10),name char(20),phone int(12));
SELECT * FROM employee;
9.插入資料
INSERT INTO employee(id,name,phone) VALUES(01,'Tom',110110110);
INSERT INTO employee VALUES(02,'Jack',119119119);
INSERT INTO employee(id,name) VALUES(03,'Rose');
10.建立表的同時設定id自增,主鍵和預設值。注意:varchar後面必須給資料長度。
11.建立表的同時設定多個外來鍵,並且照外表的列 當外來鍵的值刪除 本表中對應的列篩除 當外來鍵的值改變 本表中對應的列值改變。。CREATE TABLE student(sid int(10) auto_increment primary key not null, sname varchar(20), gender varchar(10) default 'male');
CREATE TABLE mark(
mid int(10) primary key,
sid int(10),
cid int(10),
score int,
foreign key(sid) references student(sid) on delete cascade on update cascade,
foreign key(cid) references course(cid) on delete cascade on update cascade);
12.SELECT語句的基本格式:
SELECT 要查詢的列名 FROM 表名字 WHERE 限制條件;
SELECT name,age FROM employee;
SELECT name,age FROM employee WHERE age>25;
13.WHERE 後面可以有不止一條限制,而根據條件之間的邏輯關係,可以用 OR(或) 和 AND(且) 連線:
SELECT name,age FROM employee WHERE age<25 OR age>30;
14.And
SELECT name,age FROM employee WHERE age>25 AND age<30;
SELECT name,age FROM employee WHERE age BETWEEN 25 AND 30;
15.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');
16.萬用字元:關鍵字LIKE和萬用字元一起使用,萬用字元代表未知字元,‘_’代表一個未指定字元,‘%’代表不定個未指定字元
SELECT name,age,phone FROM employee WHERE phone LIKE '110110__';
SELECT name,age,phone FROM employee WHERE name LIKE 'J%';
17.對結果排序,用ORDER BY 關鍵詞,預設情況下為升序排列,而使用關鍵詞ASC 和DESC 可指定升序或降序排序。eg:按salary降序
SELECT name,age,salary,phone FROM employee ORDER BY salary DESC;
18內建函式和計算:COUNT(計數),SUM(求和), AVG(求平均值),MAX(最大值),MIN(最小值)。AS關鍵詞可以重新命名SELECT MAX(salary) AS max_salary,MIN(salary) FROM employee;
19.子查詢。例如:想要知道名為“Tom”的員工所在部門做了幾個工程。員工資訊儲存在project表中。
SELECT of_dpt,COUNT(proj_name) AS count_project FROM project WHERE of_dpt IN (SELECT in_dpt FROM employee WHERE name='Tom');
20.連線查詢,基本思想是把兩個或多個表當作一個新的表來操作。其中員工的id和name來自employee表,people_num來自department表:
SELECT id,name,people_num
FROM employee,department
WHERE employee.in_dpt = department.dpt_name
ORDER BY id;
或者使用JOIN ON語法:
SELECT id,name,people_num
FROM employee JOIN department
ON employee.in_ept = department.dpt_name
ORDER BY id;
21.查詢統計用GROUP BY
MysqL group by 用法解析
二.資料庫及表的修改和刪除
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 列名字 資料型別 約束;
設定位置可用AFTER或FIRST關鍵詞(放最後)
5.刪除一列
ALTER TABLE 表名字 DROP COLUMN 列名字;
或: ALTER TABLE 表名字 DROP 列名字;
6.重新命名一列
ALTER TABLE 表名字 CHANGE 原列名 新列名 資料型別 約束;
ALTER TABLE 表名字 MODIFY 列名字 新資料型別;
7.修改表中的某個值
PS:如果不加條件,會導致全表的列全改變。
UPDATE 表名字 SET 列1=值1,列2=值2 WHERE 條件;
8.刪除一行記錄
UPDATE 表名字 SET 列1=值1,列2=值2 WHERE 條件;
三.基本操作
3.1索引
索引是一種與表有關的結構,它的作用相當於書的目錄,可以根據目錄中的頁碼快速找到所需的內容。目的:加快查詢速度
語句格式:
ALTER TABLE 表名字 ADD INDEX 索引名 (列名);
CREATE INDEX 索引名 ON 表名字 (列名);
使用命令SHOW INDEX FROM <表名字>; 可以檢視該表的索引。
3.2檢視
檢視是從一個或多個表中匯出來的表,是一種虛擬存在的表。通過檢視可以看到系統專門提供的資料。
建立檢視的語句格式為:
CREATE VIEW 檢視名(列a,列b,列c) AS SELECT 列1,列2,列3 FROM 表名字;
檢視也可以建立有多張表上,只需在SELECT 語句中使用子查詢或連線查詢。3.3匯入
匯入操作,可以把一個檔案裡的資料儲存進一張表。
匯入語句格式:
LOAD DATA INFILE '檔案路徑' INTO TABLE 表名字;
3.4匯出
匯出與匯入是相反的過程,是把資料庫某個表中的資料儲存到一個檔案之中。
匯出語句基本格式為:
SELECT 列1,列2 INTO OUTFILE '檔案路徑和檔名' FROM 表名字;
3.5備份
備份是把資料庫的結構,包括資料、約束、檢視等全部另存為一個檔案。
使用mysqldump備份的語句:
mysqldump -u root 資料庫名>備份檔名; #備份整個資料庫
mysqldump -u root 資料庫名 表名字>備份檔名; #備份整個表
3.6恢復
用備份檔案恢復資料庫
source /tmp/SQL6/MySQL-06.sql
3.7模式匹配
由MySQL提供的模式匹配的其它型別是使用擴充套件正則表示式。當你對這類模式進行匹配測試時,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE ,它們是同義詞)。
-
‘.’匹配任何單個的字元。
-
字元類“[...]”匹配在方括號內的任何字元。例如,“[abc]”匹配“a”、“b”或“c”。為了命名字元的範圍,使用一個“-”。“[a-z]”匹配任何字母,而“[0-9]”匹配任何數字。
-
“ ”匹配零個或多個在它前面的字元。例如,“x”匹配任何數量的“x”字元,“[0-9]”匹配任何數量的數字,而“.”匹配任何數量的任何字元。
REGEXP
模式與被測試值的任何地方匹配,模式就匹配(這不同於LIKE
模式匹配,只有與整個值匹配,模式才匹配)。
為了定位一個模式以便它必須匹配被測試值的開始或結尾,在模式開始處使用“^”或在模式的結尾用“$”。eg:為了找出以“b”開頭的名字,使用“^”匹配名字的開始:
mysql> SELECT * FROM pet WHERE name REGEXP '^b';
如果你想強制使REGEXP比較區分大小寫,使用BINARY關鍵字使其中一個字元變為二進位制字串。該查詢只匹配名稱首字母的小寫‘b’。
mysql> SELECT * FROM pet WHERE name REGEXP BINARY '^b';
為了找出以”fy“結尾的名字,使用”$“匹配名字的結尾:
mysql> SELECT * FROM pet WHERE name REGEXP 'fy$';
為了找出包含一個”w“的名字,使用以下查詢:
mysql> SELECT * FROM pet WHERE name REGEXP 'w';
為了找出包含正好5個字元的名字,使用”^“和”$“匹配名字的開始和結尾,和5個”."例項在兩者之間:
mysql> SELECT * FROM pet WHERE name REGEXP '^.....$';
也可以使用“{n}”重複n次操作符,重寫前面的查詢:效果同上
mysql> SELECT * FROM pet WHERE name REGEXP '^.{5}$';
3.8計算行數
mysql> SELECT COUNT(*) FROM pet;
想知道每個主人有多少寵物
mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner;