1、基本概念mysql
一、數據sql
(1)數據的定義:對客觀事物的符號表示,如圖形符號、數字、字母等,數據是數據庫中存儲的基本對象。數據庫
(2)數據的種類:文字、圖形、圖像、聲音編程
(3)數據的特色:數據與其語義是不可分的瀏覽器
二、數據庫安全
數據庫(DataBase簡稱DB)是按照數據結構來組織、存儲和管理數據的倉庫。服務器
三、數據庫管理系統(好比:MySql)數據結構
(1)數據庫管理系統(Database Management System 簡稱DBMS)是一種操縱和管理數據庫的大型軟件,是用於創建、使用和維護數據庫。多線程
(2)關係型數據庫管理系統稱爲RDBMS,R指Relation。併發
(3)DBMS的做用:它對數據庫進行統一的管理和控制,以保證數據庫的安全性和完整性。
四、數據庫系統
數據庫系統(Database System,簡稱DBS),是由數據庫及其管理軟件組成的系統。
五、數據庫管理員
數據庫管理員(Database Administrator,簡稱DBA),負責全面管理和控制數據庫系統。
六、DBA、DBMS、DB和DBS之間的關係
七、數據庫的優勢
(1)數據按必定的數據模型組織、描述和儲存
(2)可爲各類用戶共享
(3)冗餘度較小,節省存儲空間
(4)易擴展,編寫有關數據庫應用程序
2、數據庫管理系統(DBMS)
一、DBMS的主要功能
(1)數據定義功能:提供數據定義語言(DDL)
用於定義數據庫的全部特性和屬性,尤爲是行佈局、列定義、鍵列(有時是選鍵方法)、文件位置和存儲策略,包括命令:
DROP(刪除數據庫)
刪除數據庫:drop database if exists 數據庫名
CREATE(建立數據庫)
建立表:create table if not exists 表名(列名 列名約束)
ALTER(修改數據庫)
添加列名:alter table 表名 add 列名 約束條件
修改列名:alter table 表名 change 老列名 新列名 數據類型
修改列字段數據類型:alter table 表名 modity 列名 數據類型
刪除列名:alter table 表名 drop 列名
修改表名:alter table 表名 rename 新表名
GRANT(賦予權限)
REVOKE(從當前用戶或組中取消權限)、TRUNCATE(只刪除表中的全部數據,不刪除表的結構)
注意:truncate table命令將快速刪除數據表中的全部記錄,但保留數據表結構。這種快速刪除與delete from數據表的輸出所有數據表記錄不同,delete命令刪除的數據將存儲在系統回滾段中,須要的時候,數據能夠回滾恢復,而truncate命令刪除的數據是不可恢復的。
(2)數據操縱功能:提供數據操縱語言(DML)
操縱數據實現對數據庫的基本操做:
SELECT(查詢)
select from 表名 where 條件(條件1 and 條件2)
INSERT(插入)
insert into 表名(列1,列2) values(' ',' '),(' ',' '),(' ',' ')
DELETE(刪除)
delete from 表名 where 條件
UPDATE(修改)
update 表名 set 列名=' ',列名=' ' where 條件
(3)數據庫的運行管理
a、保證數據的安全性、完整性
b、多用戶對數據的併發使用
c、發生故障後的系統恢復
(4)數據庫的創建和維護功能(實用程序)
a、數據庫數據批量裝載
b、數據庫轉儲
c、介質故障的修復
d、數據庫的重組織
e、性能監視
二、DBMS的分類(大公司首選oracle-----數據庫中的貴族)
小型數據庫:Access、foxbase、sqlite
中型數據庫:mysql、sql server、infomix
大型數據庫:Sybase、Oracle、db2
注意:Mysql、SQL server、Oracle、DB2三者的特色
Oracle:
(1)最穩定、功能最強大、性能最好、容量無限、最昂貴、重量級,分佈式數據庫 系統,適用於大型的項目
(2)"關係----對象"型數據庫
MySQL:
(1)輕量級、易安裝、易管理、速度比較快,使用起來方便,適用於中小型企業
(2)開源、免費、與PHP組成經典的LAMP組合
SQL Server:
(1)針對不一樣用戶羣體的五個特殊的版本
(2)易用性好
DB2:
(1)應用於大型應用系統,具備較好的可伸縮性
三、B/S和C/S
B/S瀏覽器服務器Browser Server
客戶不須要安裝程序,只須要有瀏覽器引擎便可:淘寶
C/S客戶端服務器Client Server
客戶須要安裝程序,好比:QQ
3、MySQL的概念、特性以及不足
一、概念
(1)什麼是MySQL
MySQL本來是一個開放源代碼的關係數據庫管理系統,原開發者爲瑞典的MySQL AB公司,該公司於2008年被Sun公司收購。2009年,甲骨文公司Oracle收購Sun公司,MySQL成爲Oracle旗下產品。
MySQL在過去因爲性能高、成本低、可靠性好,已經成爲最流行的開源數據庫,所以被普遍地應用在Internet上的中小型網站中。隨着MySQL的不斷成熟,它也逐漸用於更多規模網站和應用,好比Google和Facebook等網站。
(2)什麼是SQL
SQL是Structured Query Language(結構化查詢語言)的縮寫。SQL是專爲數據庫而創建的操做命令集,是一種功能齊全的數據庫語言。在使用它時,只須要發出「作什麼」的命令,「怎麼作」是不用使用者考慮的。
二、MySQL的特徵:
(1)性能快捷、優化SQL語言
(2)容易使用
(3)多線程和可靠性
(4)多用戶支持
(5)可移植性和開發源代碼
(6)遵循國際標準和國際化支持
(7)爲多種編程語言提供API
三、MySQL5新特性
(1)子查詢
(2)視圖
(3)存儲過程
(4)觸發器
(5)事務處理
(6)熱備份
(7)二進制Bit類型
等等......
四、MySQL的不足
(1)不能直接處理XML數據
(2)一些功能上支持得不夠完善和成熟
(3)不能提供任何OLAP(實時分析系統)功能
4、MySQL的使用
一、用命令行來執行數據庫(DDL數據庫定義語言)
(1)輸入登陸密碼(鏈接的密碼)
(2)顯示MySQL中全部的數據庫
show databases;
(3)退出MySQL
使用quit、exit、\q退出MySQL
(4)建立數據庫(create database 數據庫名)
create datebase school
建立數據庫時,判斷是否具備同名數據庫再建立
create datebase if not exists school
建立數據庫後,爲數據庫設置字符編碼
alter database school character set utf8
(5)刪除數據庫(drop database 數據庫名)
drop database school
(6)使用某個數據庫(user 數據庫名)
注意:進入到該數據庫,例如你新建表的時候要先寫這句話,這樣保證了個人表建立在該數據庫下,反之會默認放置在默認的數據庫中
use school
(7)建立表(create table 表名 (列名1 數據類型,.......))
create table if not exists user(id int not null primary key,username varchar(40),password varchar(50),power int not null)
建立表時,是id自動遞增用auto_increment
create table if not exists user(id int not null auto_increment primary key,username varchar(40),password varchar(50),power int not null)
注意:關於數據類型:char和varchar
char(20):分配20個空間,當只使用5個空間時,沒用的空間會被空格填補
varchar(20):分配20個空間,當只使用5個空間時,那麼空間會佔用6個,其中一個保存數據長度。
所以,建議使用varchar
(8)顯示選擇的數據庫中全部的表
show tables
(9)查看錶裏面的詳細信息(desc 表名)
desc user
(10)刪除表(drop table 表名)
drop table user
(11)刪除一個表的主鍵(alter table 表名 drop primary key)
alter table user drop primary key
(12)往表中添加一列(alter table 表名 add 要添加的列名 數據類型)
alter table user add address varchar(50)
(13)往id列後面添加一列
alter table user add phone varchar(50) after id
(14)增長一列,使其位於第一列
alter table user add id1 int not null first
(15)刪除某一列(alter table 表名 drop 列名)
alter table user drop id1
(16)修改表字段
a、使用change能夠修改字段名稱和該字段的數據類型(alter table 表名 change 字段名 新字段名 新數據類型)
alter table user change id userid varchar(30)
b、使用Modify只能修改數據類型(alter table 表名 modify 字段名 新數據類型)
alter table user modify password varchar(30)
二、Navicat進行增刪改查(DML數據操縱語言)
Navicat代碼註釋的三種:
--註釋的代碼(注意空格)
#註釋的代碼
/*註釋的代碼*/
(1)建立一張表
CREATE TABLE student( stuId VARCHAR(20) NOT NULL PRIMARY KEY, stuName VARCHAR(40) NOT NULL, stuMsg VARCHAR(80) NOT NULL )
(2)往表中添加記錄
insert into 表名(字段1,字段2,......) values(值1,值2,......)
INSERT INTO student(stuId,stuName,stuSex,stuPassword) VALUES('1','楊惠霞','女','123456'), ('2','朱元梅','女','985082'), ('3','楊修志','男','435291'), ('4','祝橫崗','男','648310')
(3)查找表中名字爲祝橫崗,密碼爲648310的記錄,並列條件使用and
SELECT * FROM student WHERE stuName='祝橫崗' AND stuPassword='648310'
(4)修改表中的記錄(update 表名 set 列名=‘xxx’ where ......)
將id爲4的字段stuName的值改爲「關雎宮」
UPDATE student SET stuName='關雎宮' WHERE stuId='4'
(5)刪除表中的記錄(delete from 表名 where ......)
刪除編號爲3的數據
DELETE FROM student WHERE stuId='3'
5、MySQL數據類型
一、數據類型種類
(1)數值型
a、整型
能夠由十進制和十六進制表示,整數由數字序列組成,如:100,0xA
b、浮點型
浮點數由一個數字加一個小數點再加上一個數字組成,如:10.5
(2)字符串
由單引號或者雙引號括起來的字符或者數字,如:'abc10',"abc"
字符串中要用轉義字符才能表示的特殊符號
串轉義序列 | |||
序列 | 說明 | 序列 | 說明 |
\0 | NUL(ASCII 0) | \n | 新行 |
\' | 單引號 | \r | 回車 |
\"" | 雙引號 | \t | 製表符 |
\b | 退格 | \\ | 反斜槓 |
(3)日期和時間值
存儲如"2005-1-1"或"12:00:00"這樣數值的值,MySQL中日期是按"年-月-日"的順序
(4)NULL值
是一種無類型的值,表示「空,什麼也沒有」
二、數值列類型
(1)全部數值列類型的類型名以及其說明和所佔的字節數見下表:
類型名 | 說明 | 類型名 | 說明 |
TINYINT | 很是小的整數 | BIGINT | 大整數 |
SMALLINT | 較小整數 | FLOAT | 單精度浮點數 |
MEDIUMINT | 中等大小的整數 | DOUBLE | 雙精度浮點數 |
INT | 標準整數 | DECIMAL | 一個串的浮點數(多用於銀行的數值) |
類型說明 | 存儲需求 |
TINYINT[(M)] | 1字節 |
SMALLINT[(M)] | 2字節 |
MEDIUMINT[(M)] | 3字節 |
INT[(M)] | 4字節 |
BIGINT[(M)] | 8字節 |
FLOAT[(M,D)],FLOAT(4) | 4字節 |
DOUBLE[(M,D)],FLOAT(8) | 8字節 |
DECIMAL(M,D) | M字節 |
M是從1到255的值,它表示列中值的字符數
類型說明 | 取值範圍(MySQL<3.23) | 取值範圍(MySQL>=3.23) |
DECIMAL(4,1) | -9.9到99.9 | -999.9到9999.9 |
DECIMAL(5,1) | -99.9到999.9 | -9999.9到99999.9 |
DECIMAL(6,1) | -999.9到99999.9 | -99999.9到999999.9 |
DECIMAL(6,2) | -99.99到999.99 | -9999.99到99999.99 |
DECIMAL(6,3) | -9.999到99.999 | -999.999到9999.999 |
對於每種浮點型,可指定一個最大的顯示尺寸M和小數位D,M和D對於DECIMAL是必須的
(2)數值列的完整性約束
a、auto_increment
自動標識列,一個表中最多能有一個此屬性的列。對於想使用此屬性的列應該定義爲not null,並定義爲primary key或定義爲unique鍵。
create table student(id int auto_increment not null primary key)
b、unsigned
無符號,此屬性禁用負值,將數值的範圍從0開始。
create table student(num tinyint,num2 tinyint unsigned)
c、null和not null
默認爲null,即插入值時沒有在此字段插入值時自動填null,若是指定了not null,則必須在插入值時在此字段添入值,不容許插入null值。
d、default
能夠經過此屬性來指定一個缺省值,即若是沒有在此列添加值,那麼默認添加default後指定值。
e、zerofill
前導零填充數值類型值以達到列的顯示寬度。
三、字符串列類型
全部字符串列類型及其說明和所佔字節數見下表:
類型名 | 說明 |
CHAR | 定長字符串 |
VARCHAR | 可變長字符串 |
TINYBLOB | 很是小的BLOB(二進制大對象) |
BLOB | 小BLOB |
MEDIUMBLOB | 中等的BLOB |
LONGBLOB | 大BLOB |
TINYTEXT | 很是小的文本串 |
TEXT | 小文本串 |
MEDIUMTEXT | 中等文本串 |
LONGTEXT | 大文本串 |
ENUM | 枚舉:列可賦予某個枚舉成員 |
SET | 集合:列可賦予多個集合成員 |
(1)CHAR和VARCHAR類型
CHAR類型和VARCHAR類型長度範圍都是0~255之間的大小。他們之間的差別在於Mysql處理存儲的方式:
CHAR把這個大小視爲值的準確大小(若是值的長度不夠長,則用空格填補比較短的值)。
VARCHAR類型把它視爲最大值而且只使用了存儲字符串實際上須要的字節數(增長一個額外的字節記錄長度)。於是較短的值當被插入一個語句爲VARCHAR類型的字段時,將不會用空格填補(然而,較長的值仍然被截短)。
(2)BLOB和TEXT類型
BLOB是二進制大對象,若是想存儲二進制數,BLOB將是最佳選擇,而TEXT與之相同,只是BLOB按照二進制編碼排序(區分大小寫),TEXT按照字符文本模式排序(不區分大小寫)。
(3)ENUM和SET類型
它們是特殊的串類型,其列值必須從固定的串集中選擇,兩者差異爲前者必須是隻能選擇其中的一個值,然後者能夠多選。(不推薦使用)
枚舉的例子:
alter table test2 add sex enum('男','女'); insert into test2 values(2,70,'男');
四、日期和時間列類型
全部時間和日期列類型的類型名及其說明和所佔的字節數見下表:
類型名 | 說明 |
DATE | ‘YYYY-MM-DD’格式表示的日期值 |
TIME | 'hh:mm:ss'格式表示的時間值 |
DATETIME | 'YYYY-MM-DD hh:mm:ss'格式 |
TIMESTAMP | 'YYYYMMDDhhmmss'格式表示的時間戳值 |
YEAR | 'YYYY'格式的年份值 |
注意:(1)每一個時間和日期列類型都有一個零值,當插入非法數值時就用零值來添加
(2)表示日期時必須先按:年,月,日的順序給出
(3)DATE,TIME,DATETIME分別是存儲日期,時間與日期和時間的組合,其格式爲"YYYY-MM-DD","hh:mm:ss"和"YYYY-MM-DD hh:mm:ss",對於DATETIME類型,日期和時間部分都須要。
(4)TIMESTAMP
時間戳列類型以YYYYMMDDhhmmss的格式來表示值,主要用於記錄更改或建立某個記錄。
五、常見數據類型
分類 | 備註和說明 | 數據類型 | 說明 |
二進制數據類型 | 存儲非字符和文本的數據 | BLOB | 可用來存儲圖像 |
文本數據類型 | 字符數據包括任意字母、符號或者數字字符的組合 | char | 固定長度的非Unicode字符數據 |
varchar | 可變長度非Unicode數據 | ||
text | 存儲長文本信息 | ||
日期和時間 | 日期和時間在單引號內輸入 | time | 時間 |
date | 日期 | ||
datetime | 日期和時間 | ||
貨幣數據類型 | 用於財務數據 | decimal | 定點數 |
Bit數據類型 | 表示是/否的數據 | bit | 存儲布爾數據類型 |
數值型數據 | 該數據僅包含數字,包括整數、負數以及浮點數 | int smallint |
整數 |
float double |
浮點數 |
六、常見的完整性約束
類型 | 說明 |
PRIMARY KEY | 主碼約束主鍵) |
UNIQUE | 惟一性約束 |
NOT NULL | 非空值約束 |
AUTO_INCREMENT | 用於整數列默認自增1 |
UNSIGNED | 無符號整數 |
DEAULT default_value | 默認值約束 |
DEAULT cur_timestamp | 建立新記錄時默認保存當前時間(僅適用timestamp數據列) |
ON UPDATE cur_timestamp | 修改記錄時默認保存當前時間(僅適用timestamp數據列) |
CHARACTER SET name | 指定字符集(僅使用字符串) |
七、數據表的類型(在表上右鍵,點擊對象信息,能夠看到表的類型)
在建立一個新的MySQL數據表時,能夠爲它設置一個類型,其中最重要的3中類型是:
(1)MyISAM:成熟、穩定和易於管理
(2)InnoDB:加入事物、數據行級鎖定機制、外鍵約束條件、崩潰恢復等新功能(經常使用)
(3)HEAP:只存在於內存中,可作臨時表
create table tmp(...)ENGINE=MyISAM
八、主鍵和外鍵
(1)索引:優化查詢速度
(2)數據表之間的關聯/引用關係是依賴具體的主鍵(primary key)和外鍵(foreign key)創建起來的。
(3)主鍵:幫助MySQL以最快的速度把一條特色的數據記錄的位置肯定下來
注意:主鍵必須是惟一的
主鍵應該是緊湊的,所以整數類型比較適合
(4)外鍵:引用另一個數據表的某條記錄
注意:外鍵列類型儘量與主鍵列類型保持一致
外鍵列應該加上NOT NULL
例子:
主鍵:
CREATE TABLE student( sid INT NOT NULL auto_increment PRIMARY KEY, name VARCHAR(20) NOT NULL )
外鍵:(自動檢查外鍵是否匹配,僅適用InnoDB)
CREATE TABLE score( cid INT NOT NULL auto_increment PRIMARY KEY, score INT, sid INT, FOREIGN KEY(sid)REFERENCES student(sid) );
建立完表以後再建立外鍵的方法:
格式:ALTER TABLE 表名 ADD CONSTRAINT 外鍵名 FOREIGN KEY(外鍵) REFERENCES 另外一個表名(參考主鍵);
ALTER TABLE score ADD CONSTRAINT sid FOREIGN KEY(sid) REFERENCES student(sid);
刪除外鍵:
格式:ALTER TABLE 表名 DROP FOREIGN KEY 外鍵名字(注意:這裏是外鍵的名字,而不是外鍵列名)
ALTER TABLE score DROP FOREIGN KEY sid
九、主表和從表
(1)當主表中沒有對應的記錄時,不能將記錄添加到字表