程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL學習之路(1):SQL腳本語言,mysql腳本語言

MySQL學習之路(1):SQL腳本語言,mysql腳本語言

編輯:MySQL綜合教程

MySQL學習之路(1):SQL腳本語言,mysql腳本語言


 使用MySQL數據庫,首先安裝MySQL數據庫,本文所有SQL腳本在MySQL上測試和執行。

安裝Mysql服務器;
安裝Mysql workbench客戶端,可以以圖形化界面管理mysql;
安裝phpMyadmin客戶端,可以通過bs方式圖形化管理Mysql;

1. Mysql服務器操作


 

windows下為例,win+r 進入cmd界面

啟動服務器:net start mysql
停止服務器:net stop mysql
連接服務器:mysql -h localhost -u root -p password

2. Database基本操作


 

create database db_bookstore; //創建數據庫:
use database db_bookstore; //使用數據庫: 
drop database db_bookstore; //刪除數據庫:

 

3. DDL 表操作


 

(1)創建表

creat table table_name(id int not null auto_increment primary key,
name char(50)
) if not exists;

(2)查看表結構

show columns from tb_name from db_name;
desc table_name;

(3)刪除表:

drop table tb_name if exists;

(4)修改表: alter tb_name alter/modify/change [column] ...
ALTER COLUMN:設置或刪除列的默認值(操作速度非常快)
例子:

alter table film alter column rental_duration set default 5; 
alter table film alter column rental_duration drop default;

CHANGE COLUMN:列的重命名、列類型的變更以及列位置的移動
例子:

ALTER TABLE MyTable CHANGE COLUMN foo bar VARCHAR(32) NOT NULL FIRST; 
ALTER TABLE MyTable CHANGE COLUMN foo bar VARCHAR(32) NOT NULL AFTER baz;

MODIFY COLUMN:除了不能給列重命名之外,他干的活和CHANGE COLUMN是一樣的
例子:

ALTER TABLE MyTable MODIFY COLUMN foo VARCHAR(32) NOT NULL AFTER baz;

(5)重命名表

ALTER tb_name RENAME [AS] new_tb_name;
RENAME TABLE tb_name TO new_tb_name;

注意:[]內的是可以選擇的,包括change,modify,alter後滿的COLUMN

 

4. DML語言:數據操縱語言

(1)插入

 

INSERT INTO tb_name(field1,...) VALUES(value1,...);

 

(2)修改

UPDATE tb_name SET f1=v1,f2=v2...;

(3)刪除

DELETE FROM tb_name WHERE condition

5.DQL:數據查詢,SELECT專題


 

SELECT f1,f2,... FROM tb_name
WHERE primary_constraint
GROUP BY grouping_columns
ORDER BY column_name DESC/ASC
HAVING secdonary_constraint
LIMIT count;

 關鍵語法:

SELECT *
SELECT DISTINCT *
SELECT TOP count *

 

(1)單表查詢

SELECT * FROM tb_name; // 所有字段
SELECT id,name FROM tb_name; // 指定字段
SELECT * FROM tb_name WHERE id<5 // 查詢符合條件的字段

(2)IN, NOT IN, BETWEEN AND (這是指明字段的范圍,後面還有一個IN用於子查詢)

SELECT * FROM tb_name WHERE id IN(1,2,3);
SELECT * FROM tb_name WHERE id NOT IN(1,2,3);
SELECT * FROM tb_name WHERE id BETWEEN 1 AND 5;

(3)使用LIKE + 通配符

%:匹配一個或者多個字符
_: 匹配任意單個字符

SELECT * FROM tb_name WHERE user LIKE 'm%r_';// 以m開頭,中間若干個字符,r後面一個字符結尾

(4)空值查詢IS NULL,IS NOT NULL

SELECT * FROM tb_name WHERE row IS NULL;
SELECT * FROM tb_name WHERE row IS NOT NULL;

(5)多條件查詢AND, OR

SELECT * FROM tb_name WHERE id=1 AND name='Jack';
SELECT * FROM tb_name WHERE id=1 OR name='Jack';

(6)去掉重復行

SELECT DISTINCT * FROM tb_name;

(7)使用ORDER BY [ASC/DESC]

SELECT * FROM tb_name ORDER BY id DESC
SELECT * FROM tb_name ORDER BY id ASC

(8)GROUP BY 子句
注意:沒有出現在GROUP BY子句中的字段,不能出現在SELECT 子句中,聚合函數除外
如果SELECT 子句出現GROUP BY中沒有出現的字段,則結果只顯示每一組的一條記錄;
一般形式為:

SELECT field,func_name(field) FROM tb_name GROUP BY field;

(9)多字段分組: 2個字段的笛卡爾積

SELECT field1,field2 FROM tb_name GROUP BY field1,field2;

(10)LIMIT限制結果集

SELECT * FROM db_name WHERE id<5 LIMIT 3; // 顯示結果的3行
SELECT * FROM db_name WHERE id<5 LIMIT 5,10; // 從第5行開始,的10行

(11)聚合函數:MIN(),AGV,MAX,COUNT
聚合函數的特點是根據一組數據計算出一個值,聚合函數只能對非NULL值進行計算,NULL值被忽略;

(12)連接查詢:

    理解:就是有至少2張表,查詢結果是兩張表滿足某種條件的拼接;
        不帶查詢條件,則是2張表的笛卡爾積;

①內連接查詢,最常見的是等值連接

SELECT * FROM tb_left,tb_right WHERE tb_left.id=tb_right.id;
SELECT * FROM tb_left INNER JOIN tb_right WHERE tb_left.id=tb_right.id;

 

②外連接查詢:
左外連接: 內連接結果,還包含不符合條件的左表數據,右表相應列加NULL

SELECT * FROM tb_left LEFT [OUTER] JOIN tb_right WHERE tb_left.id=tb_right.id;

右外連接:

SELECT * FROM tb_left RIGHT [OUTER] JOIN tb_right WHERE tb_left.id=tb_right.id;

全外連接:

SELECT * FROM tb_left FULL OUTER JOIN tb_right WHERE tb_left.id=tb_right.id;

(13)子查詢:

 ①IN

SELECT * FROM tb_name WHERE id IN(SELECT id FROM tb_2);

②ANY

SELECT * FROM tb_name WHERE id<ANY(SELECT id FROM tb_2);

③ALL

SELECT * FROM tb_name WHERE id<ALL(SELECT id FROM tb_2);

④EXISTS 子查詢返回一個bool值

SELECT * FROM tb_1 WHERE row>=90 AND EXISTS(SELECT * FROM tb_2 WHERE score='優秀');
// 如果有score為優秀的記錄,則查詢 row>=90的記錄

⑤關系運算,子查詢返回唯一值

 

SELECT * FROM tb_name WHERE id >(SELECT id FROM tb_2 WHERE id=1);

注:子查詢一般都是一個單列列表,SELECT list FROM tb_name; list為單列列表
  使用EXISTS時候除外;
  使用關系運算符是子查詢返回唯一值;

(14)合並查詢結果

UNION: 合並查詢結果,除去相同的行
UNION ALL : 合並查詢結果,簡單的把兩個集合的元素混合

SELECT id,name UNION SELECT id,author; // 正確
SELECT id,name UNION SELECT id; // 錯誤,字段數目不同,無法UNION

注意:前提條件是,左邊和右邊的字段列表的字段數必須相同


6. Mysql函數


 

6.1 數學函數

(1)ABS(X) 取絕對值

SELECT ABS(-1); // 結果為1

(2)取整函數

CEIL(); // 向上取整
FLOOR(); // 向下取整

(3)隨機數生成器

RAND(); // 0-1 隨機數
RAND(X); // 產生0-1隨機數,x相同時,隨機數相同

(4)符號檢測器

SIGN(X); // 返回-1,0,1作為參數的符號

(5)圓周率

SIGN(X); // 返回-1,0,1作為參數的符號

(6)小數位截斷函數

TRUNCATE(X,Y) // 保留x後y位小數

(7)圓整(向最近的整數靠近)

ROUND(X) // 返回離X最近的整數
ROUND(X,Y) // 返回x,後面保留y位小數,截斷時四捨五入
                 // 例如ROUND(3.1415,3)=3.142

(8)平方、開方

POW(X,Y) // x的y次方
SQRT(X); // 對x開平方
MOD(X,Y) // 求余數

(9)指數對數

EXP(X); // e的x次方
LOG(X);
LOG10(X); 

(10)弧度角度轉換

DEGREES(radians) // 弧度---角度
RADIANS(degree) // 度數---弧度 

(11)三角函數

SIN(X); // x是弧度
ASIN(X);
COS(X);
ACOS(X);
TAN(X);
ATAN(X);
COT(X);

 

6.2 字符串函數


 (1)長度

CHAR_LENGTH(str);

(2)轉換大小寫

UPPER(str);UCASE(str);
LOWER(str);LCASE(str);

(3)修剪函數(針對前導、結尾空格)

LTRIM(s);RTRIM(s);TRIM(s);//刪除引導空格;結尾空格;引導和結尾空格
TRIM(s1 from s_src); //刪除s2開始和結尾處的s1

(4)替換、子串、反轉

REPLACE(s,s1,s2); //用s2替換s中的s1
SUBSTRING(s,n,len); //s處n開始長度為len的字符串
LEFT(s,n),RIGHT(s,n) //返回左邊或者右邊長度為n的字符串
REVERSE(s); //字符串倒序

更多請參考:PHP 學習路線圖《MySQL快速入門》

 

6.3 日期和時間函數---------DATE
        |----------TIME


 (1)日期、時間

CURRENT_DATE(); // 2014-08-07
CURRENT_TIME(); // 10:30:30

(2)日期和時間(時間戳)

NOW(); // 2014-08-07 10:30:30
CURRENT_TIMESTAMP();// 2014-08-07 10:30:30

LOCALTIME(); // 2014-08-07 10:30:30
LOCALTIMESTAMP(); // 2014-08-07 10:30:30
SYSDATE(); // 2014-08-07 10:30:30

(3)以秒形式的時間戳

UNIX_TIMESTAMP(); // 當前UNIX時間戳
UNIX_TIMESTAMP(d); 
FROM_UNIXTIME(d);

(4)年月日、時分秒

YEAR(d);
MONTH(d);
DAY(d);
HOUR(t);
MINUTE(t);
SECOND(t);

(5)工具函數

DATEDIFF(d1,d2) // d1-d2 的天數,d1是最近的日期,d2是早些的日期
ADDDATE(d,n);
SUBDATE(d,n);

更多請參考:PHP 學習路線圖《MySQL快速入門》

 

6.4 條件判斷函數


 

6.5 系統信息函數


(1)版本號、連接數

VERSION(); // 獲取版本
CONNECTION_ID(); // 獲取連接數

(2)當前數據庫名

DATABASE();SCHEMA(); // 當前數據庫

(3)當前用戶

USER();SYSTEM_USER();SESSON_USER(); // 當前用戶
CURRENT_USER();

(4)字符集

CHARSET();

(5)最後插入的ID

LAST_INSERT_ID();


6.6 加密函數


 

MD5(str); // 普通數據加密
PASSWORD(s); // 不可逆加密,對用戶名加密

ENCODE(str_dst,pass_str); // 用pass_str加密str_dst,返回二進制數,用blob類型存儲
DECODE(crypt_str,psss_str);// 用pass_str解密crpyt_str,加密和解密用的pass_str相同

 


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved