1 .數(shù)據(jù)庫的優(yōu)勢: 1.程序的穩(wěn)定性:任意一臺服務(wù)所在的機器崩潰了都不會影響數(shù)據(jù)的和另外的服務(wù) 2.數(shù)據(jù)一致性: 所有的數(shù)據(jù)都存儲在一起,所有的程序操作的數(shù)據(jù)都是統(tǒng)一的 3.并發(fā):數(shù)據(jù)庫可以良好的支持并發(fā) 4.效率;使用數(shù)據(jù)對數(shù)據(jù)的進行增刪改查的效率要高出我們自己處理文件很多
2 .數(shù)據(jù)庫服務(wù)器,數(shù)據(jù)管理系統(tǒng),數(shù)據(jù)庫,表與記錄的關(guān)系: 記錄: 1 朱哥 123456789 22 (多個字段組成的一條記錄,即文件的一行內(nèi)容) 表: 即文件 數(shù)據(jù)庫: database(文件夾) 數(shù)據(jù)庫管理系統(tǒng) : mysql (是一個軟件) 數(shù)據(jù)庫服務(wù)器: 相當于一臺電腦 總結(jié): 數(shù)據(jù)庫服務(wù)器:運行數(shù)據(jù)庫管理軟件的機器 數(shù)據(jù)庫管理軟件: 管理數(shù)據(jù)庫 數(shù)據(jù)庫:即文件夾,用來組織文件/表 表:文件,用來存放多行記錄/數(shù)據(jù) 3 .數(shù)據(jù)庫的分類:關(guān)系型數(shù)據(jù)庫 和非關(guān)系型數(shù)據(jù)庫 關(guān)系型數(shù)據(jù)庫:需要表結(jié)構(gòu) mysql ,oracle ,SQL server, db2 非關(guān)系型數(shù)據(jù)庫:不需要表結(jié)構(gòu) redis ,mongodb,memcache 4 . mysql mysql是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),在wed應(yīng)用方面是最好的RDBMS應(yīng)用軟件 體積小,速度快,成本低,開放源碼,一般適合中小型網(wǎng)站的開發(fā)
5 .sql語句 關(guān)于用戶,權(quán)限,遠程登錄 select user(); 查看當前用戶 exit 退出 也可以用quit or \q mysql -uroot -p 使用管理員賬戶登錄 set password = password('root') 給當前數(shù)據(jù)庫設(shè)置密碼
create user '用戶名'@'ip地址' identified by '密碼' 創(chuàng)建用戶和密碼 必須要包含ip地址 create user '用戶'@'ip地址' 指定某個機器可以連上 create 'user'@'ip'%' 所有的機器都可以連接 show grants for '用戶名'%'ip地址'; 查看某個用戶的權(quán)限 mysql -u用戶名 -p密碼 -hIP地址 遠程登陸
grant all on *.* to '用戶名'@'ip地址' 給賬號授權(quán) flush privileges; 刷新使授權(quán)立即生效 grant all on 數(shù)據(jù)庫.表名 '用戶名'@'ip地址' identified by '123' 創(chuàng)建賬號 并給其授權(quán) enum(選擇1,選擇2):必須二選一 set(選擇1,選擇2,選擇3):多選
關(guān)于操作庫的: 増:create database 庫名 charset utf8; 查:show databases; 改:alter database 庫名 charset utf8; 刪: drop database 庫名;
關(guān)于操作文件(表)的: 先切換到庫中:use 庫名; 増:create table 表名(id int,name char(15)); 查:show tables; 刪:drop table '表名'; 改:alter table '表名' modify name char(3); 修改字段的數(shù)據(jù)類型 alter table '表名' change '舊字段' '新字段' char(5); 修改字段的名字
關(guān)于文件中的內(nèi)容(記錄): 増:insert into '表名' values (1,'alex1'),(2,'alex2'),(3,'alex3') 查:select 字段 from '表名'; 改:undate 表名 set name = 'sb' where id = 2; undate 表名 set name = 'sb' where id = 2; 刪:delete from '表名' where id =1;
清空表:delete from '表名'
auto_increment 表示:自增 primary key 約束 (not null unique) 不能重復(fù) 不能為空 ;方便查找
6. mysql中的存儲引擎 innodb myisam memory blackhole innodb :支持事務(wù),行級鎖,外鍵 mysisam:支持表級鎖 memory: 內(nèi)存級別的存儲引擎 具有緩存的作用 不能完成數(shù)據(jù)的持久化存儲,mysql server重啟后會失效(起到緩存的作用) blackhole:黑洞 所有的數(shù)據(jù)都會寫入,但是都不會記錄到表中 事務(wù):多個sql語句組成的一個完整的事件,要么一起成功,要么一起失敗 行級鎖:能夠支持更多的修改數(shù)據(jù)的并發(fā)操作 當要修改的行數(shù)非常多的時候,效率也會受到影響 外鍵:在本表中有一個字段 關(guān)聯(lián)外表中的另一個字段 表級鎖:不能支持并發(fā)的修改同一張表的數(shù)據(jù) 不需要加很多細粒度的鎖來浪費時間
查看當前默認的存儲引擎: show variables like 'default_storage_engine' 查看當前數(shù)據(jù)庫支持的存儲引擎: show engines \G;
7. 表操作 表相當于文件,表中的一條記錄就相當于文件的一行內(nèi)容,不同的是一條記錄有對應(yīng)的標題,稱為表的字段 查看表結(jié)構(gòu) desc 表名; 查看標的詳細信息(編碼和存儲引擎) show create table 表名 \G;
8 . 基礎(chǔ)數(shù)據(jù)類型 整數(shù) int 整型的長度約束 實際上沒有效果 小數(shù) float float(n,m) 這個數(shù)據(jù)的總長度n,小數(shù)位m 時間格式 now() year data time datetime 允許為空,沒有默認值,能夠在標識的時間范圍大 timestamp 不允許為空 默認值是當前時間,能夠表示的時間范圍小,超出范圍后表示為 0000-00-00 00:00:00 若同一個表中有兩個該字段,只有第一個字段會被表示為當前默認當前時間 字符串格式 char 定長 存儲相對浪費空間,存儲速度快,不管存儲什么樣的數(shù)據(jù)都會把數(shù)據(jù)的空格在顯示的時候去掉 varchar 變長 相對節(jié)省空間.存儲效率相對慢
9 . 完整性約束 not null :非空約束 指定某列不能為空 unique:唯一約束 指定某列或者幾列的組合不能重復(fù) primary key:主鍵,指定該列的值可以唯一的標識該列數(shù)據(jù) foreign key:外鍵,指定該行記錄從屬主表中的一條記錄,主要用于參照完整性 default:默認值 指定unique的幾種方式: create table t1(id int unique); create table t1(id int,unique(id)); not null 和 unique連用相當于設(shè)置主鍵 聯(lián)合唯一: create table t1(id int,name char(5),age int(3),unique(id,name) primary key:主鍵 單字段主鍵 1.not null unique 2.在某一字段后加primary key 3.在所有字段后加上primary key(字段) 4.給已經(jīng)建成的字段設(shè)置主鍵 alter table t1 modify id int primary key 多字段主鍵: 1.在每個字段后設(shè)置 primary key 2.在所有字段后設(shè)置primary key(字段1,字段2) auto_increament:約束字段自動增長 被約束的字段必須同時被key約束
foreikey:外鍵 設(shè)置外鍵的前提,必須是innodb存儲引擎,且被關(guān)聯(lián)的字段必須是唯一的 一張表只能有一個主鍵,所有的其它非空 唯一都不會成為主鍵還是維持他原來的約束
10. 修改表結(jié)構(gòu): 修改表名: alter table 表名 rename 新表名; 增加字段: alter table 表名 add 字段名 數(shù)據(jù)類型; 刪除字段: alter table 表名 drop 字段名; 修改字段: alter table 表名 modify 字段名 數(shù)據(jù)類型;modify 修改字段的類型和數(shù)據(jù)類型 alter table 表名 change 字段名 新的字段名 舊的數(shù)據(jù)類型 alter table 表名 change 字段名 新的字段名 新的數(shù)據(jù)類型 11. 查數(shù)據(jù) select 字段 from 表名 單表查詢: distinct關(guān)鍵字 去重 select distinct 字段名 from 表; select可以進行四則運算 select 字段*12 from 表; 可以給字段重新命名 select 字段 as 新字段名 from 表; 格式化函數(shù):concat concat_ws() concat('自己想拼的內(nèi)容','字段','其他內(nèi)容) #相當于python中的format concat_ws('_',字段1,字段2) #等同于python中的join 條件判斷: case when 條件1 then 字段的操作 when 條件2 then 字段的操作 else 字段的操作 end where 條件 對表中的數(shù)據(jù)進行一個數(shù)據(jù)篩選 對一個值進行判斷 = < > != >= <= 對一個范圍的判斷 between 小的值 and 大的值 in (值1,值2,值3) 模糊匹配: like 'a%' 'a_' %是通配符 匹配任意長度的任意內(nèi)容 'a_'匹配以a開頭的字符 _代表一個任意字符 多個條件的拼接 邏輯運算符 and 兩個條件必須都要成立 or 其中一個條件成立即可 not 非 group by分組 select 字段名 from 表 where 條件 group by 字段名 group by 聚合函數(shù) 聚合函數(shù)算出來的結(jié)果 只是代表分組的一組的結(jié)果 order by 排序 默認升序 后加上desc就是降序 linit(n,m)從n開始到到去m個值
select distinct 要篩選的字段 from 表 where 條件 group by 分組 having 過濾 order by 排序 limit 取從m開始的前n個 12. 多表查詢 連表查詢 表的笛卡爾積 內(nèi)連接(inner join) :只有兩張表中條件互相匹配的項才能被顯示出來 select 字段 from 表1 inner join 表2 on 表1的關(guān)聯(lián)鍵和表2的關(guān)聯(lián)鍵 外鏈接: 左外鏈接: select * from 表1 left join 表2 on 表1的字段 關(guān)聯(lián) 表2的字段 右外連接: select * from 表1 right join 表2 on 表1的字段 關(guān)聯(lián) 表2的字段 全外連接: select * from 表1 inner join 表2 on 表1的字段 關(guān)聯(lián) 表2的字段 13. 子查詢(效率比連表查詢低) 將條件分開逐步去分析
來源:http://www./content-2-135851.html
|