1. 程式人生 > >MySQL數據庫基礎和SQL語言入門

MySQL數據庫基礎和SQL語言入門

MySQL代碼案例 Linux運維 MySQL應用詳解 linux學習教程

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全稱是結構化查詢語言(StructuredQueryLanguage)。使用SQL能進行數據庫的增刪查改。學習數據庫的基本核心內容就是SQL。

  SQL分類如下:

  數據定義語言(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語言入門