標籤:MySQL資料庫 MySQL系統 MySQL知識講解
MySQL是一個關係型資料庫管理系統,由瑞典MySQLAB公司開發,目前屬於Oracle旗下產品。MySQL是最流行的關係型資料庫管理系統之一,在WEB應用方面,MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,關聯式資料庫管理系統)應用軟體。
MySQL的安裝和配置
相關概念:
資料庫:資料的倉庫,儲存資料的地方。
表:分類對資料進行儲存,實際儲存資料的地方
列(欄位):具體的一項資訊,如:姓名、年齡
行(記錄):實際的實體資訊
主鍵:能唯一地標識一行記錄的列
Navicat圖形工具的使用:
NavicatforMySQL是常用的MySQL用戶端工具,可以從網上下載,免費使用30天。
MySQL資料類型:
資料類型
所佔位元組
取值範圍
tinyint
1位元組
-128~127
smallint
2位元組
-32768~32767
mediumint
3位元組
-8388608~8388607
int
4位元組
範圍-2147483648~2147483647
bigint
8位元組
+-9.22*10的18次方
float(m,d)
4位元組
單精確度浮點型,m總個數,d小數位
double(m,d)
8位元組
雙精確度浮點型,m總個數,d小數位
decimal(m,d)
decimal是儲存為字串的浮點數
CHAR
0-255位元組
定長字串
VARCHAR
0-255位元組
變長字串
TINYBLOB
0-255位元組
不超過255個字元的二進位字串
TINYTEXT
0-255位元組
短文本字串
BLOB
0-65535位元組
二進位形式的長文本資料
TEXT
0-65535位元組
長文本資料
MEDIUMBLOB
0-16777215位元組
二進位形式的中等長度文本資料
MEDIUMTEXT
0-16777215位元組
中等長度文本資料
LOGNGBLOB
0-4294967295位元組
二進位形式的極大文本資料
LONGTEXT
0-4294967295位元組
極大文本資料
VARBINARY(M)
允許長度0-M個位元組的定長位元組符串
值的長度+1個位元組
BINARY(M)
M
允許長度0-M個位元組的定長位元組符串
SQL語言:
SQL全稱是結構化查詢語言 (SQL)(StructuredQueryLanguage)。使用SQL能進行資料庫的增刪查改。學習資料庫的基本核心內容就是SQL。
SQL分類如下:
資料定義語言 (Data Definition Language)(DDL:DataDefinitionLanguage)
資料操作語言(DML:DataManipulationLanguage)
資料查詢語言(DQL:DataQueryLanguage)
資料控制語言(DCL:DataControlLanguage)
一、DDL
資料庫定義語言:
建立資料庫
createdatabase資料庫名;
使用資料庫
use資料庫名;
刪除資料庫
dropdatabase資料庫名;
dropdatabaseifexists資料庫名;
建立表
createtable表名(
列名資料類型約束,
...
);
主鍵:primarykey
自動成長:auto_increment
刪除表
droptable表名;
droptableifexists表名;
練習:
建立my_db資料庫
在my_db中,建立學生表,包含編號(主鍵,自增)、姓名、年齡和地址
二、DML
資料新增
insertinto表名(列1,列2...)values(值1,值2...)
樣本:
--插入一行記錄
insertintostudent(name,age,gender,address)
values(‘張三‘,20,‘男‘,‘湖北武漢‘);
--插入多行記錄
insertintostudent(name,age,gender,address)
values
(‘李四‘,20,‘男‘,‘湖北武漢‘),
(‘李大四‘,22,‘女‘,‘北京‘),
(‘李小四‘,25,‘女‘,‘北京‘),
(‘李四四‘,27,‘女‘,‘上海‘);
--將表中的資料插入到其它表
insertintostudent2(name,age,gender,address)
selectname,age,gender,addressfromstudent;
注意:
1、自動成長列不要添加資料
2、列的數量、類型和順序要和值一致
資料修改
update表名set列1=值1,列2=值2where條件
樣本:
--更新李小四的地址為四川成都
updatestudentsetaddress=‘四川成都‘
wherename=‘李小四‘;
--更新多列
updatestudentsetaddress=‘四川成都‘,age=18
wherename=‘李小四‘;
資料刪除
deletefrom表名where條件
樣本:
--刪除id=2的學生
deletefromstudentwhereid=5;
練習:
在學生表中添加5行記錄,
更新id為5的學生年齡為22
刪除id為3的學生
四、DQL
查詢所有資料
select*from表;
查詢指定欄位的所有資料
select列1,列2from表;
where條件查詢
select*from表where條件
=、!=、in、notin、and、or
樣本:
--查詢所有行所有列
select*fromstudent;
--查詢部分列
selectname,addressfromstudent;
--添加where條件查詢id為2的學生
select*fromstudentwhereid=2;
--查詢id不為2的
select*fromstudentwhereid!=2;
--查詢地址為湖北武漢以及四川成都的學生
select*fromstudentwhereaddress=‘湖北武漢‘oraddress=‘四川成都‘;
--查詢年齡20歲以上的男的
select*fromstudentwhereage>=20andgender=‘男‘;
--查詢地址為湖北武漢以及四川成都的學生2
select*fromstudentwhereaddressin(‘湖北武漢‘,‘四川成都‘);
--查詢地址不是湖北武漢以及四川成都的學生
select*fromstudentwhereaddressnotin(‘湖北武漢‘,‘四川成都‘);
去掉重複資料
distinct關鍵字
selectdistinct列from表;
樣本:
--查詢學生的地址,不重複
selectDISTINCTaddressfromstudent;
--給列設定別名
selectid編號,name姓名,age年齡,gender性別,address地址fromstudent;
--查詢年齡在20到25之間的女生
select*fromstudentwhereage>=20andage<=25andgender=‘女‘;
select*fromstudentwhereagebetween20and25andgender=‘女‘;
--查詢北京或武漢的男生
select*fromstudentwhereaddressin(‘北京‘,‘湖北武漢‘)andgender=‘女‘;
排序查詢
select*from表orderby列desc\asc
樣本:
--按年齡升序排序
select*fromstudentwheregender=‘男‘orderbyageasc;
--降序
select*fromstudentorderbyagedesc;
分頁查詢
limitn;返回長度為n的行
limitn,m;返回從n位置,長度為m的行
select*fromtb_namelimit5;顯示結果的前5條記錄
select*fromtb_namelimit0,5;區段查詢
樣本:
--按年齡升序排序
select*fromstudentwheregender=‘男‘orderbyageasc;
--降序
select*fromstudentorderbyagedesc;
--通過limit限制行數前5行
select*fromstudentlimit5;
--通過limit分頁查詢第一頁第0行到第5行,第二頁第6行到第10行...
select*fromstudentLIMIT0,5;
select*fromstudentLIMIT5,5;
select*fromstudentLIMIT10,5;
練習:
年齡最大的男學生
年齡最小的五個女學生
彙總函式
求和:sum
求平均值:avg
求最大值:max
求最小值:min
求數量:count
樣本:
selectsum(col_name)fromtb_name;
分組查詢
groupby分組列
where在分組之前進行條件式篩選
having在分組之後進行條件式篩選
where-->groupby--->having
樣本:
--使用彙總函式
selectsum(age)總年齡,avg(age)平均年齡,
max(age)最大年齡,min(age)最小年齡,count(*)學生數量fromstudent;
--求來之不同地方的學生人數
selectaddress籍貫,count(*)人數fromstudentgroupbyaddress;
--求男女學生的人數
selectgender性別,count(*)人數,avg(age)平均年齡fromstudentgroupbygender;
--求人數超過5人的籍貫
selectaddress籍貫,count(*)人數fromstudent
groupbyaddresshavingcount(*)>=5;
--年齡總和超過200的性別
selectgender性別,sum(age)總年齡fromstudent
groupbygenderhavingsum(age)>200;
模糊查詢
萬用字元:
%匹配任意多字元
_匹配一個字元
like關鍵字
樣本:
--尋找所有姓李的人
select*fromstudentwherenamelike‘李%‘;
select*fromstudentwherenamelike‘%大%‘;
select*fromstudentwherenamelike‘李_‘;
MySQL資料庫基礎和SQL語言入門