此篇文章是簡單整理, 參考
數(shù)據(jù)庫
1.進(jìn)入根的數(shù)據(jù)庫
mysql -u root -p
* 輸入你的密碼
* 如初始密碼太長, 想改密碼:
- set password for root@localhost = password('yourpass');
- FLUSH PRIVILEGES;
2.進(jìn)入遠(yuǎn)程數(shù)據(jù)庫
假設(shè)遠(yuǎn)程主機(jī)的IP為:23.106.134.88,用戶名為root,密碼為123456
打開終端,輸入如下命令:
mysql -h 23.106.134.88 -u root -p 123456
3.退出
exit
3.數(shù)據(jù)庫
創(chuàng)建一個(gè)名字為mydatabase數(shù)據(jù)庫:
- create database mydatabase;
顯示所有的數(shù)據(jù)庫:
- show databases;
更改數(shù)據(jù)庫名字:
- alter databases Hdatabase;
更改數(shù)據(jù)庫mydatabase的字符集:
- alter database mydatabase charset GBK;
進(jìn)入數(shù)據(jù)庫:
- use mydatabase;
刪除名為xhkdb的數(shù)據(jù)庫:
- drop database xhkdb;
表
進(jìn)入數(shù)據(jù)庫后,查看該數(shù)據(jù)庫中的表:
- show tables;
創(chuàng)建表:
- CREATE TABLE table_name (column_name column_type);
- 數(shù)據(jù)庫中創(chuàng)建數(shù)據(jù)表runoob_tbl:
CREATE TABLE IF NOT EXISTS runoob_tbl(
runoob_id INT UNSIGNED AUTO_INCREMENT,
runoob_title VARCHAR(100) NOT NULL,
runoob_author VARCHAR(40) NOT NULL,
submission_date DATE,
PRIMARY KEY ( runoob_id )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
- 實(shí)例解析:
* 如果你不想字段為 NULL 可以設(shè)置字段的屬性為 NOT NULL, 在操作數(shù)據(jù)庫時(shí)如果輸入該字段的數(shù)據(jù)為NULL ,就會(huì)報(bào)錯(cuò)。
* AUTO_INCREMENT定義列為自增的屬性,一般用于主鍵,數(shù)值會(huì)自動(dòng)加1。
* PRIMARY KEY關(guān)鍵字用于定義列為主鍵。 您可以使用多列來定義主鍵,列間以逗號分隔。
* ENGINE 設(shè)置存儲(chǔ)引擎,CHARSET 設(shè)置編碼。
- 具體
獲取表結(jié)構(gòu):
- desc 表名
- 或者show columns from 表名
刪除表:
- drop table <表名>
- 插入數(shù)據(jù)
INSERT INTO table_name ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );
* 如果數(shù)據(jù)是字符型,必須使用單引號或者雙引號,如:"value"。
insert into test (name,sex) values("name1",1);
* 注意: 使用箭頭標(biāo)記 -> 不是 SQL 語句的一部分,它僅僅表示一個(gè)新行,如果一條SQL語句太長,我們可以通過回車鍵來創(chuàng)建一個(gè)新行來編寫 SQL 語句,SQL 語句的命令結(jié)束符為分號 ;
- 查詢所有行
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]
* 查詢語句中你可以使用一個(gè)或者多個(gè)表,表之間使用逗號(,)分割,并使用WHERE語句來設(shè)定查詢條件。
* SELECT 命令可以讀取一條或者多條記錄。
* 你可以使用星號(*)來代替其他字段,SELECT語句會(huì)返回表的所有字段數(shù)據(jù)
* 你可以使用 WHERE 語句來包含任何條件。
* 你可以使用 LIMIT 屬性來設(shè)定返回的記錄數(shù), [起始位置,長度]。
* 你可以通過OFFSET指定SELECT語句開始查詢的數(shù)據(jù)偏移量。默認(rèn)情況下偏移量為0。
SELECT * from test WHERE BINARY name='name1';
* 使用了 BINARY 關(guān)鍵字,是區(qū)分大小寫的意思
*查看表 test 中前行數(shù)據(jù)
- select * from test order by id limit 0,2;
- 或者: select * from test limit 0,2;

- 刪除表中數(shù)據(jù)
DELETE FROM table_name [WHERE Clause]
* 如果沒有指定 WHERE 子句,MySQL 表中的所有記錄將被刪除。
* 你可以在 WHERE 子句中指定任何條件
* 您可以在單個(gè)表中一次性刪除記錄。
* 當(dāng)你想刪除數(shù)據(jù)表中指定的記錄時(shí) WHERE 子句是非常有用的。
delete from account where name="dd";
- 修改表中數(shù)據(jù)
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
* 你可以同時(shí)更新一個(gè)或多個(gè)字段。
* 你可以在 WHERE 子句中指定任何條件。
* 你可以在一個(gè)單獨(dú)表中同時(shí)更新數(shù)據(jù)。
update account set name="官人2",balance="10000" where id=2;
- 在表中增加/刪除/修改字段
- 增加
ALTER TABLE 表名 ADD 字段名字 INT DEFAULT ;
* 在表account中添加了一個(gè)字段sex,類型為int(4),默認(rèn)值為 1
- alter table test1 add age int(4) default 0;
- 刪除
ALTER TABLE 表名 DROP 字段名字;
* 如果數(shù)據(jù)表中只剩余一個(gè)字段則無法使用DROP來刪除字段
- alter table test1 DROP age;
- 修改字段類型及名稱
* 把字段 age 的類型從 int(4) 改為 int(2),可以執(zhí)行以下命令
ALTER TABLE 表名 MODIFY age int(2);
- alter table test1 modify age int(2);
- 修改名字
- CHANGE 關(guān)鍵字之后,緊跟著的是你要修改的字段名,然后指定新字段名及類型。
- ALTER TABLE 表名 CHANGE 要改的字段 改成什么名字 類型;
- alter table test1 change age age1 int(2);
- 更改表名
ALTER TABLE testalter_tbl RENAME TO alter_tbl;
WHERE 子句
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
* 查詢語句中你可以使用一個(gè)或者多個(gè)表,表之間使用逗號, 分割,并使用WHERE語句來設(shè)定查詢條件。
* 你可以在 WHERE 子句中指定任何條件。
* 你可以使用 AND 或者 OR 指定一個(gè)或多個(gè)條件。
* WHERE 子句也可以運(yùn)用于 SQL 的 DELETE 或者 UPDATE 命令。
* WHERE 子句類似于程序語言中的 if 條件,根據(jù) MySQL 表中的字段值來讀取指定的數(shù)據(jù)。

LIKE 子句
- 如果沒有使用百分號 %, LIKE 子句與等號 = 的效果是一樣的
SELECT field1, field2,...fieldN
FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
* 你可以在 WHERE 子句中指定任何條件。
* 你可以在 WHERE 子句中使用LIKE子句。
* 你可以使用LIKE子句代替等號 =。
* LIKE 通常與 % 一同使用,類似于一個(gè)元字符的搜索。
* 你可以使用 AND 或者 OR 指定一個(gè)或多個(gè)條件。
* 你可以在 DELETE 或 UPDATE 命令中使用 WHERE...LIKE 子句來指定條件。
SELECT * from runoob_tbl WHERE runoob_author LIKE '%COM';
將 runoob_tbl 表中獲取 runoob_author 字段中以 COM 為結(jié)尾的的所有記錄
UNION 操作符
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
expression1, expression2, ... expression_n: 要檢索的列。
tables: 要檢索的數(shù)據(jù)表。
WHERE conditions: 可選, 檢索條件。
DISTINCT: 可選,刪除結(jié)果集中重復(fù)的數(shù)據(jù)。默認(rèn)情況下 UNION 操作符已經(jīng)刪除了重復(fù)數(shù)據(jù),所以 DISTINCT 修飾符對結(jié)果沒啥影響。
ALL: 可選,返回所有結(jié)果集,包含重復(fù)數(shù)據(jù)。
UNION 用于合并兩個(gè)或多個(gè) SELECT 語句的結(jié)果集,并消去表中任何重復(fù)行。
UNION 內(nèi)部的 SELECT 語句必須擁有相同數(shù)量的列,列也必須擁有相似的數(shù)據(jù)類型。
同時(shí),每條 SELECT 語句中的列的順序必須相同.
默認(rèn)地,UNION 操作符選取不同的值。如果允許重復(fù)的值,請使用 UNION ALL。
當(dāng) ALL 隨 UNION 一起使用時(shí)(即 UNION ALL),不消除重復(fù)行
注意:
1、UNION 結(jié)果集中的列名總是等于第一個(gè) SELECT 語句中的列名
2、UNION 內(nèi)部的 SELECT 語句必須擁有相同數(shù)量的列。列也必須擁有相似的數(shù)據(jù)類型。同時(shí),每條 SELECT 語句中的列的順序必須相同
排序
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
ORDER BY field1 [ASC [DESC][默認(rèn) ASC]], [field2...] [ASC [DESC][默認(rèn) ASC]]
你可以使用任何字段來作為排序的條件,從而返回排序后的查詢結(jié)果。
你可以設(shè)定多個(gè)字段來排序。
你可以使用 ASC 或 DESC 關(guān)鍵字來設(shè)置查詢結(jié)果是按升序或降序排列。 默認(rèn)情況下,它是按升序排列。
你可以添加 WHERE...LIKE 子句來設(shè)置條件。
* SELECT * from test ORDER BY submission_date ASC;
GROUP BY 語句
- 分組 根據(jù)某個(gè)字段進(jìn)行分組,相同的放一組,不同的分到不同的組。統(tǒng)計(jì)的是數(shù)據(jù),不是記錄
group by 字段 [asc/desc];
SQL提供了一系列統(tǒng)計(jì)函數(shù)
Count(); 統(tǒng)計(jì)分組后的記錄數(shù),每一相同的組有多少行記錄
Max(); 統(tǒng)計(jì)每組最大的值
Min(); 統(tǒng)計(jì)每組最小的值
Avg(); 統(tǒng)計(jì)每組的平均值
Sum(); 統(tǒng)計(jì)每組的和
select salePrice,count(*),max(cutoff),min(cutoff),avg(cutoff),sum(cutoff) from product group by salePrice;
having , 用于操作查詢后的結(jié)果
select salePrice,count(*) from product group by salePrice having salePrice>100;
NULL 值處理
IS NULL: 當(dāng)列的值是 NULL,此運(yùn)算符返回 true。
IS NOT NULL: 當(dāng)列的值不為 NULL, 運(yùn)算符返回 true。
<=>: 比較操作符(不同于 = 運(yùn)算符),當(dāng)比較的的兩個(gè)值相等或者都為 NULL 時(shí)返回 true。
關(guān)于 NULL 的條件比較運(yùn)算是比較特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。
在 MySQL 中,NULL 值與任何其它值的比較(即使是 NULL)永遠(yuǎn)返回 NULL,即 NULL = NULL 返回 NULL 。
MySQL 中處理 NULL 使用 IS NULL 和 IS NOT NULL 運(yùn)算符。
連接的使用
* INNER JOIN(內(nèi)連接,或等值連接):從左表中取出每一條記錄,和右表中所有的記錄進(jìn)行匹配,匹配必須是左表中與右表中某個(gè)條件相同,最終會(huì)保留結(jié)果,否則不保留。
- 基本語法: 左表 [inner] join 右表 on 左表.字段 = 右表.字段;
- 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;
- 等價(jià)于: SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a, tcount_tbl b WHERE a.runoob_author = b.runoob_author;
* LEFT JOIN(左連接):左表為主,然后每條記錄與右表進(jìn)行連接,不管能不能匹配的上,左表都會(huì)保留。能匹配,右表某條記錄保留,不能匹配,某條記錄置為NULL,最終記錄數(shù)至少不少于左表已有的記錄。
- 基本語法: 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;
* RIGHT JOIN(右連接): 與 LEFT JOIN 相反,用于獲取右表所有記錄,即使左表沒有對應(yīng)匹配的記錄。
- 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;