1.MySQL數據庫
MySQL是一種關係數據庫管理系統,關係數據庫將數據保存在不一樣的表中,從而增長了速度並提升了靈活性。
MySQL所使用的 SQL 語言是用於訪問數據庫的最經常使用標準化語言,因爲其體積小、速度快、整體擁有成本低,尤爲是開放源碼這一特色,通常中
小型網站的開發都選擇 MySQL 做爲網站數據庫,搭配 PHP 和 Apache 可組成良好的開發環境。
2.MySQL存儲方式
一臺數據庫服務器中會建立不少數據庫,在數據庫中會建立不少張表,在表中會有不少記錄。
3.SQL結構化查詢語言
SQL是高級的非過程化編程語言,是一種數據庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關係數據庫系統;同時也是數據庫腳
本文件的擴展名,能夠嵌套,具備極大的靈活性和強大的功能。
4.SQL語言的分類
(1)DDL(數據定義語言)
(2)DML(數據操做語言)
(3)DCL(數據控制語言)
(4)DQL(數據查詢語言)
5.MySQL數據庫的建立、修改和刪除
(1)建立數據庫
語法: create database 數據庫名稱 [character set 字符集 collate 字符集校對規則](通常忽略);
(2)查看數據庫
查看全部數據庫:
語法: show databases;
查看某個數據庫:
語法: show create database 數據庫名稱;
(3)修改數據庫:
語法:alter database 數據庫名稱 [character set 字符集 collate 字符集校對規則](通常忽略);
(4)刪除數據庫:
語法:drop database 數據庫名稱;
(5)使用或者切換數據庫:
語法:use 數據庫名稱;
6.MySQL表的建立、修改和刪除
(1)建立表
語法:create table 表名(
數據名稱 數據類型(長度) 約束,
.......
);
注:括號內的語句用逗號進行屢次建立,最後的語句不加任何標點符號
數據類型:(MySQL所對應的Java類型)
Java中的類型 MySQL中的類型
byte/short/int/long tinyint/smallint/int/bigint
float float
double ouble
boolean bit
char/String char和varchar類型
char和varchar的區別:
char表明是固定長度的字符或字符串。
定義類型char(8),向這個字段存入字符串hello,那麼數據庫使用三個空格將其補全。
varchar表明的是可變長度的字符串。
定義類型varchar(8), 向這個字段存入字符串hello,那麼存入到數據庫的就是hello。
Date date/time/datetime/timestamp
datetime和timestamp區別
datetime就是既有日期又有時間的日期類型,若是沒有向這個字段中存值,數據庫使用null存入
到數據庫中
timestamp也是既有日期又有時間的日期類型,若是沒有向這個字段中存值,數據庫使用當前的
系統時間存入到數據庫中。
File BLOB/TEXT
約束:
約束做用:保證數據的完整性
單表約束:
主鍵約束:primary key (主鍵約束默認就是惟一 非空的)
惟一約束:unique
非空約束:not null
(2)查看錶
查看一個數據庫下的全部的表:
語法:show tables;
查看單獨一個表:
語法:desc 表名;
(3)刪除表
語法:drop table 表名;
(4)修改表
增添列:
語法: alter table 表名 add 列名 數據類型(長度) 約束;
修改列類型,長度和約束:
語法: alter table 表名 modify 列名 數據類型(長度) 約束;
刪除列:
語法: alter table 表名 drop 列名;
修改列名稱:
語法: alter table 表名 change 舊列名 新列名 數據類型(長度) 約束;
修改表名:
語法: rename table 表名 to 新的表名;
修改表的字符集:
語法: alter table 表名 character set 字符集;
7.MySQL數據的增刪改查
(1)添加表記錄
向表中插入某些列:
語法: insert into 表名 (列名1,列名2,列名3…) values (值1,值2,值3…);
向表中插入全部列:
語法: insert into 表名 values (值1,值2,值3…);
注意:
1.值的類型與數據庫中表列的類型一致;
2.值的順序與數據庫中表列的順序一致;
3.值的最大長度不能超過列設置最大長度;
4.值的類型是字符串或者是日期類型,使用單引號引發來。
(2)修改表記錄
語法: update 表名 set 列名=值,列名=值 [where 條件];
注意:
1.值的類型與列的類型一致;
2.值的最大長度不能超過列設置的最大長度;
3.字符串類型和日期類型添加單引號。
(3)刪除表記錄
語法: delete from 表名 [where 條件];(或者truncat from 表名;)<注:truncat刪除表數據沒法恢復>
注意:
1.刪除表的記錄,指的是刪除表中的一行記錄;
2.刪除若是沒有條件,默認是刪除表中的全部記錄。
(4)查看錶記錄
語法: select *(或者列名) from 表 [條件];
8.MySQL解決向數據庫中插入中文記錄會出現錯誤
解決方法:
須要將MySQL數據庫服務器中的客戶端部分的字符集改成gbk,找到MySQL的安裝路徑:my.ini文件,修改文件中[client]下的字符集,將
[default-charaacter-set=ISO-8895-1]改爲[default-charaacter-set=gbk],而後再從新啓動MySQL的服務器。
9.按不一樣方式查看錶記錄
(1)按條件查詢:
使用where 字句
> ,< ,<= , >= , <> *不等 , =
like:模糊查詢 , in:範圍 查詢 , 條件關聯:and or not
查詢李四信息: select * from 表名 where 列名[name = 李四] = '李四';
查詢李四信息而且英語大於90: select * from 表名 where 列名[name = 李四] ='李四' and 列名[Englist]>90;
在lik可使用: _ , % _只能帶表一個字符 %帶表多個字符 * %王% 帶表中間包含着個字就行
查詢姓李的學生信息: select * from 表名 where name like '%李%'
查詢英語成績是69,75,89的學生: select * form 表名 where 列名[english] in (69 , 75 , 89);
(2)查詢排序:
使用order by 字段名稱 asc/desc; *默認是用asc , 倒序desc;
查詢學生信息按成績排: selech * from order by 列名[english];
查詢學生成績按倒序: selech * from order by 列名[english] desc;
查詢學生按語文成績倒序再按英語升序排列: select * from order by 列名[chinese] desc, 列名[english] asc;
查詢姓李的學生,英語按倒序排列: select * from 表名 where 列名[name] like '李%' order by 列名[english] desc;
(3)分組統計查詢:
聚合函數:
sum(); 得到總數: count();*個數; 最大值:max() 最小值:min() 平均值:avg;
得到全部成績的和: select sum(exam)from 表名;
count();
得到全部的計數: select count(*) from 表名;
max()/min();
得到某門考試的最大和最小成績: select max(math) from 表名;/select min(math) from 表名;
avg()
得到平均數:select avg(chinese) from 表名;
分組查詢
語法:使用group by 字段名稱;
按商品名稱統計,每類商品所花費的總金額:select product,sum(price) from orderitem group by product;
注意:
where的子句後面不能跟着聚合函數。若是如今使用帶有聚合函數的條件過濾(分組後條件過濾)須要使用一個關鍵字HAVING;
例:select product,sum(price) from orderitem group by product having sum(price) > 5000 order by sum(price) asc;
10.單表查詢的執行順序流程
select ... from ... where ... group by ... having ...order by ...;
11.多表查詢
表與表之間的關係-外鍵
做用:保證多張表之間的數據若是有關聯,則關聯的數據的完整性。
設計與建表原則
一對多:將外鍵設置在多的一方,指向一的主鍵
多對多:必須有第三張表,這張表中最少會有兩個字段做爲外鍵,指向多對多的兩張表的主鍵
一對一:惟一外鍵約束
主鍵對應:
實質就是創建外鍵而且讓這個外鍵惟一。
查詢:
準備環境:多表分析建立
鏈接查詢:關聯條件就是外鍵
內鏈接:交集, select * from 表1, 表2 where 條件
左外鏈接:左表的數據和交集數據
select * from 表1 left join 表2 on 條件
右外鏈接:右表的數據和交集數據
select * from 表1 right join 表2 on 條件
子查詢
12.分頁查詢
select * from 表名 limit begin, length :begin 從0開始,表示索引;length:表示查詢多少條記錄
select * from 表名 limit number; 從第一條數據開始,總共查詢number條數據。
13.MySQL常見bug
select * from 表名 where score = '80abc' 實質就是:SELECT * FROM stu where score = 80, 會將不能轉化爲數值的字符捨棄
select * from 表名 where NAME = 'abC' :MySQL查詢的時候不區分大小寫
解決方法:
select * from stu where BINARY NAME = 'Abc'數據庫