1.mysql 資料庫備份: 語法: 其中:USER 是用戶名,PASS 是密碼,DataBase 是資料庫名, Path 是資料庫備份存儲的位置。 備註:1)執行備份是在系統條件下,而非 mysql 狀態下。 2)請使用正確的文件地址,在文件地址中要使用雙斜杠 “\\” 來代替單斜杠 “\”。 2 ...
1.mysql 資料庫備份:
語法:
MYSQLDUMP -uUSER -pPASS DataBase > Path
其中:USER 是用戶名,PASS 是密碼,DataBase 是資料庫名, Path 是資料庫備份存儲的位置。
備註:1)執行備份是在系統條件下,而非 mysql 狀態下。
2)請使用正確的文件地址,在文件地址中要使用雙斜杠 “\\” 來代替單斜杠 “\”。
2.mysql 資料庫的恢復
語法:
mysql -uUSER -pPASS DataBase < Path
其中:USER 是用戶名,PASS 是密碼,DataBase 是資料庫名, Path 是備份文件存儲的位置。
3.實現跨資料庫表的內容的複製
如實現將 db_database3 資料庫中的 user 表複製到 database4 中的 user 表,在實現資料庫表的內容複製時,需要在每個資料庫表前要加上資料庫的名稱。
具體語法如:
insert into db_database4.user(column1,column2) select column1,column2 from db_database3.user;
備註:1)仍然需要你自己在 db_database4 中建立一個與 db_database3 結構一樣的 user 表;
2)要保證表中欄位的數據類型的一致性,否則會導致出入數據的錯誤。
4.使用 UNION ALL 語句批量插入數據
是用 UNION ALL 語句實現批處理,其語法如下:
INSERT tableName SELECT columnValue,... UNION ALL SELECT columnValue,......
1.tableName:要添加數據的數據表。
2.columnValue:要添加到數據表中的數據。
例如:往一個 user 表中一次插入多條數據:其中表結構如下:
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | varchar(20) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
我們使用常規的 insert into 插入語句如下:
mysql> insert into user values('1','tom');
Query OK, 1 row affected (0.06 sec)
mysql> insert into user values('2','kill');
Query OK, 1 row affected (0.09 sec)
mysql> insert into user values('3','bill');
Query OK, 1 row affected (0.09 sec)
而若使用 union all 語句如下:
mysql> insert user select '1','jim' union all select '2','kill' union all select '3','bill';
備註:我們常用的 insert into 語句每次只能實現插入一條語句,這樣重覆輸入往往不方便,這個時候可以選擇使用union all 來替代。
5.更新資料庫中的表---其中包括:對錶本身結構的更改與對錶中數據的更改
1)對錶本身結構的更改,使用 alter 語句。
語法:
alter table 表名
例如:
a.追加語法:alter table 表名
add (column datatype,column datatype,...);
例如:alter table tt_table add image blob; //在tt_table表中添加一個image列用來保存大頭照
b.修改語法:alter table 表名 modify (column datatype,column datatype,...);
例如:alter table tt_table modify job varchar(60);//修改tt_table表的job列,使其長度為60
c.刪除語法:alter table 表名 drop (column);
例如:alter table tt_table drop job; //刪除tt_table表中的job列
d,修改表名:rename table 表名 to 新表名;
例如:rename table tt_table to tt;//修改tt_table表的表名為tt
e.將tt_table表的字元集修改為utf8
alter table tt_table character set utf8;
f.將tt_table原表中的列名food 屬性為varchar(20)修改為sale_food 屬性為varchar(40)
alter table tt_table change column food sale_food varchar(40);
2)對錶中數據的更改,使用 update 語句。
語法:
UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值
例1:我們為 lastname 是 "Wilson" 的人添加 firstname
UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson' ;
例2:我們會修改地址(address),並添加城市名稱(city):
UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson';
備註:alter的修改只涉及表結構方面,而不能對其中保存的數據進行修改!掌握這點可以混淆使用 alter 和 update 。
6.將數據表清空-----DELETE 語句與TRUNCATE TABLE 語句
1)DELETE 語句
DELETE 語句用於刪除表中的行。
語法:
DELETE FROM 表名稱 WHERE 列名稱 = 值
例1:刪除lastname為wilson的行:
DELETE FROM Person WHERE LastName = 'Wilson'
例2:刪除所有行,可以在不刪除表的情況下刪除所有的行。這意味著表的結構、屬性和索引都是完整的:
DELETE FROM table_name
或者:
DELETE * FROM table_name
2)TRUNCATE TABLE 語句
TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同,二者均刪除表中的全部行;但 TRUNCATE TABLE 比 DELETE 速度快,而且使用的系統和事物日誌資源少。
DELETE 語句每次刪除一行,併在事務日誌中為所刪除的每一行做一項記錄;
TRUNCATE TABLE 則通過釋放存儲表數據所用的數據頁來刪除數據,並且只在事務日誌中記錄頁的釋放,減少了日誌空間的額占用。
TRUNCATE TABLE 語法:
TRUNCATE TABLE 數據表名
7.聚集函數 SUM 實現數據彙總
sum函數具體語法:
SUM ([ALL|DISTINCT] expression)
①ALL:對所有的值進行聚集函數運算。ALL 是預設值。
②DISTINCT:指定 SUM 返回唯一值的和。
③expression:是常量、列或函數,或者是算術、按位與字元串等運算符的任意組合。如果 expression 是精確數字或近似數字數據類型分類(bit數據類型除外)的表達式,則不允許使用聚集函數和子查詢。
例如:統計一個班級語文,數學,英語各科的總成績:
select sum(math),sum(chiense),sum(english) from tt_table ;
統計一個班級語文成績平均分:
select sum(chinese)/count(*) from tt_table;
註意:a.sum僅對數值起作用,否則會報錯。
b.對多列求和,逗號不能少。
c.在統計過程中,null 值將被忽略。
8.聚集函數 AVG 實現計算平均值
AVG函數具體語法:
AVG ([ALL|DISTINCT] expression)
①ALL:對所有的值進行聚集函數運算。ALL 是預設值。
②DISTINCT:指定 AVG 操作只能使用每個值的唯一實例,而不管該值出現多少次。
③expression:是常量、列或函數,或者是算術、按位與字元串等運算符的任意組合。如果 expression 是精確數字或近似數字數據類型分類(bit數據類型除外)的表達式,則不允許使用聚集函數和子查詢。
例如:求一個班級的平均分
select avg(chinese) from tt_table;
9.聚集函數 MIN/MAX 求數據表中的最小/最大值
具體語法:
MIN|MAX ([ALL|DISTINCT] expression)
①ALL:對所有的值進行聚集函數運算。ALL 是預設值。
②DISTINCT:指定每個唯一值都被考慮。DISTINCT對MIN、MAX無意義。
③expression:該參數為表達式,由常量、列名、函數以及算術運算符、按位運算符和字元串運算符任意組合而成。
例如:求班級最高分和最低分
select man(chinese+english+maht),min(chinese+english+maht) from tt_table;
10.聚集函數 COUNT 返回表達式中值的個數
COUNT 函數是唯一允許使用通配符作為參數的聚集函數。
語法:
COUNT({[ALL|DISTINCT] expression} | * )
①ALL:若沒有該參數,SQL 將對所有的值進行聚集函數運算。ALL 是預設值。
②DISTINCT:指定每個唯一值都被考慮。
③expression:該參數為表達式,其類型可以是除 uniqueidentifier、text、image 或 ntext 之外的任何類型。
④ * :指定應該計算所有行以返回表中行的總數。COUNT(*) 不需要任何參數,而且不能與 DISTINCT 一起使用。COUNT(*) 返回指定表中的行的數量而不消除副本,對每行分別進行計數,包括含有空值的行。
例如:統計一個班級共有多少學生:
select count(name) from tt_table;
或者
select count(*) from tt_table;//這種分頁的時候用得比較多
統計總分大於250的人數有多少?
select count(*) from tt_table where (math+english+chinese)>250;
註意:count統計只有有值才計數。若統計的name列上有一個為null的值,則該行不計入count的計數結果之中。
11.在where子句中經常被使用的運算符
1) >大於 <小於 <=小於等於 >=大於等於 =等於 <>不等於
2) between...and ... 顯示在某以區間的值
3) in(set) 顯示在in列表中的值,定點查詢。例in(100,200)即為顯示查詢列表中含有100和200這兩個值的結果集。
4) like 模糊查詢("%" 和 "_")
5) is null 判斷是否為空
6) and 多個條件同時成立
7) or 多個條件任一成立
8) not 不成立
註意1:不等於運算符跟其它語言有點不一樣,需要註意一下。
註意2:like語句中,"%"代表零個或多個任意字元,"_"代表一個字元。
例如:
查詢英語分數在80--90之間的同學:
select name from tt_table where english>80 and english<90;
查詢英語分數在80--90之間的同學:
select name from tt_table where english between 80 and 90;
查詢數學分數為89,90,91的同學:
select name from tt_table where math in(89,90,91);
查詢所有姓“李”的學生成績:
select * from tt_table where name like '李%';
12.對數據進行排序查詢---使用 ORDER BY 子句與 DESC|ASC 關鍵字
ORDER BY 子句的作用是分類輸出,並且根據表中包含的一列或多列表達式將輸出的值按升序或降序排列。他不改變資料庫中行的順序,只是簡單的改變查詢輸出的值的顯示順序。
其語法格式如下:
SELECT ... WHERE ... ORDER BY expression [ASC|DESC],...
參數說明:
①expression:一個表達式,通常是一個輸出時用來分類的欄位。
②[ASC|DESC]:可選項,代表升序或降序。
③ ,... :指可以有多於一個的分類表達式,並且每一個表達式都可以為升序或降序。
例如:對 user 表中的圖書價格進行降序排序輸出
select * from user order by price desc;
13. group by 與 order by 之區別?
order by 從英文里理解就是行的排序方式,預設的為升序。 order by 後面必須列出排序的欄位名,可以是多個欄位名。
group by 從英文里理解就是分組。必須有“聚合函數”來配合才能使用,使用時至少需要一個分組標誌欄位。
什麼是“聚合函數”?
像sum()、count()、avg()等都是“聚合函數”
使用group by 的目的就是要將數據分類彙總。
一般如:
select 單位名稱,count(職工id),sum(職工工資) form [某表] group by 單位名稱
這樣的運行結果就是以“單位名稱”為分類標誌統計各單位的職工人數和工資總額。
在sql命令格式使用的先後順序上,group by 先於 order by。
select 命令的標準格式如下:
SELECT select_list [ INTO new_table ] FROM table_source [ WHERE search_condition ]
[ GROUP BY group_by_expression ] [ HAVING search_condition ]
例如:
select name,sum(total) sum from tb group by name order by sum asc;
備註:
SUM 函數只能用於數據類型是 int ,smallint,decimal,numeric,float,real,money 和 smallmoney的欄位。
14.mysql 資料庫中使用 LIMIT 子句來限制語句返回的行數
mysql 資料庫中提供了 LIMIT 子句來限制 select 語句返回的行數。如果查詢數據的 SQL 語句中包含 GROUP BY 與 ORDER BY 子句,則 LIMIT 子句放在 GROUP BY 子句與 ORDER BY 子句的後面。語法如下:
SELECT [DISTIN | UNIQUE] (*,columname[AS alias], ...) FROM table WHERE ... ORDER BY ... LIMIT([offset] , rows);
參數說明:
①offset:指定要返回的第一行的偏移量。開始行的偏移量是0;
②row:指定返回行的最大數目。
例如:
從 tb 表中查詢最開始的3條記錄。
select * from tb limit 0,3;
查詢 tb 表中的最後的3條記錄。
select * from tb order by id desc limit 0, 3;
備註 :
1.mysql 資料庫提供了 LIMIT 子句,在SQL Server資料庫提供了相應的 TOP n ,兩者需要區別開來。
2.LIMIT 子句的參數中,第一個參數是可選參數。如果值給定一個參數,則代表偏移量為0的返回行的最大數目。例如,表達式 limit(3)與表達式 limit(0,3)是等價的。
3.如果查詢數據的 SQL 語句中包含 GROUP BY 與 ORDER BY 子句,則 LIMIT 子句一定要放在 GROUP BY 子句與 ORDER BY 子句的後面。
////end