mysql
什么是數(shù)據(jù)(data):硬盤中存的東西......
-
數(shù)據(jù)庫:
- 數(shù)據(jù)庫是存儲(chǔ)在一起的相關(guān)數(shù)據(jù)的集合芝此,這些數(shù)據(jù)是結(jié)構(gòu)化的绿渣,無有害的或不必要的冗余速种,并為多種應(yīng)用服務(wù)
-
數(shù)據(jù)庫的優(yōu)點(diǎn)
- 數(shù)據(jù)按照一定的數(shù)據(jù)模型組織描述和存儲(chǔ)
- 可為各種用戶共享
- 冗余度較小拳喻,節(jié)省存儲(chǔ)空間
- 易擴(kuò)展哭当,編寫有關(guān)數(shù)據(jù)庫管理
-
數(shù)據(jù)庫管理系統(tǒng)(Database Management System)
- 是一種操縱和管理數(shù)據(jù)庫的大型軟件,適用于建立使用和維護(hù)數(shù)據(jù)庫冗澈,簡稱DBMS钦勘。
- 作用:他對(duì)于數(shù)據(jù)庫進(jìn)行統(tǒng)一的管理和控制,以保證數(shù)據(jù)庫的安全性和完整性亚亲。
-
mysql命令
mysql -h host_name -u user_name -ppassword
mysql-h:當(dāng)前連接服務(wù)器不在同臺(tái)主機(jī)時(shí)彻采,填寫主機(jī)名或IP地址
mysql-u:登錄mysql用戶名
mysql-p:登錄mysql密碼
登錄過程mysql -u root -ppassword show databases;//顯示所有數(shù)據(jù)庫 use XXX; show tables;//顯示所有的表 select * from XXX;//進(jìn)入查看該表 \q:退出
數(shù)據(jù)庫由一批數(shù)據(jù)構(gòu)成的有序集合,這些數(shù)據(jù)被分門別類的存放在一些結(jié)構(gòu)化的數(shù)據(jù)表里(table)里捌归,而數(shù)據(jù)之間又往往存在交叉引用的關(guān)系肛响,這種關(guān)系使數(shù)據(jù)庫又被稱為關(guān)系型數(shù)據(jù)庫
-
數(shù)據(jù)存儲(chǔ)的完整性
- 有一對(duì)必選的有一堆可選的方案以保持完整性。
- 約束方法:唯一約束惜索、主鍵約束特笋、標(biāo)識(shí)列
- 約束方法:限制數(shù)據(jù)類型、檢查約束门扇、外鍵約束(保證程序表中的數(shù)據(jù)不孤立)雹有、默認(rèn)值偿渡、非空約束。
- 約束方法:規(guī)則霸奕,存儲(chǔ)過程溜宽,觸發(fā)器。
-
完整性包括
- 輸入的類型是否正確质帅?
- 輸入的格式是否正確适揉?
- 是否在允許的范圍內(nèi)?
- 是否存在重復(fù)輸入煤惩?
- 是否符合其他特定要求嫉嘀?
SQL
- 什么是SQL(Structured Query Language(結(jié)構(gòu)化查詢語言))
- SQL是專為數(shù)據(jù)庫而建立的操作命令集,是一種功能齊全的數(shù)據(jù)庫語言魄揉。在使用它時(shí)剪侮,只需要發(fā)出“做什么”的命令,“怎么做”是不用使用者考慮的洛退。
- SQL語句
- SQL用瓣俯;結(jié)尾,否則認(rèn)為語句未結(jié)束
- ->代表SQL語句未結(jié)束
- 取消SQL語句用\c
- SQL語句關(guān)鍵字和函數(shù)名不區(qū)分大小寫(Linux區(qū)分兵怯,Windows不區(qū)分)
- 使用函數(shù)時(shí)彩匕,函數(shù)名和后面的括號(hào)之間不能有空格
-
使用字符串需要轉(zhuǎn)義字符
Paste_Image.png
數(shù)據(jù)類型
- CHAR和VARCHAR類型
- CHAR類型和VARCHAR類型長度都是0~255之間的大小,他們之間的差別是mysql處理存儲(chǔ)的方式
- CHAR把這個(gè)大小視為值得準(zhǔn)確大小媒区,(用空格填補(bǔ)比較短的值)
- VARCHAR把它視為最大值并只使用字符串實(shí)際使用的需要字節(jié)數(shù)驼仪,較小的值存入VARCHAR類型的字段時(shí),將不會(huì)用空格填補(bǔ)袜漩。(較長值仍然會(huì)被截?cái)啵?/li>
- 數(shù)值列類型
-
mysql為除了NULL值外的所有通用數(shù)據(jù)提供了列類型绪爸。列類型是一種手段,通過該手段可以描述表類需要什么類型的表宙攻。
Paste_Image.png
Paste_Image.png
-
-
時(shí)間和日期類型
Paste_Image.png- 說明
- 每個(gè)時(shí)間和日期列類型都有一個(gè)零值毡泻,當(dāng)插入非法數(shù)值時(shí)就用零值來添加
- 表示日期時(shí)必須先按:年,月粘优,日的順序給出
- DATE ,TIME ,DATETIME分別是存儲(chǔ)日期,時(shí)間與日期和時(shí)間的組合呻顽,其格式為“YYYY-MM-DD”雹顺,“hh:mm: ss”和“YYYY-MM-DD hh:mm: ss”,對(duì)于DATETIME類型廊遍,日期和時(shí)間部分都需要
TIMESTAMP - 時(shí)間戳列類型以YYYYMMDDhhmmss的格式來表示值嬉愧,其取值范圍是19700101000000到2037年的某個(gè)時(shí)間,主要用于記錄更改或創(chuàng)建某個(gè)記錄
- 說明
表
- 創(chuàng)建表
:create table 表名(
列名1 列類型 [<列的完整性約束>],
列名2 列類型 [<列的完整性約束>],
... ... );
create database test01;//創(chuàng)建名為test01的庫
use test01;//進(jìn)入庫
show tables;//查看庫內(nèi)有幾張表
creat table data11(showtime time);//創(chuàng)建一行一列的表喉前,表名data11没酣,列名show time
insert into data11 values('11:11:11'),('11:11'),(111111);//插入數(shù)據(jù)
select * from data11;//查看表
create table data12(f_data date,f_time);
insert into data12 (f_data,f_time) values('1978-4-6',123421),(650503,'3:4:1');
create table data12(f_data date,f_time);
insert into data14('1999-11-11 11:11:11','2002-11-11 11:11:11');
insert into data14 values(now(),null);
create table t1(num1 int not null,num2 int);
insert into t1(-1,-2) values(10);
create tablet2(num1 int null,num2 int)
insert into t2(num2) values(10);
create table t3(num1 int default 100,num2 int);
insert into t3(num2) values(2);
create table t4(num2 int zerofill);
insert into t4 values(2);
create table t5(num1 int unique,num2 int);
insert into t5 values(1,2);
insert into t5 values(1,2);
create table t6(num1 int auto_increment unique not null,num2 int);
insert into t6 (num2)values(10);
insert into t6 (num2)values(10);
insert into t6 (num2)values(10);
insert into t6 values(100,10);
insert into t6 (num2)values(10);
delete from t6;
insert into t6 (num2)values(10);
引用完整性
-
主鍵和外鍵
- 數(shù)據(jù)表之間的關(guān)聯(lián)/引用關(guān)系是依靠具體的主鍵(primary key)和外鍵(foreign key)建立起來的王财。
- 主鍵:幫助MySQL以最快的速度把一條特點(diǎn)的數(shù)據(jù)記錄的位置確定下來。
- 主鍵必須是唯一的
- 主鍵應(yīng)該是緊湊的裕便,因此整數(shù)類型比較適合
- 外鍵:引用另外一個(gè)數(shù)據(jù)表的某條記錄绒净。
- 外鍵列類型盡可能與主鍵列類型保持一致
- 外鍵列應(yīng)該加上NOT NULL
-
注意點(diǎn)
- 當(dāng)主表中沒有對(duì)應(yīng)的記錄時(shí),不能將記錄添加到子表
- 不能更改主表中的值而導(dǎo)致子表中的記錄孤立
- 子表存在與主表對(duì)應(yīng)的記錄偿衰,不能從主表中刪除該行
- 刪除主表前挂疆,先刪子表
-
插入insert
- 直接在外鍵插入信息,會(huì)報(bào)錯(cuò)
主鍵 create table student( sid int not null auto_increment, name varchar(20) not null, primary key(sid) ); 外鍵(自動(dòng)檢查外鍵是否匹配下翎,僅適用InnoDB) create table score( cid int not null auto_increment primary key, score int, sid int, foreign key(sid) references student(sid) );
insert into score (score,sid) values(100,1);
Paste_Image.pnginsert into student (name) values('ssh');
Paste_Image.pnginsert into score (score,sid) values(100,1);
Paste_Image.png- 直接刪除主鍵會(huì)報(bào)錯(cuò)
delete from studnet; drop from student;
Paste_Image.png- 插入中文
create table t7(name char(20),id int); insert into t7 values('ssh',1); insert into t7 values('孫蘇徽',1);
Paste_Image.pngcreate table t7(name char(20),id int) default charset=utf8; insert into t7 values('ssh',1); insert into t7 values('孫蘇徽',1);
Paste_Image.png
更改表結(jié)構(gòu)
- add 列名 建表語句 [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 舊列名 新列名 <建表語句> [first | after 列名]
- 可以更改列類型和列名稱俐东,如果原列的名字和新列的名字相同
- modify 列名 <建表語句> [first | after 列名]
- 和change的作用相同
- drop 列名 //可以刪除一列
- drop primary key //可以刪除主鍵
- engine 類型名 //可以改變表類型
- rename as 新表名 //可以將表名更改
- alter各種使用
- 新建一個(gè)列
alter table t8 add address int after name; desc t8; select * from t8;
Paste_Image.png- 設(shè)address默認(rèn)值
alter table t8 alter address set default 100; desc t8;
Paste_Image.png- change id為number 屬性char(20)
alter table t8 change id number char(20); desc t8; select * from t8;
Paste_Image.png
Paste_Image.png- change name 屬性
alter table t8 change name name int; desc t8; select * from t8;
Paste_Image.png- modify使用
alter table t8 modify name char(20);
Paste_Image.png- drop使用
alter table t8 drop address;
Paste_Image.png- rename使用
alter table t8 rename as t9;
Paste_Image.png
mysql運(yùn)算符
- select
- select 與binary
select 'x'<>'X'; select binary 'x'<>'X';
Paste_Image.png- between
select 10 between 10 and 100;
Paste_Image.pngselect 'x' between 'a' and 'z';
Paste_Image.pngselect 7 in(1,2,3,4,5,6,7); select 7 in(1,2,3,4,5,6);
Paste_Image.png - NULL
- IS NULL 或者 IS NOT NULL來測(cè)定是否為空
-
可以使用特殊的<=>運(yùn)算符跌穗,MySQL稱為”NULL安全的等于”運(yùn)算符。這意味著即使當(dāng)包含在比較運(yùn)算符中的表達(dá)式含有一個(gè)NULL值時(shí)犬性,MySQL也會(huì)為比較運(yùn)算符返回一個(gè)真值或假值瞻离。
Paste_Image.png
- 通配符
- “%” (百分號(hào)) 代表任意長度(長度可以為0)的字符串
- a%b表示以a開頭,以b結(jié)尾的任意長度的字符串乒裆。如acb套利,addgb,ab 等都滿足該匹配串
- “_”(下橫線) 代表任意單個(gè)字符
- a_b表示以a開頭鹤耍,以b結(jié)尾的長度為3的任意字符串肉迫。如acb,afb等都滿足該匹配串
select 'mysql' like '%SQL',binary 'mysql' like '%SQL'
Paste_Image.png - “%” (百分號(hào)) 代表任意長度(長度可以為0)的字符串