一、Mysql的安裝
1、打開下載的mysql安裝文件mysql-5.0.27-win32.zip,雙擊解壓縮,運行“setup.exe”。
2、選擇安裝類型,有“Typical(默認)”、“Complete(完全)”、“Custom(用戶自定義)”三個選項,選擇“Custom”,按“next”鍵繼續。
3、在“DeveloperComponents(開發者部分)”上左鍵單擊,選擇“This feature,
and allsubfeatures, will be installed on local hard drive.”,即“此部分,及下屬子部分內容,全部安裝在本地硬盤上”。在上面的“MySQL Server(mysql服務器)”、“Client Programs(mysql客戶端程序)”、“Documentation(文檔)”也如此操作,以保證安裝所有文件。點選“Change...”,手動指定安裝目錄。
4、填上安裝目錄,我的是“F:\Server\MySQL\MySQLServer 5.0”,也建議不要放在與操作系統同一分區,這樣可以防止系統備份還原的時候,數據被清空。按“OK”繼續。
確認一下先前的設置,如果有誤,按“Back”返回重做。按“Install”開始安裝。
5、正在安裝中,請稍候,直到出現下面的界面
這裏是詢問你是否要註冊一個mysql.com的賬號,或是使用已有的賬號登陸mysql.com,一般不需要了,點選“Skip Sign-Up”,按“Next”略過此步驟。繼續則完成MYSQL的安裝。
二、MYSQL的配置
1、安裝完成了,出現如下界面將進入mysql配置向導。
2、選擇配置方式,“DetailedConfiguration(手動精確配置)”、“Standard Configuration(標準配置)”,我們選擇“Detailed Configuration”,方便熟悉配置過程。
3、選擇服務器類型,“DeveloperMachine(開發測試類,mysql佔用很少資源)”、“Server Machine(服務器類型,mysql佔用較多資源)”、“Dedicated MySQL Server Machine(專門的數據庫服務器,mysql佔用所有可用資源)”
4、選擇mysql數據庫的大致用途,“MultifunctionalDatabase(通用多功能型,好)”、“TransactionalDatabase Only(服務器類型,專注於事務處理,一般)”、“Non-Transactional Database Only(非事務處理型,較簡單,主要做一些監控、記數用,對MyISAM數據類型的支持僅限於non-transactional),按“Next”繼續。
5、選擇網站併發連接數,同時連接的數目,“DecisionSupport(DSS)/OLAP(20個左右)”、“Online Transaction Processing(OLTP)(500個左右)”、“Manual Setting(手動設置,自己輸一個數)”。
6、是否啓用TCP/IP連接,設定端口,如果不啓用,就只能在自己的機器上訪問mysql數據庫了,在這個頁面上,您還可以選擇“啓用標準模式”(Enable Strict Mode),這樣MySQL就不會允許細小的語法錯誤。如果是新手,建議您取消標準模式以減少麻煩。但熟悉MySQL以後,儘量使用標準模式,因爲它可以降低有害數據進入數據庫的可能性。按“Next”繼續
7、就是對mysql默認數據庫語言編碼進行設置(重要),一般選UTF-8,按 “Next”繼續。
8、選擇是否將mysql安裝爲windows服務,還可以指定ServiceName(服務標識名稱),是否將mysql的bin目錄加入到WindowsPATH(加入後,就可以直接使用bin下的文件,而不用指出目錄名,比如連接,“mysql.exe-uusername -ppassword;”就可以了,不用指出mysql.exe的完整地址,很方便),我這裏全部打上了勾,ServiceName不變。按“Next”繼續。
9、詢問是否要修改默認root用戶(超級管理)的密碼。“Enable root access from remotemachines(是否允許root用戶在其它的機器上登陸,如果要安全,就不要勾上,如果要方便,就勾上它)”。最後“Create An Anonymous Account(新建一個匿名用戶,匿名用戶可以連接數據庫,不能操作數據,包括查詢)”,一般就不用勾了,設置完畢,按“Next”繼續。
10、確認設置無誤,按“Execute”使設置生效,即完成MYSQL的安裝和配置。
注意:設置完畢,按“Finish”後有一個比較常見的錯誤,就是不能“Startservice”,一般出現在以前有安裝mysql的服務器上,解決的辦法,先保證以前安裝的mysql服務器徹底卸載掉了;不行的話,檢查是否按上面一步所說,之前的密碼是否有修改,照上面的操作;如果依然不行,將mysql安裝目錄下的data文件夾備份,然後刪除,在安裝完成後,將安裝生成的 data文件夾刪除,備份的data文件夾移回來,再重啓mysql服務就可以了,這種情況下,可能需要將數據庫檢查一下,然後修復一次,防止數據出錯。
二、數據庫的使用
1、打開window“服務”
win+r,“運行”-》service.msc
2、啓動和關閉(必須以管理員身份運行cmd命令窗口)
開啓數據庫服務:net start mysql
關閉數據庫服務:net stop mysql
3、登錄
mysql -uroot -p
4.退出數據庫
exit;
quit;
q;
5、查看數據庫的版本號和當前日期
select version(),current_date;
6、將mysql用作一個簡單的計算器
select sin(pi()/4),(4+1)*5;
7、‘\c’表示取消命令,它切換回到mysql>,開始接受一個新的命令
8、查詢當前使用的用戶
select user();
三、SQL語句的分類
1、數據定義語言,簡稱DDL
用來定義數據庫對象:數據庫database,表table,列column等。
關鍵字:創建create,修改alter,刪除drop等
2、數據庫操作語言,簡稱DML
關鍵字:插入:insert,刪除delete,更新update等
3、數據查詢語言,簡稱DQL
關鍵字:select,from,where等
4、數據庫控制語言,簡稱DCL
四、對數據庫的操作
1、創建一個庫
create database 庫名
查看MySQL支持的所有字符集
show character set;
創建帶有編碼的
create database 庫名 character set 編碼
查看編碼
show create database web08_01;
2、查看數據庫
查看數據庫服務器中的所有數據庫:show databases;
查看某個數據庫的定義的信息:show create database 數據庫名;
3、刪除一個庫
drop database 庫名
4、使用庫
use 庫名
5、查看當前正在操作的庫
select database();
五、對數據庫表的操作
1、創建一張表
create table 表名(
字段名 類型(長度) [約束],
字段名 類型(長度) [約束],
);
字符類型:varchar(n)
單表約束:
主鍵約束:primary key,要求被修飾的字段:唯一和非空
唯一約束:unique,要求被修飾的字段:唯一
非空約束:not null,要求被修飾的字段:非空
自動增長:auto_increment
2、查看數據庫表
創建完成後,我們可以查看數據庫表
show tables;
查看錶的結構
desc 表名
3、刪除一張表
drop table 表名
4、修改表
4.1添加一列
alter table 表名 add 列名 類型(長度)[約束]; -----修改表添加列
4.2修改列的類型(長度、約束)
alter table 表名 modify 要修改的字段名 類型(長度)[約束]
4.3修改列的列名
alter table 表名 change 舊列名 新列名 類型(長度)[約束]
4.4、刪除表的列
alter table 表名 drop 列名
4.5、修改表名
rename table 表名 to 新表名
4.6、修改表的字符集
alter table 表名 character set 編碼
4.7、修改字段的排列位置
alter table 表名 modify 列名1 數據類型 first|after 列名2
4.8查看當前編碼
show create table tbl_user;
4.9裝載數據
load data local infile 'path/1.txt' into table sort lines terminated by '\r\n';
4.10、字段類型
4.11、比較運算符
=、<=、>=、<>(!=)、<=>、>、<、is null、is not null、least、greatest、between、and、isnull、in、not in、like、regexp
三、對數據庫記錄進行操作(修改)
1、插入操作
insert into 表名(列名1,列名2,列名3)values(值1,值2,值3....)
insert into 表名 values(值1,值2,值3....)
注意:
1、列名數與values後面的值的個數相等
2、列的順序與插入的值得順序一致
3、列名的類型與插入的值要一致
4、插入值的時候不能超過最大長度
5、值如果是字符串或者日期需要加引號‘’(一般是單引號)
1.1插入數據中文亂碼問題解決辦法
方式一【不建議】
直接修改數據庫安裝目錄裏面的my.ini文件的第57行
方式二:
set names gbk;
2、更新表記錄
2.1不帶條件的
update 表名 set 字段名=值,字段名=值,字段名=值....
它會將該列的所有記錄都更改
2.2帶條件的
update 表名 set 字段名=值,字段名=值,字段名=值....where 條件
3.刪除表記錄
3.1帶條件的
delete from 表名 where 條件
注意:刪除後,uid不會重置!
3.2不帶條件的
先準備數據
insert into tbl_user values(null,'王五','666');
刪除操作
delete from 表名
3.3例題
說說delete與truncate的區別
delete刪除的時候是一條一條的刪除記錄,它配合事務,可以將刪除的數據找回。
truncate刪除,它是將整個表摧毀,然後再創建一張一模一樣的表。它刪除的數據無法找回
delete操作演示:
truncate演示操作
注意:delete刪除,uid不會重置!而使用truncate操作,uid會重置
4.查詢操作
語法:
select [distinct] * |列名,列名 from 表名[where條件]
4.1簡單查詢
1.查詢所有商品
select * from product;
2.查詢商品名和商品價格
select pname,price from product;
3.查詢所有商品信息使用表別名
select * from product as p;
4.查詢商品名,使用列別名
select pname as p from product
5.去掉重複值(按照價格)
select distinct(price) from product
6.將所有的商品的價格+10進行顯示
select pname,price+10 from product;
4.2條件查詢
1.查詢商品名稱爲“左慈”的商品信息
select * from product where pname='左慈';
2.查詢價格>60元的所有商品信息
select * from product where price>60;
3.查詢商品名稱含有“士”字的商品信息
select * from product where pname like '%士%';
4.查詢商品id在(3,6,9)範圍內的所有商品信息
select * from product where pid in(3,6,9);
5.查詢商品名稱含有“士”字並且id爲6的商品信息
select * from product where pname like '%士%' and pid=6;
6、找出正好包含5個字符的名字
select * from pet where name like '_____';
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+
7.查詢id爲2或者6的商品信息
select * from product where pid=2 or pid=6;
4.3排序
1.查詢所有的商品,按價格進行排序(asc升序、desc降序)
select * from product order by price asc;
select * from product order by price desc;
2.查詢名稱有“士”的商品信息並且按照價格降序排序
select * from product where pname like '%士%' order by price desc;
4.4聚合函數
常用的聚合函數:sum()求和,avg()平均,max()最大值,min()最小值,count()計數
1.獲得所有商品的價格的總和
select sum(price) from product;
2.獲得所有商品的平均價格
select avg(price) from product;
3.獲得所有商品的個數
select count(*) from product;
4.5分組操作
1.添加分類id(alter table product add cid varchar(32);)
2.初始化數據
update product set cid='1';
update product set cid='2' where pid in(5,6,7);
1.根據cid字段分組,分組後統計商品的個數
select cid,count(*)from product group by cid;
2.根據cid分組,分組統計每組商品的平均價格,並且平均價格大於20000元
select cid,avg(price)from product group by cid having avg(price)>20000
3、從第3條記錄開始顯示,顯示3條記錄
select * from sort limit 2,3;
("2"表示的是從第三條記錄開始,是從0開始計數的,"3"表示查詢3條記錄)
4.6、使用函數查詢
1、日期函數
計算每個寵物的年齡
select name,birth,curdate(),(year(curdate())-year(birth))-(right(curdate(),5)<right(birth,5)) as age from pet
year():提取日期的年部分
right():提取日期的MM-DD(日曆年)部分的最右面5個字符
+----------+------------+------------+------+
| name | birth | CURDATE() | age |
+----------+------------+------------+------+
| Fluffy | 1993-02-04 | 2003-08-19 | 10 |
| Claws | 1994-03-17 | 2003-08-19 | 9 |
| Buffy | 1989-05-13 | 2003-08-19 | 14 |
| Fang | 1990-08-27 | 2003-08-19 | 12 |
| Bowser | 1989-08-31 | 2003-08-19 | 13 |
| Chirpy | 1998-09-11 | 2003-08-19 | 4 |
| Whistler | 1997-12-09 | 2003-08-19 | 5 |
| Slim | 1996-04-29 | 2003-08-19 | 7 |
| Puffball | 1999-03-30 | 2003-08-19 | 4 |
+----------+------------+------------+------+
4.6使用正則表達式查詢
1、字符‘^’:匹配以特定字符或者字符串開頭的文本
找出以"s"開頭的名字
select * from sort where sname regexp '^s';
2、字符‘$’:匹配以特定字符或者字符串結尾的文本
找出以"ao"結尾的名字
select * from sort where sname regexp 'ao$';
3、字符‘.’:匹配任意一個字符
找出名字中帶有"n"的
select * from sort where sname regexp '.n.';
4、星號‘*’:匹配前面的字符任意多次,包括0次
select * from sort where sname regexp '^bn*';
5、加號‘+’:匹配前面的字符至少一次
select * from sort where sname regexp '^di+';
6、字符‘|’:匹配多個字符串,多個字符串之間使用分隔符‘|’隔開
select * from sort where sname regexp 'di|nn|ao';
7、方括號[]:指定一個字符集,只匹配其中任何一個字符,即爲所查找的文本
select * from sort where sname regexp '[nf]';
8、字符串{n,}:表示至少匹配n次前面的字符
select * from sort where sname regexp 'd{2,}';
9、字符串{n,m}:表示匹配前面的字符串不少於n次,不多於m次
4.7查詢總結
select 一般後面的內容都是要查詢的字段
from 要查詢的表
where 查詢條件
group by 分組條件
having 分組後帶有條件只能使用having
order by 排序字段它必須放到最後面asc|desc
六、多表操作
1、外鍵
現在我們兩張表“分類表”和“商品表”,爲了表明商品屬於哪個分類,通常情況下,我們將在商品表上添加一列,用於存放分類cid的信息,此列稱爲:外鍵
此時“分類表category”稱爲:主表,“cid”我們稱爲主鍵。“商品表product”稱爲:從表,category_id稱爲外鍵。我們通過主表的主鍵和從表的外鍵來描述主外鍵關係,呈現就是一對多關係
外鍵特點:
從表外鍵的值是對主表主鍵的引用
從表外鍵類型,必須與主表主鍵類型一致
聲明外鍵約束
語法:alter table 從表 add [constraint] [外鍵名稱] foreign key (從表外鍵字段名) references 主表 (主表的主鍵);
[外鍵名稱] 用於刪除外鍵約束的,一般建議“_fk”結尾
alter table 從表 drop foreign key 外鍵名稱
使用外鍵目的:
保證數據完整性
alter table product add foreign key(category_id) references category(cid);
alter table product add constraint product_fk foreign key(category_id) references category(cid);
刪除外鍵
alter table 表名 drop foreign key 外鍵約束名
2、表與表之間的關係
2.1、一對多關係
常見實例:客戶和訂單,分類和商品,部門和員工
一對多建表原則:在從表(多方)創建一個字段,字段作爲外鍵指向主表(一方)的主鍵
建表語句
#創建數據庫
create database day09_db;
#使用數據庫
use day09_db;
#創建分類表
create table category(
cid varchar(32) primary key, #主表的主鍵
cname varchar(100) #分類名稱
);
#商品表
create table product(
pid varchar(32) primary key,
name varchar(40),
price double
);
#添加外鍵字段 category_id
alter table product add column category_id varchar(32);
#添加約束
alter table product add constraint product_fk foreign key(category_id) references category(cid);
總結:
從表不能夠添加(更新),主表中不存在的數據
主表不能夠刪除(更新),從表中已經使用的數據
2.2多對多關係:
常見實例:學生和課程,商品和訂單,人和角色
多對多關係建表原則:需要創建第三張表,中間表中至少兩個字段,這兩個字段分別作爲外鍵指向
各自一方的主鍵。(就是將一個多對多拆分成兩個一對多。)
兩張表分別都是主表,第三張表爲從表,提供兩個字段,都是外鍵
#商品表
create table product(
pid varchar(32) primary key,
name varchar(40),
price double
);
#訂單表
create table orders(
oid varchar(32) primary key,
totalprice double #總計
);
#訂單項表
create table orderitem(
oid varchar(50),--訂單id
pid varchar(50) --商品id
);
#聯合主鍵(可省略)
alter table orderitem add primary key (oid,pid);
#---訂單表和訂單項表的主外鍵關係
alter table orderitem add constraint orderitem_orders_fk foreign key(oid) references orders(oid);
#---商品表和訂單項表的主外鍵關係
alter table orderitem add constraint orderitem_product_fk foreign key (pid) references products(pid);
3、多表查詢操作
3.1、交叉連接查詢(基本上不會使用-得到的是兩個表的乘積)
語法:select * from A,B;
3.2內連接查詢(使用的關鍵字inner join --inner可以省略)
隱式內連接:select * from A,B where 條件
顯示內連接:select * from A inner join B on 條件
3.3外連接查詢(使用的關鍵字outer join --outer可以省略)
左外連接:left outer join
select * from A left outer join B on 條件;
右外連接:right outer join
select * from A right outer join B on 條件;
3.4、查詢例題
#1.查詢哪些分類的商品已經上架
select * from category,product where cid=category_id;
select * from category c,product p where c.cid=p.category_id;
#隱式內連接
select distinct cname from category c,product p where c.cid=p.category_id;
#內連接
select distinct cname from category c inner join product p on c.cid=p.category_id;
#2.查詢所有分類上架商品的個數
#左外連接
select cname,count(category_id) from category c left outer join product p on c.cid=p.category_id group by cname;
3.5、子查詢
一條select語句結果作爲另一條select語句一部分(查詢條件,查詢結果,表等)。
#子查詢,查詢“化妝品”分類上架商品詳情
#隱式內連接
select * from product p,category c where p.category_id=c.cid and c.cname='化妝品';
#子查詢
select * from product where category_id=(select cid from category where cname='化妝品');
注意:
從表外鍵不能添加主表中不存在的記錄。
主表不能刪除從表中已經引用的記錄。
七、存儲引擎
存儲引擎:也叫表類型,指的是數據表的存儲機制,索引方案等配套相關功能。不同的引擎,由於處理方式不同,會帶來不同的功能或者相應優化,根據實際需求選擇合理的引擎。
選擇表的存儲引擎的標準:
是否需要事務支持
是否支持外鍵
併發量的要求
錯誤恢復的處理
是否支持某些具體功能
最常用的存儲引擎:
MyISAM:分開保存、支持索引壓縮、是表級鎖、不支持事務,外鍵、保存表中具體的行數
InnoDB:保存到表空間、索引和數據是綁定保存的,不壓縮,體積大、很多時候是行級鎖,併發 高、不支持FULLTEXT類型的索引(新版本的InnoDB也支持),支持事務,外鍵,數據完整 性約束強、不保存表中具體行數
7.1、查看數據庫支持的引擎
show engines;
7.2、查看當前所使用的存儲引擎
show create table 表名
7.3、更改表的存儲引擎
alter table 表名 engine=更改後的存儲引擎名