一拌倍、什么是MySQL?
MySQL 是一個(gè)小型關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)噩翠,開發(fā)者為瑞典 MySQL AB 公司廊鸥。由于其體積小、速度快次酌、總體擁有成本低恨课,尤其是開放源碼這一特點(diǎn),MySQL 被廣泛地應(yīng)用在Internet 上的中小型網(wǎng)站中岳服。
MySQL的特征:
- 性能快捷剂公、優(yōu)化SQL語(yǔ)言
- 容易使用
- 多線程和可靠性
- 多用戶支持
- 可移植性和開放源代碼
- 遵循國(guó)際標(biāo)準(zhǔn)和國(guó)際化支持
- 為多種編程語(yǔ)言提供API
二、MySQL基本操作
(一)mysql命令
mysql -h host_name -u user_name –ppassword
- h :當(dāng)連接 MySQL 服務(wù)器不在同臺(tái)主機(jī)時(shí)吊宋,填寫主機(jī)名或 IP 地址
- u :登錄 MySQL 的用戶名
- p :登錄 MySQL 的密碼
注意:密碼如果寫在命令行的時(shí)候一定不能有空格纲辽。如果使用的系統(tǒng)為 linux 并且登陸用戶名字與 MySQL 的用戶名相同即可不用輸入用戶名密碼,linux 默認(rèn)是以 root 登陸璃搜,windows 默認(rèn)用戶是 ODBC拖吼。
(二)mysql程序常用命令
- 顯示所有數(shù)據(jù)庫(kù):
show databases;
- 選定默認(rèn)數(shù)據(jù)庫(kù):
use dbname;
- 顯示默認(rèn)數(shù)據(jù)庫(kù)中所有表:
show tables;
- 退出 mysql 程序:
\q
三、數(shù)據(jù)庫(kù)的基礎(chǔ)知識(shí)
數(shù)據(jù)完整型 = 可靠性 + 準(zhǔn)確性
分類 | 概述 | 約束方法 |
---|---|---|
數(shù)據(jù)實(shí)體完整性 | 實(shí)體的完整性強(qiáng)制表的標(biāo)識(shí)符列或主鍵的完整性 | 唯一約束腺劣、主鍵約束或標(biāo)識(shí)列 |
字段完整性 | 如果插入的數(shù)據(jù)不滿足限制要求绿贞,數(shù)據(jù)庫(kù)管理系統(tǒng)就拒絕執(zhí)行操作 | 限制數(shù)據(jù)類型、檢查約束橘原、外鍵約束籍铁、默認(rèn)值涡上、非空約束 |
引用完整性 | 在刪除和輸入記錄時(shí),保持表之間已定義的關(guān)系拒名,確保鍵值在所有表中一致吩愧。不能孤立,即引用不存在的值 | 外鍵約束 |
自定義完整性 | 用戶自己定義的業(yè)務(wù)規(guī)則 | 規(guī)則增显、存儲(chǔ)過程雁佳、觸發(fā)器 |
完整型包括:列值要求(約束)、行值要求(約束)
四同云、什么是SQL糖权?
(一)SQL語(yǔ)法組成
SQL | 概述 | 命令 |
---|---|---|
DML(Data Manipulation Language數(shù)據(jù)操作語(yǔ)言) | 查詢、插入炸站、刪除和修改數(shù)據(jù)庫(kù)中的數(shù)據(jù) | SELECT星澳、INSERT、 UPDATE 旱易、DELETE等 |
DCL(Data Control Language數(shù)據(jù)控制語(yǔ)言) | 用來(lái)控制存取許可禁偎、存取權(quán)限等 | GRANT、REVOKE等 |
DDL(Data Definition Language數(shù)據(jù)定義語(yǔ)言) | 用來(lái)建立數(shù)據(jù)庫(kù)阀坏、數(shù)據(jù)庫(kù)對(duì)象和定義其列 | CREATE TABLE如暖、DROP TABLE、ALTER TABLE等 |
功能函數(shù):日期函數(shù)忌堂、數(shù)學(xué)函數(shù)盒至、字符函數(shù)、系統(tǒng)函數(shù)等浸船。
(二)MySQL中的SQL語(yǔ)言
- 屬于一個(gè)SQL語(yǔ)句妄迁,使用分號(hào)(;)結(jié)尾寝蹈,否則mysql認(rèn)為語(yǔ)句沒有輸入完李命。
- 箭頭(->)代表SQL語(yǔ)句沒有輸入完取消SQL語(yǔ)句使用(\c)。
- SQL語(yǔ)句關(guān)鍵字和函數(shù)名不區(qū)分大小寫(Linux區(qū)分箫老,Windows不區(qū)分)封字。
- 使用函數(shù)時(shí),函數(shù)名和后面的括號(hào)之間不能有空格耍鬓。
(三)MySQL數(shù)據(jù)類型
- 數(shù)據(jù)類型種類
- 數(shù)值列類型
數(shù)值列類型包括整型和浮點(diǎn)型
類型 | 大小 | 范圍(有符號(hào)) | 范圍(無(wú)符號(hào)) | 用途 |
---|---|---|---|---|
TINYINT | 1 byte | (-128阔籽,127) | (0,255) | 小整數(shù)值 |
SMALLINT | 2 bytes | (-32 768牲蜀,32 767) | (0笆制,65 535) | 大整數(shù)值 |
MEDIUMINT | 3 bytes | (-8 388 608,8 388 607) | (0涣达,16 777 215) | 大整數(shù)值 |
INT或INTEGER | 4 bytes | (-2 147 483 648在辆,2 147 483 647) | (0证薇,4 294 967 295) | 大整數(shù)值 |
BIGINT | 8 bytes | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0匆篓,18 446 744 073 709 551 615) | 極大整數(shù)值 |
FLOAT | 4 bytes | (-3.402 823 466 E+38浑度,-1.175 494 351 E-38),0鸦概,(1.175 494 351 E-38箩张,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38窗市,3.402 823 466 E+38) | 單精度先慷、浮點(diǎn)數(shù)值 |
DOUBLE | 8 bytes | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308)咨察,0熟掂,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0扎拣,(2.225 073 858 507 201 4 E-308赴肚,1.797 693 134 862 315 7 E+308) | 雙精度、浮點(diǎn)數(shù)值 |
DECIMAL | 對(duì)DECIMAL(M,D) 二蓝,如果M>D誉券,為M+2否則為D+2 | 依賴于M和D的值 | 依賴于M和D的值 | 小數(shù)值 |
- 字符串列類型
CHAR類型和VARCHAR類型。
CHAR類型和VARCHAR類型長(zhǎng)度范圍都是0~255之間的大小刊愚。他們之間的差別在于MySQL處理存儲(chǔ)的方式:
A. CHAR把這個(gè)大小視為值的準(zhǔn)確大杏桓(用空格填補(bǔ)比較短的值)。
B. VARCHAR類型把它視為最大值并且只使用了存儲(chǔ)字符串實(shí)際上需要的字節(jié)數(shù)(增加了一個(gè)額外的字節(jié)記錄長(zhǎng)度)鸥诽。因而商玫,較短的值當(dāng)被插入一個(gè)語(yǔ)句為VARCHAR類型的字段時(shí),將不會(huì)用空格填補(bǔ)牡借。 - 日期和時(shí)間列類型
存儲(chǔ)如“2005 -1-1” 或者“12:00:00”這樣的數(shù)值的值拳昌。在MySQL中日期是按”年-月-日”的順序。
類型說明 | 格式 | 取值范圍 | 存儲(chǔ)要求 |
---|---|---|---|
DATE | "YYYY-MM-DD" | "1000-01-01"到"9999-12-31" | 3字節(jié) |
TIME | "hh:mm:ss" | "-838:59:59"到"838:59:59" | 3字節(jié) |
DATETIME | "YYYY-MM-DD hh:mm:ss" | "1000-01-01 00:00:00"到"9999-12-31 23:59:59" | 8字節(jié) |
TIMESTAMP[(M)] | "YYYYMMDDhhmmss" | 19700101000000到2037年的某個(gè)時(shí)刻 | 4字節(jié) |
YEAR[(M)] | "YYYY" | 1901到2155 | 1字節(jié) |
(四)數(shù)值列的完整性約束
- AUTO_INCREMENT
自動(dòng)標(biāo)識(shí)列钠龙,在需要產(chǎn)生唯一標(biāo)志符號(hào)或者順序值時(shí)候炬藤,可用此屬性。
create table t(id int auto_increment not null primary key);
- UNSIGNED
無(wú)符號(hào)碴里,此屬性禁用負(fù)值沈矿,將數(shù)值的取值范圍從零開始。
create table t(num tinyint , num2 tinyint unsigned);
- NULL 和NOT NULL
默認(rèn)為NULL咬腋,即插入值時(shí)沒有在此字段插入值時(shí)自動(dòng)填NULL羹膳,如果指定了NOT NULL,則必須在插入值時(shí)在此字段添入值根竿,不允許插入NULL值陵像。 - DEFAULT
可以通過此屬性來(lái)指定一個(gè)缺省值湃缎,即如果沒有在此列添加值,那么默認(rèn)添加DEFAULT后指定值蠢壹。 - ZEROFILL
前導(dǎo)零填充數(shù)值類型值以達(dá)到列的顯示寬度嗓违。
create table test2(num1 int default 1,num2 int zerofill);
五、數(shù)據(jù)庫(kù)操作
(一)建立數(shù)據(jù)庫(kù)操作
語(yǔ)法:
create database 數(shù)據(jù)庫(kù)名
敘述:創(chuàng)建一個(gè)具有指定名稱的數(shù)據(jù)庫(kù)图贸。如果要?jiǎng)?chuàng)建的數(shù)據(jù)庫(kù)已經(jīng)存在蹂季,或者沒有創(chuàng)建它的適當(dāng)權(quán)限,則此語(yǔ)句失敗疏日。
(二)建立表操作
語(yǔ)法 :
create table 表名(
列名1 列類型 [< 列的完整性約束>],
列名2 列類型 [< 列的完整性約束>],
... ... );
敘述:在當(dāng)前數(shù)據(jù)庫(kù)下新創(chuàng)建一個(gè)數(shù)據(jù)表偿洁。
列類型:表示該列的數(shù)據(jù)類型。
(三)顯示表結(jié)構(gòu)操作
語(yǔ)法:
describe 表名沟优; 表名涕滋;
desc 表名; 表名挠阁;
敘述:用于顯示表的創(chuàng)建結(jié)構(gòu)宾肺。
(四)刪除數(shù)據(jù)庫(kù)或表操作
- 刪除表操作
語(yǔ)法:
drop table [if exists] tab_name [,tab_name]...
敘述:從數(shù)據(jù)庫(kù)中刪除給定的表。如果給出if exists 子句侵俗,則刪除不存在的表不會(huì)出錯(cuò)锨用。
- 刪除數(shù)據(jù)庫(kù)操作
語(yǔ)法:
drop database [if exists] db_name
敘述:刪除給定的數(shù)據(jù)庫(kù)。在刪除一個(gè)數(shù)據(jù)庫(kù)后隘谣,它就永遠(yuǎn)沒有了,因此要特別小心增拥。如果給出if exists 子句,則刪除不存在的數(shù)據(jù)庫(kù)不會(huì)出錯(cuò)寻歧。
(五)更改表結(jié)構(gòu)操作
語(yǔ)法:
alter table 表名 action;
說明:
action可以是如下語(yǔ)句:
add 列名 建表語(yǔ)句 [first | after 列名] //可以為表添加一列
//如果沒指定first或者after掌栅,則在列尾添加一列,否則在指定列添加新列
add primary key (列名) //為表添加一個(gè)主鍵码泛,如果主鍵已經(jīng)存在猾封,則出現(xiàn)錯(cuò)誤
add foreign key (列名) references 表名 (列名) //為表添加一個(gè)外鍵
alter 列名 set default 默認(rèn)值 //可以更改指定列默認(rèn)值
change 舊列名 新列名 <建表語(yǔ)句> [first | after 列名] //可以更改列類型和列名稱
//如果原列的名字和新列的名字相同
modify 列名 <建表語(yǔ)句> [first | after 列名] //和change的作用相同
drop 列名 // 可以刪除一列
drop primary key // 可以刪除主鍵
engine 類型名 //可以改變表類型
rename as 新表名 // 可以將表名更改
六、MySQL運(yùn)算符
- 算數(shù)運(yùn)算符
運(yùn)算符 | 語(yǔ)法 | 說明 |
---|---|---|
+ | a + b | 加弟晚,操作數(shù)之和 |
- | a - b | 減忘衍,操作數(shù)之差 |
- | - a | 一元減號(hào),操作數(shù)取負(fù) |
* | a * b | 乘卿城,操作數(shù)之積 |
/ | a / b | 除,操作數(shù)之商 |
% | a % b | 模铅搓,操作數(shù)除后的余數(shù) |
- 比較運(yùn)算符
比較運(yùn)算符允許我們對(duì)表達(dá)式的左邊和右邊進(jìn)行比較瑟押。一個(gè)比較運(yùn)算符的結(jié)果總是1(真),0(假)星掰,或是為NULL(不能確定)多望。
比較運(yùn)算符可以用于比較數(shù)字和字符串嫩舟。數(shù)字作為浮點(diǎn)值比較,而字符串以不區(qū)分大小寫的方式進(jìn)行比較(除非使用特殊的BINARY二進(jìn)制關(guān)鍵字)怀偷。
運(yùn)算符 | 語(yǔ)法 | 說明 |
---|---|---|
= | a = b | 如果兩操作數(shù)相等家厌,為真 |
!=,<> | a != b, a <> b | 如果兩操作數(shù)不等,為真 |
< | a < b | 如果a小于b椎工,為真 |
<= | a <= b | 如果a小于等于b饭于,為真 |
> | a > b | 如果a大于b,為真 |
>= | a >= b | 如果a大于等于b维蒙,為真 |
IN | a IN (b1,b2,...) | 如果a為b1,b2,...中任意一個(gè)掰吕,為真 |
BETWEEN | a BETWEEN a AND c | 如果a值在b與c之間(包括b、c)颅痊,為真 |
LIKE | a LIKE b | SQL模式匹配:如果a與b匹配殖熟,為真 |
NOT LIKE | a NOT LIKE b | SQL模式匹配:如果a與b不匹配,為真 |
REGEXP | a REGEXP b | 擴(kuò)展正規(guī)表達(dá)式匹配:如果a與b匹配斑响,為真 |
NOT REGEXP | a NOT ERGEXP b | 擴(kuò)展正規(guī)表達(dá)式匹配:如果a與b不匹配菱属,為真 |
<=> | a <=> b | 如果兩操作數(shù)相同(即使為NULL),為真 |
IS NULL | a IS NULL | 如果操作數(shù)為NULL舰罚,為真 |
IS NOT NULL | a IS NOT NULL | 如果操作數(shù)不為NULL照皆,為真 |
MySQL數(shù)據(jù)庫(kù)中的通配符:
“%” ( 百分號(hào)) 代表任意長(zhǎng)度(長(zhǎng)度可以為0)的字符串
“_ ”( 下橫線) 代表任意單個(gè)字符
- 邏輯運(yùn)算符
與(AND,&&)、或(OR,||)沸停、非(NOT,!) - 位運(yùn)算符