一、數據庫基礎操做語句mysql
連接數據庫:mysql -u root -p 123456;正則表達式
選擇數據庫:USE database_name;算法
顯示能夠數據庫:SHOW DATABASES;sql
顯示數據庫全部表:SHOW TABLES;數據庫
顯示錶的列:SHOW COLUMNS FROM table_name;安全
二、檢索數據服務器
檢索單個列:SELECT prod_name FROM table_name;函數
檢索多個列:SELECT prod_id,prod_name,prod_price FROM table_name;spa
檢索全部列:SELECT * FROM table_name;orm
檢索不一樣的行:SELECT DISTINCT prod_id FROM table_name;
如今結果:SELECT prod_name FROM table_name LIMIT 5; 至多返回前5行
SELECT prod_name FROM table_name LIMIT 5,5; 返回從5行開始的5行
使用徹底限定的表面:SELECT products.prod_nam FROM products;
三、排序檢索數據
排序數據:SELECT prod_name FROM products ORDER BY prod_name;
按多個列排序:SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price,prod_name;
指定排序方向:SELECT prod_name FROM products ORDER BY prod_name DESC; 默認升序排序,DESC降序排序
SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price DESC,prod_name;
四、過濾數據
使用WHERE字句:SELECT prod_name FROM products WHERE prod_price = 2.5;
WHERE字句操做符:= <>(不等於) != < > <= >= BETWEEN
範圍值檢查:SELECT prod_name FROM products WHERE prod_price BETWEEN 5 AND 10;
空值檢查:SELECT prod_name FROM products WHERE prod_price IS NULL;
五、數據過濾
AND操做符:SELECT prod_name FROM products WHERE prod_price < 10 AND prod_id = 100;
OR操做符:SELECT prod_name FROM products WHERE prod_price = 10 OR prod_price = 20;
IN操做符:SELECT prod_name FROM products WHERE prod_price IN (10,20,30);
NOT操做符:SELECT prod_name FROM products WHERE prod_price NOT IN (10,20,30);
六、用通配符進行過濾
百分號(%)通配符:SELECT prod_name FROM products WHERE prod_name LIKE '%jet%'; %匹配任何個數字符
下滑先(_)通配符:SELECT prod_name FROM products WHERE prod_name LIKE '_ ton anvil'; _匹配一個字符
七、用正則表達式進行搜索
基本字符匹配:SELECT prod_name FROM products WHERE prod_name REGEXP '1000';
正則特殊字符:.(任意匹配一個字符) |(或) []
八、計算字段
拼接字段:SELECT Concat(ventor_name, '(', ventor_country, ')') FROM ventors ORDER BY ventor_name;
去掉有邊的全部空格:SELECT Concat(RTrim(ventor_name), '(', RTirm(ventor_country), ')') FROM ventors ORDER BY ventor_name; (LTrim去掉左邊空格,Trim去掉左右邊空格)
使用別名:SELECT Concat(ventor_name, '(', ventor_country, ')') AS ventor_title FROM ventors ORDER BY ventor_name;
執行算數運算:SELECT prod_id,quantity,item_price,quantity*item_price AS expanded_price FROM orderitems WHERE order_num = 20005; (支持 + - * /)
九、使用數據處理函數
去除右邊列值右邊空格:RTirm()
去除左邊列值右邊空格:LTirm()
去除左右邊列值右邊空格:Tirm()
將文本轉換爲大寫:Upper()
將穩步轉換爲小寫:Lower()
返回串的長度:Length()
返回串左邊的字符:Left()
返回串右邊的字符:Right()
將任何文本串轉爲描述其語言表示的字母數字模式算法:Soundex()
日期和時間處理函數
增長一個日期(天、周等):AddDate()
增長一個時間(時、分等):AddTime()
返回當前日期:CurDate()
返回當前時間:CurTime()
返回日期時間的日期部分:Date()
計算連個日期之差:DateDiff()
高度靈活的日期運算函數:Date_Add()
返回一個格式化的日期或時間串:Date_Format()
返回一個日期的年數部分:Year()
返回一個日期的月數部分:Month()
返回一個日期的天數部分:Day()
對於一個日期,返回對應的星期幾:DayOfWeek()
返回一個時間的小時部分:Hour()
返回一個時間的分鐘部分:Minute()
返回一個時間的秒鐘部分:Second()
返回一個日期時間的時間部分:Time()
返回當前日期和時間:Now()
十、彙總數據-彙集函數
返回某列的平均值:AVG()
SELECT AVG(prod_price) AS avg_price FROM products;
返回某列的行數:COUNT()
SELECT COUNT(*) AS prod_count FROM products;
返回指定列的最大值:MAX()
SELECT MAX(prod_price) AS max_price FROM products;
返回指定列的最小值:MIN()
SELECT MIN(prod_price) AS min_price FROM products;
返回某列之和:SUM()
SELECT SUM(prod_price) AS sum_price FROM products;
彙集不一樣值:DISTINCT
SELECT AVG(DISTINCT prod_price) AS avg_price FROM products;
十一、分組數據
建立分組:GROUP BY
SELECT ventor_id,COUNT(*) AS num_prods FROM products GROUP BY ventor_id;
過濾分組:HAVING
SELECT ventor_id,COUNT(*) AS num_prods FROM products GROUP BY ventor_id HAVING COUNT(*)>2;
SELECT字句順序
SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... LIMIT
十二、使用子查詢
利用子查詢進行過濾
SELECT cust_name FROM customers WHERE cust_id IN (
SELECT cust_id FROM orders WHERE order_num IN (
SELECT order_num FROM orderitems WHERE order_id = 'TNT2'
)
);
做爲計算字段使用子查詢
SELECT cust_name,(
SELECT COUNT(*) FROM orders WHERE orders.cust_id = customers.cust_id
) AS orders FROM customers ORDER BY cust_name;
1三、聯結表
等值聯結
SELECT ventor_name,prod_name,prod_price FROM ventors,products WHERE ventors.ventor_id = products.ventor_id ORDER BY ventor_name,prod_name;
SELECT ventor_name,prod_name,prod_price FROM ventors INNER JOIN products ON ventors.ventor_id= products.ventor_id;
自聯結
SELECT prod_id,prod_name FROM products WHERE vend_id = (
SELECT vend_id FROM products WHERE prod_id = 'DTNTR'
);
SELECT p1.prod_id,p1.prod_name FROM products AS p1,products AS p2 WHERE p1.vend_id=p2.vend_id AND p2.prod_id = 'DTNTR';
外部聯結
SELECT customers.cust_id,orders.order_num FROM customers RIGHT OUTER JOIN orders IN customers.cust_id=orders.cust_id;
SELECT customers.cust_id,orders.order_num FROM customers LEFT OUTER JOIN orders IN customers.cust_id=orders.cust_id;
1四、組合查詢
建立組合查詢
SELECT vend_id,prod_id,prod_price FROM products WHERE prod_price <= 5
UNION
SELECT vend_id,prod_id,prod_price FROM products WHERE vend_id IN (1001,1002);
1五、插入數據
插入完整的行
INSERT INTO customers(cust_id,cust_name_cust_age) VALUES(10002,'xxx',28);
插入多行
INSERT INTO customers(cust_id,cust_name_cust_age) VALUES(10002,'xxx',28),(10003,'yyy',18);
插入檢索出的數據
INSERT INTO customers(cust_id,cust_name_cust_age) SELECT cust_id,cust_name_cust_age FROM custnew;
1六、更新和刪除數據
UPDATE customers SET cust_name='ddd',age='40 WHERE cust_id = 100001;
DELETE FROM customers WHERE cust_id = 100001;
1七、建立和操縱表
建立
CREATE TABLE customers(
cust_id int NOT NULL AUTO_INCREMENT,
cust_name char(50) NOT NULL,
cust_age int NOT NULL DEFAULT 10,
PRIMARY KEY(cust_id)
)ENGINE=InnoDB;
更新
給表插入一個列:ALTER TABLE vendors ADD vend_phone CHAR(20);
刪除一個列:ALTER TABLE vendors DROP vend_phone;
刪除表:DROP TABLE vendors;
重命名錶:RENAME TABLE vendors TO vendors1;
1八、使用視圖
利用視圖簡化複雜的聯結
CREATE VIEW productcustomers AS
SELECT cust_name,cust_contact,pro_id FROM customers, orders, orderitems WHERE customers.cust_id=orders.cust_id AND orders.order_num=orderitems.order_num;
SELECT cust_name,cust_contact FROM productcustomers WHERE prod_id='100002';
1九、使用存儲過程
執行存儲過程
CALL productpricing(@pricelow,@prichigh,@priceaverage);
建立存儲過程
DELIMITER //
CREATE PROCEDURE productpricing()
BEGIN
SELECT AVG(prod_price) AS priceaverage FROM products;
END //
DELIMITER ;
刪除存儲過程:DROP PROCEDURE productpricing;
傳入返回參數
DELIMITER //
CREATE PROCEDURE productpricing(OUT p1 DECIMAL(8,2),OUT p2 DECIMAL(8,2),OUT p3 DECIMAL(8,2))
BEGIN
SELECT MIN(prod_price)
INTO p1
FROM products;
SELECT MAX(prod_price)
INTO p2
FROM products;
SELECT AVG(prod_price)
INTO p3
FROM products;
END//
DELIMITER ;
CALL productpricing(@max,@min,@avg);
SELECT @max,@min,@avg;
傳入使用參數
DELIMITER //
CREATE PROCEDURE ordertotal(IN onmuber INT, OUT ototal DECIMAL(8,2))
BEGIN
SELECT SUM(item_price*quantity) FROM orderitems WHERE order_num = onumber INTO ototal;
END//
DELIMITER ;
CALL ordertotal(2005,@ototal);
檢測存儲過程:SHO CREATE PROCEDURE ordertotal;
20、使用觸發器
只支持DELETE/INSERT/UPDATE語句,BEFORE和AFTER事件
建立觸發器:CREATE TRIGGER newproduct AFTER INSERT ON products FOR EACH ROW SELECT 'prodcuct add';
刪除觸發器:DROP TRIGGER newproduct;
INSERT觸發器:可引用一個名爲NEW的虛擬表,訪問被插入的值,在BEFORE INSERT 觸發器中,NEW中的值也能夠被更新,對於AUTO_INCREMENT列,NEW在INSERT執行以前包含0,在INSERT執行以後包含新的自動生成值
CREATE TRIGGER neworder AFTER INSERT ON orders FOR EACH ROW SELECT NEW.order_num;
DELETE觸發器:可引用一個名爲OLD的虛擬表,訪問被刪除的行,OLD中的值全都是隻讀的,不能更新
CREATE TRIGGER deleteorder BEFORE DELETE ON orders FOR EACH ROW
BEGIN
INSERT INTO archive_order(order_num,order_date,cust_id) VALUE (OLD.order_num,OLD.order_date,OLD.cust_id);
END;
因爲某種緣由,BEGIN END 內執行失敗,DELETE自己將被放棄。
UPDATE觸發器:可引用一個名爲OLD的虛擬表訪問之前的值,引用一個名爲NEW的虛擬表訪問更新的值;在BEFORE UPDATE觸發器中,NEW中的值容許被修改;OLD中的值全都是隻讀
CREATE TRIGGER updatevendor BEFORE UPDATE ON vendors FOR EACH ROW SET NEW.vend_state = UPPER(NEW.vend_state);
2一、管理事務處理
關鍵詞:
事務(transaction)指一組SQL語句
回退(rollback)指撤銷指定SQL語句的過程
提交(commit)指將未存儲的SQL語句結果寫入數據庫
保留點(savepoint)指事務處理中設置的臨時佔位符,你能夠對它發佈回退(與回退整個事務處理不一樣)
事務的開始:START TRANSACTION
事務的回退:ROLLBACK
START TRANSACTION;
DELETE FROM orders;
ROLLBACK;
事務的提交:COMMIT
START TRANSACTION;
DELETE FROM orders;
COMMIT;
設置保留點:SAVEPOINT delete1;
ROLLBACK TO delete1;
2二、安全管理
MySQL用戶帳號和信息存儲在名爲mysql的數據庫中
USE mysql;
SELECT user FROM user;
建立用戶帳號
CREATE USER ben IDENTIFIED BY 'xxxxx';
重命名用戶名
RENAME USER ben TO bforta;
刪除用戶帳號
DROP USER bforta;
設置訪問權限
查看用戶權限:SHOW GRANTS FOR bforta;
設置權限:GRANT SELECT ON crashcourse.* TO bforta;
撤銷權限:REVOKE SELECT ON crashcourse.* FROM bforta;
GRANT和REVOKE可在幾個層次上控制訪問權限:
整個服務器,使用GRANT ALL和REVOKE ALL
整個數據庫:使用ON database.*
特定的表:使用ON database.table
權限:
ALL:除GRANT OPTION外全部權限
ALTER:使用ALTER TABLE
ALTER ROUTINE:使用ALTER PROCEDURE和DROP PROCEDURE
CREATE:使用CREATE TABLE
CREATE ROUTINE:使用CREATE PROCEDURE
CREATE TEMPORARY:使用CREATE TEMPORARY TABLE
CREATE USER:使用CREATE USER/DROP USER/RENAME USER/REVOKE ALL PRIVILEGES
CREATE VIEW:使用CREATE VIEW
DELETE:使用DELETE
DROP:使用DROP TABLE
EXECUTE:使用CALL和存儲過程
FILE:使用SELECT INTO OUTFILE和LOAD DATA INFILE
GRANT OPITION:使用GRANT和REVOKE
INDEX:使用CREATE INDEX和DROP INDEX
INSERT:使用INSERT
LOCK TABLES:使用LOCK TABLES
PROCESS:使用SHOW FULL PROCESSLIST
RELOAD:使用FLUSH
REPLICATION CLIENT:服務器位置的訪問
REPLICATION SLAVE:由複製從屬使用
SELECT:使用SELECT
SHOW DATABASES:使用SHOW DATABASES
SHOW VIEW:使用SHOW CREATE VIEW
SHUTDOWN:使用mysqladmin shutdown(用來關閉MySQL)
SUPER:使用CHANGE MASTER/KILL/LOGS/PURGE/MASTER/SET GLOBAL,
UPDATE:使用UPDATE
USAGE:無訪問權限