數(shù)據(jù)庫學(xué)習(xí)入門數(shù)據(jù)庫基礎(chǔ).docx
《數(shù)據(jù)庫學(xué)習(xí)入門數(shù)據(jù)庫基礎(chǔ).docx》由會員分享,可在線閱讀,更多相關(guān)《數(shù)據(jù)庫學(xué)習(xí)入門數(shù)據(jù)庫基礎(chǔ).docx(28頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、數(shù)據(jù)庫基礎(chǔ)入門 ------------------- 數(shù)據(jù)庫的作用: ------------------- 數(shù)據(jù)是數(shù)據(jù)庫中存儲的基本對象 包括:文字、圖形、圖像、聲音 有組織的、可共享的數(shù)據(jù)集合 ------------------ 常用的DBMS ------------------ MYSQL(oracle、Sun) oracle(oracle) SQL-Server(Microsoft) DB2(IBM) ----------------------------
2、------- ..如何學(xué)習(xí)數(shù)據(jù)庫管理系統(tǒng) ------------------------------------ .程序員 1、標(biāo)準(zhǔn)語言:SQL(結(jié)構(gòu)化查詢語言) SQL是用于訪問 數(shù)據(jù)庫的最常用標(biāo)準(zhǔn)化語言,他是由ANSI/ISO SQL標(biāo)準(zhǔn)定義的 SQL 的分類 DML:數(shù)據(jù)操作語言(用于檢索或者修改數(shù)據(jù)) DDL:數(shù)據(jù)定義語言(用于定義數(shù)據(jù)的結(jié)構(gòu),比如創(chuàng)建、修改或者刪除數(shù)據(jù)庫的對象) DCL:數(shù)據(jù)控制語言(用于定義數(shù)據(jù)庫用戶的權(quán)限) DML: select:用于檢索數(shù)據(jù) insert:用于增
3、加數(shù)據(jù)到數(shù)據(jù)庫 update:用于從數(shù)據(jù)庫中修改現(xiàn)存的數(shù)據(jù) delete:用于從數(shù)據(jù)庫中刪除數(shù)據(jù) DDL: create table //創(chuàng)建表 alter //修改表 drop table //刪除表 create index //創(chuàng)建索引 drop index //刪除索引 create view //創(chuàng)建視圖 drop view //刪除視圖 DCL: grant //授權(quán) revoke //撤銷授權(quán) set //設(shè)置 2、不同數(shù)據(jù)庫的獨特管理方式 .DBA(D
4、atabase Administrator) 1、標(biāo)準(zhǔn)語言:SQL(結(jié)構(gòu)化查詢語言) 2、不同數(shù)據(jù)庫的獨特管理方式 3、數(shù)據(jù)庫的調(diào)優(yōu) 4、精通數(shù)據(jù)庫的備份、回復(fù)機(jī)制 ----------------------------- MYSQL的安裝與配置 ---------------------------- 安裝:選擇普通安裝類型 .配置 1、選擇配置類型:Detailed Configuration 2、選擇服務(wù)器類型:Developer Machine 3、選擇數(shù)據(jù)庫的是使用情況: --多
5、功能數(shù)據(jù)庫(Multifunctional Database) --只是事務(wù)處理數(shù)據(jù)庫(Transactional Database Only) --只是非事務(wù)處理數(shù)據(jù)庫(Non-Transactional Database Only) 4、InnoDB表空間文件存儲的盤符,默認(rèn)在c:\ 5、數(shù)據(jù)庫并發(fā)連接數(shù)配置:Decision support 6、MYSQL服務(wù)器端口:默認(rèn):3306 7、Enable Strict Mode:是否允許嚴(yán)格樣式檢查:取消 8、選擇字符編碼:手工選擇:gb2312,windows下中文支持 9、服
6、務(wù)器默認(rèn)安裝到windows系統(tǒng)服務(wù)中,默認(rèn)服務(wù)自啟動,選擇自動配置環(huán)境變量 10、填寫數(shù)據(jù)庫管理系統(tǒng)的管理員密碼 --在mySQL中數(shù)據(jù)庫管理員的用戶名為:root 11、是否允許使用root用戶遠(yuǎn)程登錄數(shù)據(jù)庫 12、測試配置是否正確c:\>c:\mysql\bin\mysqlshow ------------------------ MYSQL 的登錄 ------------------------ .開始--運行--cmd .輸入:mysql -uroot -p,然后輸入密碼 .或者:mysql -uroo
7、t -p密碼 .退出quit或者\q --不必全在一個行內(nèi)給出一個命令,較長命令可以輸入到多個行中。mysql通過尋找終止分號而不是輸入行的結(jié)束來決定語句在哪兒結(jié)束 ->等待多行命令的下一行 >等待下一行,等待以單引號開始的字符串結(jié)束 如果你決定不想執(zhí)行正在輸入過程中的一個命令,輸入\c取消它 能夠以大小寫輸入關(guān)鍵詞,結(jié)果是等價的 -------------------- 基本的SQL語句 -------------------- 創(chuàng)建數(shù)據(jù)庫---create database school; 查看有哪些數(shù)
8、據(jù)庫--show databases; 刪除數(shù)據(jù)庫---drop database school; -------------------------- 向數(shù)據(jù)庫中存儲數(shù)據(jù) -------------------------- 1、首先進(jìn)入數(shù)據(jù)庫 use dbname; use類似quit,不需要一個分號,寫也無礙 use必須在一個單行上給出 2、查看數(shù)據(jù)庫中的表 show tables; 3、在數(shù)據(jù)庫中創(chuàng)建表 create table student ?。╪ame varchar(20),age int,sex c
9、har(2)); 4、向表中插入數(shù)據(jù)---insert into dbname values(‘張三’,18,‘男’); 5、查看表中所有的數(shù)據(jù)--select * from student; 只查看姓名和年齡---select name,age from student; -------------------- 常用的數(shù)據(jù)類型 -------------------- char(M)固定長度字符 用來表示固定長度字符串,字符串的長度是1-255 VARCHAR(M)可變長度字符 具有靈活性的字符數(shù)據(jù)類型,范圍:
10、1-255 處理char類型的數(shù)據(jù)比varchar類型的數(shù)據(jù)要快,有時會快50%(char類型存儲的數(shù)據(jù)的長度是聲明變量時的固定長度,而不管數(shù)據(jù)的實際長度,varchar存儲的是按數(shù)據(jù)的實際長度,從而減小了數(shù)據(jù)文件的大小) int 整數(shù) 有符合的范圍:-2147483648到2147483647,無符號范圍:0到4294967295 -------------------------- 其他常用的數(shù)據(jù)類型 -------------------------- DATE---日期類型,顯示‘YYYY-MM-DD’ DATETIME--日期和
11、時間的組合,顯示‘YYYY-MM-DD HH:MM:SS TEXT/BLOB 文本和大對象 TEXT可以保存字符串的長度在255-65535字節(jié)內(nèi)。BLOB是一個能保存二進(jìn)制數(shù)據(jù)的大對象,區(qū)別是TEXT不區(qū)分大小寫,而BLOB區(qū)分大小寫。 SQL語句的導(dǎo)入 1、編寫SQL腳本(.sql) 2、導(dǎo)入mysql-uusername -p < ***.sql &練習(xí): &老師表:teacher &姓名,性別,年齡,課程 導(dǎo)出sql腳本---mysqldump stu -uroot -p>abc.sql 查看表的結(jié)構(gòu)---
12、---desc tablename 修改表中的數(shù)據(jù)---update tablename set colname=value where條件 刪除數(shù)據(jù)-----delete from teacher where age=? 刪除表中所有數(shù)據(jù)---delete from teacher; 刪除表---drop table tablename 根據(jù)條件進(jìn)行過濾查找---select *from tablename where 條件 查找出版社為“清華出版社”的所有書籍---select *from books where pub=‘清華出版社’;
13、 查找出庫存大于50的所有書籍---select *from books where store>50; 查找出“西游記”的庫存量---select title,store from books where title=‘西游記’; SQL運算符 >大于 <小于 >=大于等于 <=小于等于 !=,<>不等于 查看數(shù)據(jù)庫的信息----\s ------------------- mysql常用函數(shù) ------------------- 1、查看數(shù)據(jù)庫版本---select versin(); 計算機(jī)的時間是存在BIOS
14、() 2、查看當(dāng)前數(shù)據(jù)庫的日期----select current_date(); 3、查看當(dāng)前數(shù)據(jù)庫時間----select now(); 4、查看當(dāng)前連接數(shù)據(jù)庫的用戶---select user();localhost:代表是本機(jī) create table user(id int,name varchar(20),bir date,dea datetime); insert into user values(1,zhangsan,now(),now()); or和and查詢 or(滿足一個條件) and(都需要滿足)
15、查找學(xué)生EQ為80分或90分的學(xué)生 select * from stu where EQ=80 or EQ=90; 查找學(xué)生EQ為90分并且性別為女的學(xué)生 select * from stu where EQ=90 and sex=女; in(x,x)返回條件中的記錄與or作用相似 select * from tablename where 條件 in(,); between‘’ and‘’返回兩者之間的記錄 查詢年齡在20-30之間的所有學(xué)生 select * from stu where age between 20 and
16、30; like與通配符(%)一起使用,模糊查詢 查找出姓張的學(xué)生 select * from stu where name like ‘張%’; 查詢出使用163郵箱的所有學(xué)生 select * from stu where email like ‘’; 查詢出郵箱里面含有a的所有學(xué)生 select * from stu where email like ‘%a%’; order by 實現(xiàn)排序(從小到大)--asc 將學(xué)生的年齡從高到低排列 select * from stu order by age desc
17、;(降序) 將學(xué)生的年齡從低到高排列 select * from stu order by age asc;(升序) 數(shù)據(jù)默認(rèn)為升序(從低到高) select * from stu order by age ; as為查詢的列起別名 1、查詢所有學(xué)生只列出姓名,年齡,性別 select name as 姓名,age as 年齡,sex as 性別 from stu; group by對于查詢出的數(shù)據(jù)結(jié)果進(jìn)行分類(分組) 2、將學(xué)生按性別進(jìn)行分類 select * from stu group by sex;
18、 將學(xué)生按年齡進(jìn)行分類 select * from stu group by age; 3、having 子查詢:對于where查詢出的結(jié)果再次進(jìn)行查詢 查找出年齡大于20歲學(xué)生,并且在其中找出姓名等于xxx的學(xué)生 select * from stu where age >20 having name=xxx或 select * from stu where age>20 and name=xxx 4、distinct 過濾查詢的重復(fù)型記錄,只顯示唯一的記錄 將學(xué)生性別過濾 select distinct(sex) from st
19、u; count 查看表中有幾條數(shù)據(jù) select count(*) from stu; select count(distinct(sex)) from stu; limit 限制查詢結(jié)果的輸出數(shù)量 同時也可以實現(xiàn)數(shù)據(jù)的分頁 查詢EQ前三名的學(xué)生 select * from stu order by EQ desc limit 3; 實現(xiàn)查詢記錄的分頁 select * from stu limit 0,3; select * from stu limit 3,3; 約束----定義了表級的強(qiáng)制規(guī)則、數(shù)據(jù)的完整性
20、 非空約束(not null) create table test(id int not null); insert into test values(); innodb 會報錯 ,myISAM 會整形默認(rèn)以0填充 唯一約束(UNIQUE) 不允許列中的數(shù)據(jù)重復(fù) create table test(id int,unique(id)); insert into test values(1); 默認(rèn)約束(default) create table test(id int not null default111111); insert into te
21、st values(); 主鍵約束(primary key)是一個字段或一組字段(組合鍵),用于唯一標(biāo)識表中的記錄,它可以 確保每個記錄是唯一的。 create table test(id int,primary key(id)); insert into test valuse(1); id主鍵自增,減 create table test (id int,name varchar(20),primary key(id)); insert into test values(1,張安); auto_increment的特點-------自增
22、值 當(dāng)刪除某一值時,他不會自動填充,而是繼續(xù)自增1 create table test(id int not null auto_increment,name varchar(20),primary key(id)); insert into test(name)values(xxx); 創(chuàng)建一個有合理約束的表 create table people(id int not null auto_increment,name varchar(20) not null,age int not null,sex char(2) not null,pcode varcha
23、r(50),tel varchar(50),email varchar(50),primary key(id)); insert into people(name,age,sex,email) values(張三,‘28’,‘男’,abc@); 查詢出所有學(xué)生的檔案信息 select * from student,school where student.daih=school.id;或 select * from student as a,school as b where a.daih=b.id; 查詢所有學(xué)生檔案信息 只需顯示:學(xué)生姓名,年齡。畢業(yè)
24、學(xué)校,學(xué)校地址 select student.name,student.age,school.name,school.addres s from student, school where student.daih=school.id;或 select a.name,a.age,b.name,b.address from student as a, school as b where a.daih=b.id; 外鍵約束( foreign key) 如何創(chuàng)建外鍵 foreign key:定義子中的列為外鍵 references:標(biāo)記外鍵所要參考的父
25、表和列 on delete cascade:允許在刪除父表的列的同時,刪除子表的列 //在InnoDB中支持 create datebase fordb; use fordb; 創(chuàng)建父表 create table school(id int not null auto_increment,name varchar(20),primary key(id))engine=innodb; insert into school(name) values(紫瑯學(xué)院); 創(chuàng)建 子表 create table student(id int no
26、t null auto_increment,name varchar(20),schoolid int,primary key(id),foreign key(schoolid) references school(id) on delete cascade); insert into student(name,schoolid) values(張三,1); E-R模型 概述:設(shè)計數(shù)據(jù)庫時,通常采用"實體關(guān)系模型“--E-R模型 軟件開發(fā)流程: 需求調(diào)研(設(shè)計功能,收集數(shù)據(jù)) 與最終用戶進(jìn)行確定 數(shù)據(jù)庫的設(shè)計 控制多余數(shù)據(jù)
27、 那么在最后,數(shù)據(jù)庫設(shè)計者確定表、不同表之間的關(guān)系以及每個表之間的關(guān)系,通常使用”E-R模型“,它將整個系統(tǒng)看作彼此相關(guān)的實體組成 實體:通常用于表示 能夠被清晰識別的人、地點、事物、對象、事件 實體關(guān)系圖:如果需要 基于‘E-R’模型建立數(shù)據(jù)庫模型,需要標(biāo)識實體,實體的屬性、以及實體之間的關(guān)系。那么通常用‘E-R’圖來表示 實體之間的三種類型:1:1 1:N 或N :1 M:N 數(shù)據(jù)庫設(shè)計員確定的實體被轉(zhuǎn)換為表,而其屬性則成為相應(yīng) 表中的字段(列) 如何控制冗余數(shù)據(jù): 一般來說通過數(shù)據(jù)庫的范式理論 設(shè)計數(shù)據(jù)庫的范式來 控制冗余
28、共有五個范式,一般達(dá)到第三范式即可 第一范式:對于表中的每一行,必須且僅僅有唯一的行值,在一行中的每一列僅有唯一的值并且具有原子性 第二范式 :要求 非主鍵列是主鍵的子集,非 主鍵列活動必須完全依賴整個主鍵。主鍵必須有唯一性的元素,一個主鍵可以由一個或更多的組成唯一值的列組成。一旦創(chuàng)建 ,主鍵 無法改變,外鍵關(guān)聯(lián)一個表的主鍵。主外鍵關(guān)聯(lián)意味著一對多的關(guān)系。 第三范式:要求非主鍵列互不依賴 第四范式:禁止主鍵列和非主鍵列一對多關(guān)系不受 約束 第五 范式 :將表分割成盡可能 小的塊,為了排除在表中所有的冗余 MYSQL的聚合函數(shù) 1、最大值
29、 找出EQ最高的學(xué)生 select name ,eq from student where eq=(select max(EQ)from student); SELECT MAX(article) AS article FROM shop; 2、最小值 找出EQ最低的學(xué)生 select name,min(EQ)from student; count()//統(tǒng)計 查詢出的記錄總數(shù) 3、查詢出學(xué)生的總條數(shù) select count(name)from student; avg()//求平均值 4、查詢學(xué)生EQ的平
30、均值 select avg(EQ) from student; sum()//求和 5、查詢學(xué)生EQ的總和 select sum(EQ) from stu; 修改字段類型 alter table student modify sex char(5); 增加列 alter table student add address varchar(50); 刪除列 alter table student drop address; 修改列的名稱 alter table student change name
31、names varchar(20); 修改表的名字 rename table student to stu; MYSQL 之表連接 內(nèi)鏈接(inner join):又為等值連接,因為他將兩個表中的公共字段有相等的值(記錄)連接起來,這是最常用的連接。一個表引用還被稱為 查詢顯示:訂單編號,顧客姓名,物品名稱 select cases.id,user.name,goods.name from cases,user,goods where cases.user_id=user.id and cases.goods_id=goods.id;或
32、select cases.id,user.name,goods.name from cases inner join(user,goods) on(user.id=cases.user_id and goods.id=cases.goods_id);或 select cases.id,user.name,goods.name from (cases inner join user on cases.user_id=user.id) inner join goods on cases.goods_id=goods.id;或 select cases.id,user.name,go
33、ods.name from user inner join(cases inner join goods on cases.goods_id=goods.id) on user.id=cases.user_id); 左連接:顯示sql語句中l(wèi)eft join 左邊表中的所有記錄,即使在left join 右邊的表中沒有滿足連接條件的數(shù)據(jù)也被顯示。當(dāng)滿足連接條件時,left join 右邊的表中的相應(yīng)的記錄與left join左邊表中的相應(yīng)記錄結(jié)合顯示。 查詢出:學(xué)生的編號,學(xué)生姓名 ,學(xué)生學(xué)校 select student.name,student.id,school.
34、name from student left join school on student.school_id=school.id; 右連接:與左連接相對應(yīng),他顯示sql語句中right join 右邊表中的記錄,即使在right join 左邊沒有的記錄也被顯示。當(dāng)滿足條件時。right join左邊表中相應(yīng)記錄將與right join右邊的表中相應(yīng)記錄進(jìn)行結(jié)合顯示。通常左連接和右連接顯示的內(nèi)容是一樣的。 select student.name,student.id,school.name from student right join school on student.s
35、chool_id=school.id; left join 以左邊的表查詢?yōu)橹? right join 以右邊的表查詢?yōu)橹? 示例: student left join school 那么student就為左表。school就為由表 MYSQL之視圖 視圖:它可以訪問一個或多個表中的數(shù)據(jù),是從一個或多個表中派生出的數(shù)據(jù)對象(虛表) 視圖的特點: 1、將復(fù)雜的查詢簡單化 2、提供安全機(jī)制,它保證用戶只可以看得到的數(shù)據(jù),系統(tǒng)中真實的表是不可被存取的(現(xiàn)都支持更改數(shù)據(jù)) 創(chuàng)建視圖: create view c
36、ase_view as select cases.id as 訂單編號,user.name as 顧客姓名,goods.name as 物品名稱 from user inner join(cases inner join goods on cases.goods_id=goods.id) on user.id=cases.user_id; 注意點: 視圖屬于數(shù)據(jù)庫,在默認(rèn)情況下,將在當(dāng)前數(shù)據(jù)庫創(chuàng)建新視圖。要想在給定數(shù)據(jù)庫中明確創(chuàng)建視圖。創(chuàng)建時,應(yīng)將名稱指定為 db_name.view_name mysql>create view test.v as select
37、 *from t; 視圖必須具有唯一的列名,不得有重復(fù),就像基表那樣。 修改視圖:alter view viewname as SQL; 刪除視圖:drop view viewname; alter view case_view as select cases.id as 編號,user.name as 姓名,goods.name as 名稱 from user inner join(cases inner join goods on cases.goods_id=goods.id) on user.id=cases.user_id; 數(shù)據(jù)字典
38、數(shù)據(jù)庫的數(shù)據(jù)字典---實際上是一個數(shù)據(jù)庫 它記錄著數(shù)據(jù)庫管理系統(tǒng)中的其他數(shù)據(jù)庫的操作 mysql數(shù)據(jù)庫字典:information_schema use information_schema select * from views; --------------------------- MYSQL的事務(wù)與引擎 --------------------------- 什么是 事務(wù)(transaction) 所謂事務(wù),它是一個操作序列。這些操作要么都執(zhí)行,要么都不執(zhí)行,他是一個不可分割的工作單位 事務(wù)是數(shù)據(jù)庫維護(hù)數(shù)據(jù)
39、一致性的單位,在每個事務(wù)結(jié)束時,都能保持?jǐn)?shù)據(jù)一致性 mysql表類型: 在mysql中有多種表的類型,但是分為兩類 : 事務(wù)類型:InnoDB、BDB 非事務(wù)類型:MYISAM、MERGE、MEMORY(HEAP) InnoDB和BDB存儲引擎提供事務(wù)安全表。BDB被包含在mac支持它的操作系統(tǒng)發(fā)布的mysql-max二制分發(fā)版里。InnoDB也默認(rèn)被包括在所有mysql5.1二進(jìn)制分發(fā)版里 InnoDB是為處理巨大數(shù)據(jù)量時的最大性能設(shè)計。它的cpu效率可能是任何其他基于磁盤的關(guān)系數(shù)據(jù)庫引擎所有不能匹敵的。 MYISAM管理非事務(wù)表。他提
40、供高速存儲和檢索,以及全文搜索能力。 ISAM數(shù)據(jù)表是mysql最原始的數(shù)據(jù)表,有三個文件,分別是: .frm,存放數(shù)據(jù)表的結(jié)構(gòu)定義 .isd,數(shù)據(jù)文件,存放數(shù)據(jù)表中的各個數(shù)據(jù)行的內(nèi)容 .ism,索引文件,存放數(shù)據(jù)表的所有索引信息。 MYISAM是數(shù)據(jù)表是ISAM數(shù)據(jù)表的繼承者,也是三個文件,分別是: .frm,結(jié)構(gòu)定義文件; .MYD,數(shù)據(jù)文件; .MYI,索引文件。 BDB數(shù)據(jù)表用兩個文件 來表示,分別是; .frm,結(jié)構(gòu)定義文件 .DB,數(shù)據(jù)表數(shù)據(jù)和索引文件 INNODB:由于采用表空間的概念
41、來管理數(shù)據(jù)表,所以他只有一個與數(shù)據(jù)表對應(yīng).frm文件,同一目錄下的其他文件表示為空間,存儲數(shù)據(jù)表的數(shù)據(jù)和索引 HEAP數(shù)據(jù)表是一個存在與內(nèi)存中的表,所以他的數(shù)據(jù)和索引都存在于內(nèi)存中,文件系統(tǒng)中只有一個.frm文件,及定義結(jié)構(gòu),當(dāng)mysql關(guān)閉后數(shù)據(jù)都將消失。 定義表的的類型 create table test(id int)engine=heap; 事務(wù)表幣非事務(wù)表有幾大優(yōu)勢: 更安全。即使mysql崩潰或遇到硬件問題 ,要么自動恢復(fù),要么從備份加事務(wù)日志恢復(fù),你可以取回數(shù)據(jù) 你可以合并許多語句,并用commit語句同時接受她們?nèi)浚ㄈ绻鸻uto
42、commit被禁止掉) 你可以執(zhí)行rollback來忽略你的改變(如果autocommit被禁止掉) 如果更新失敗,你的所有改變都變回原來。(用非事務(wù)安全表,所有發(fā)生的改變都是永久的) 事務(wù)安全存儲引擎可以給那些當(dāng)前用 讀得到許多更新的表提供 更好的部署。 非事務(wù)表自身有幾大優(yōu)點: 非事務(wù)表自身有幾大優(yōu)點,因為沒有事務(wù)開支,所有優(yōu)點都能出現(xiàn): 更快 需要更更少的磁盤空間 執(zhí)行更新需要更少的內(nèi)存 你可以在同一個語句中合并事務(wù)安全和非事務(wù)安全表來獲得兩者最好的情況。盡管如此,在autocommit被禁止掉的事務(wù)里,變換到非事務(wù)
43、安全表依舊即使提交并且不會被回滾 如何在innodb中實現(xiàn)事務(wù): begin://告知服務(wù)器我要開始一個事物 rollback://如果事務(wù)發(fā)生異常,那么數(shù)據(jù)回滾 commit://事務(wù)執(zhí)行成功,進(jìn)行數(shù)據(jù)提交 mysql> begin; Query OK, 0 rows affected (0.00 sec) mysql> insert into test11 values(1,zhangs); Query OK, 1 row affected (0.00 sec) mysql> select * from test11;
44、 +------+--------+ | id | name | +------+--------+ | 1 | zhangs | +------+--------+ 1 row in set (0.00 sec) mysql> end; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to
45、 use near end at line 1 mysql> rollback; Query OK, 0 rows affected (0.00 sec) mysql> select * from test11; Empty set (0.00 sec) mysql> commit; Query OK, 0 rows affected (0.00 sec) mysql> select * from test11; Empty set (0.00 sec) 修改表類型 sql語句:alter table tablen
46、ame engine=innodb; 注意:不可以將mysql系統(tǒng)表比如‘user’或‘host’轉(zhuǎn)換成innodb類型。系統(tǒng)表必須為myisam類型 對myisam進(jìn)行事務(wù)處理---鎖 lock table tablename(read,write) lock table 可以對表進(jìn)行加鎖控制,以保證用戶并發(fā)訪問時非事務(wù)表的數(shù)據(jù)一致性 unlock tables 釋放鎖 mysql 之index(索引) 什么是索引? 索引被用來快速找出在一個列上用一特定值的行。沒有索引,mysql不得不首先以第一條記錄開始并然后讀完整個表直到他
47、找出相關(guān)的行,表越大,花費時間越多。如果表對于查詢的列有一個索引,mysql能快速到達(dá)一個位置去搜尋到數(shù)據(jù)文件的中間,沒有必要考慮所有數(shù)據(jù)。 索引的作用: 快速找出匹配一個where子句的行 當(dāng)執(zhí)行連接時,從其他表檢索行 對特定的索引列找出max()或min()值 mysql中的索引: 索引實際上是一個分離的列表,具有一個指向全表的指針 myisam表,索引被存儲為分離文件 innodb,索引存儲為表空間的一部分 mysql有四種類型的索引:主鍵(primary key)、唯一索引(unique)、全文索引(full in
48、dex)、普通索引(index) 創(chuàng)建index 1、create index indexname on tablename(columnname); indexname(索引名稱) tablename(表名稱) columnname(要創(chuàng)建索引的字段名稱) 2、alter table tablename add index indexname(columnname); 查看索引----show keys from tablename; 刪除index--alter table tablename drop index index
49、name; full index(myisam支持) create table chat(id int,chat1 text,chat2 text); create fulltext index index_text on tablename(col1,col2); alter table tablename add fulltext(col1,col2); 高效使用索引: 太多的索引,占用空間 每次進(jìn)行插入或更新時,索引都必須針對變化 重新排序,會導(dǎo)致 很多額外負(fù)擔(dān) 何處使用索引? 1、where從句中條件匹配的
50、行 select name from student where comment like“a%”; comment域的索引就起到了作用 Explain 分析索引 語法: explain select age from test12; Explain 分析mysql中的索引: table:查詢中涉及的表 type:顯示連接中使用了何種類型 const(最好),eq_ref,fef,range,index和all possible_keys:可能用到的索引 key:實際使用的索引,可以在select語句中使用use inde
51、x(indexname)來強(qiáng)制使用索引,用ignore index(indexname)來強(qiáng)制忽略索引key_len:使用的索引長度,越短越好; ref(references):顯示索引哪一列被使用了 rows:mysql必須檢查用來返請求數(shù)據(jù)的行數(shù) extra:using temporary(需要臨時表來存儲結(jié)果,通常發(fā)生在對不同的列集進(jìn)行order by),usig filesort 意即mysql根本 不能使用索引 索引的算法:btree bitmap 使用索引注意的事項; 1、合理創(chuàng)建索引,反之會降低數(shù)據(jù)庫的查詢效率,反之創(chuàng)建的索引會失去
52、意義。 mysql的備份方式:backup、 restore 、copy//冷備份、mysqldump、select into backup備份myisam表的 示例: >use test; >backup table chat to c:\\db_backup; 只生成 .frm 和 .myd,可以在數(shù)據(jù)庫恢復(fù)后重建索引 >drop table chat; >restore table chat from c:\\db_backup; copy備份 1、停止mysql服務(wù)器一避免 在備份的時候有用戶進(jìn)行數(shù)據(jù)庫的訪
53、問 1、復(fù)制數(shù)據(jù)庫的文件夾 用mysqldump備份 備份庫 1、備份 #mysqldump -uroot -p dbname >xxxname.sql 再打開查看(創(chuàng)建表備份的sql語句) 2、恢復(fù) #mysql -uroot -p dbname <> 備份某個表 1、備份 #mysqldump -uroot -p dbname tablename >xxxname.sql 再打開文件進(jìn)行查看(創(chuàng)建表備份的sql語句) 2、恢復(fù) #mysql -uroot -p d
54、bname <> 用select into 備份 備份:mysql>select *from tablename into outfile c:\\db_backup\table.dat 刪除表: mysql>delete from tablename; 恢復(fù): mysql>load data infile c:\\db_backup\table.dat into table tablename; 作業(yè): 1、唯一索引 2、全文索引 要求:理解她們的意思及用途,以及實驗 3、select into備份
55、 MYSQL其他客戶端工具 查看數(shù)據(jù)庫中有哪些數(shù)據(jù)庫 mysqlshow -uroot -p 查看數(shù)據(jù)庫中有哪些表 mysqlshow -uroot -p dbname 查看數(shù)據(jù)庫中表的結(jié)構(gòu) mysqlshow -uroot -p dbname tablename mysqlcheck客戶端可以檢查和修復(fù)myisam表,他還可以優(yōu)化和分析表 1、mysqlcheck -uroot -p dbname //檢測 2、mysqlcheck -uroot -p --auto-repair dbname //如碰到有問題的表自動
56、進(jìn)行修復(fù) 3、mysqlcheck -uroot -p --optimize //優(yōu)化表 MYSQL 管理方式 連接方式----mysql -hlocalhost -uroot 通過本地主機(jī),以root用戶訪問,無需密碼驗證 mysql -hlocalhost 通過本地主機(jī),匿名用戶訪問,無需密碼驗證 設(shè)置密碼----mysqladmin 外部: 1、修改密碼--mysqladmin hlocalhost -uroot -p password "newpassword" 2、密碼為空--mysqladmin -hlocalhost
57、 -uroot -p password "" 3、設(shè)置root用戶遠(yuǎn)程訪問密碼--mysqladmin -hremote -uroot -p password "" 內(nèi)部設(shè)置密碼: 1、設(shè)置root用戶本地登錄密碼 set password for root@localhost=password(000000); 2、設(shè)置root用戶遠(yuǎn)程登錄密碼 set password for root@remote=password(newpassword); 加密: mysql> use start Database changed
58、 mysql> create table users(username varchar(50),password varchar(50)); Query OK, 0 rows affected (0.16 sec) mysql> insert into users values(abcd,123456); Query OK, 1 row affected (0.34 sec) mysql> insert into users values(abcdfg,password(123456)); Query OK, 1 row affected (0.
59、00 sec) mysql> select * from users; select user,host,password form user; +----------+-------------------------------------- -----+ | username | password | +----------+-------------------------------------- -----+ | abcd | 123456 | | abcdfg | *6BB4837EB74329105EE4568DDA7DC67ED
60、2CA2AD9 | +----------+-------------------------------------- -----+ 2 rows in set (0.00 sec) 系統(tǒng)中的權(quán)限表 user表:記錄允許連接到服務(wù)器的用戶帳號信息,里面的權(quán)限是全局 級的 db表:記錄各個帳號在各個數(shù)據(jù)庫上的操作權(quán)限 table_priv記錄數(shù)據(jù)表級的操作權(quán)限 columns_priv:記錄數(shù)據(jù)列級的操作權(quán)限 host表:配合db權(quán)限表對給定主機(jī)上數(shù)據(jù)庫級操作權(quán)限作更細(xì)致的控制。這個權(quán)限表不受grant和revoke語句的影響
61、 -------------------------------------------------- --------------------------------------------------- -------------------------------- 設(shè)置密碼---修改user表 直接修改user表 mysql>use mysql; mysql>update user set password=password(newpassword)where user=root; mysql>flush privilegs;重新加載權(quán)限表,
62、使修改立即生效 添加用戶 mysql> use mysql mysql> insert into user(host,user,password)values(localhost,test, password(222222)); mysql> flush privileges; 授權(quán):grant all on *.* to test@localhostidentified by 222222 grant select on stus.* to test@localhostidentified by 121212 grant privile
63、ges(columns) privileges表示授予的權(quán)限,columns表示作用的列(可選) on what 設(shè)置權(quán)限級別:全局級、數(shù)據(jù)庫級、表級、列級 to account 權(quán)限授予的用戶:用user _name@host_name這種用戶名、主機(jī)名格式、identified by password設(shè)置密碼 privileges有哪些 alter 修改表和索引 create 創(chuàng)建數(shù)據(jù)庫和表 delete 刪除表中以有的記錄 drop 刪除數(shù)據(jù)庫和表 inde 創(chuàng)建和刪除索引 insert 向表
64、中插入數(shù)據(jù) select 檢索表中的數(shù)據(jù)、 update 修改表中的記錄 file 讀寫服務(wù)器上的數(shù)據(jù) process 查看服務(wù)器中執(zhí)行的線程信息或殺死線程 reload 重載授權(quán)表或清空日志、主機(jī)緩存或表緩存 shutdown 關(guān)閉服務(wù)器 all 所有權(quán)限 revoke取消授權(quán) mysql>revoke privileges(columns)on what from account; 注:revoke可刪除權(quán)限,但不能刪除帳號,即使帳號已經(jīng)沒有任何權(quán)限。所以user數(shù)據(jù)表里還會有該帳號的記錄,要徹底刪除帳
65、號,需使用delete命令手工刪除user表中的相關(guān)數(shù)據(jù)。 示例: revoke all on *.*fromtest@localhost; delete from user where user=test; 細(xì)節(jié)權(quán)限的分配與撤銷 grant select,delete,update on student,test.*toerich@localhostidentified by test 運行結(jié)果是,erich用戶只能通過‘test‘密碼從本機(jī)訪問student,test數(shù)據(jù)庫,并且沒有insert權(quán)限 revoke select,delete,update on student.*fromerich@localhost; 運行結(jié)果是,將erich用戶在student數(shù)據(jù)庫中的select,delete,update權(quán)限撤銷
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案