d3 tip mysql_mysql
字符:
char(10)->定長(zhǎng)、10個(gè)字符寬度。如果右側(cè)不夠,則空格補(bǔ)齊,取出來的時(shí)候刪除空格。
varchar(10)->變長(zhǎng)、最多10個(gè)字符
如:存姓名的時(shí)候,沒必要為了那幾個(gè)長(zhǎng)度去使用varchar,使用定長(zhǎng)去存儲(chǔ)會(huì)提高效率!
日期時(shí)間:
Year->1字節(jié)->95||1995->【1901-2155】
Date->日期->1998-12-31->【1000-01-01->9999-12-31】
Time->時(shí)間->13:56:23->->【-838:59:59->838:59:59】
datetime->時(shí)間戳->1970-01-01 00:00:00到當(dāng)前的秒數(shù)
Tip:Date? Date? datetime在insert的時(shí)候需要加上引號(hào) 、實(shí)際開發(fā)中,一般不是用這些,直接使用787657676類似于這個(gè)樣子的整形來存儲(chǔ)(其實(shí)就是以1970年0點(diǎn)為準(zhǔn),然后換算成秒數(shù)存儲(chǔ))。搞iOS開發(fā)的肯定遇到過
not null:
1、NULL查詢不便、索引效率不高、所以實(shí)用中避免列的值為NULL
2、聲明列的值為NOT NULL,并且default一個(gè)默認(rèn)值
主鍵與自增:
主鍵primary key此列不重復(fù),就能夠區(qū)分每一行!
一個(gè)表中只能有一個(gè)auto_increment,而且這一列必須加上primary key索引
修改列:
alter table tableName add 列名 類型 屬性... ->默認(rèn)在table的最后
alter table tableName add 列名 類型 屬性 after 制定列名->將增加到制定的列名后面
alter table tableName drop column 列名
alter table tableName change 列名 新名字 類型 屬性...
alter table tableName modify 列名 新屬性...
change可以修改列名,但是modify不能修改列明,只能修改列的屬性
視圖(View):
create view vgoods as select goods_name , goods_id from goods;
view又被稱為虛擬表,view是sql語句的一個(gè)查詢結(jié)果。
好處:
1、權(quán)限控制時(shí)可以用;如:某幾個(gè)列允許用戶查詢,其他列不可以。
create view tmpview as select goods_name from goods;
select * from tmpview;
2、簡(jiǎn)化復(fù)雜的查詢;
3、修改物理表,虛擬表一定會(huì)被修改;如果物理表完全 一 一對(duì)應(yīng)著虛擬表,則修改虛擬表會(huì)映射到物理表。但是,比如虛擬表是求平均之類的,不是一一對(duì)應(yīng)的,則不能修改虛擬表,因?yàn)闆]法確認(rèn)到物理表的具體的某一個(gè)位置。
查詢view有兩種可能:
1、將創(chuàng)建view的語句和查詢view的語句合并,然后直接查物理表。這種方式叫做merge
2、如果view的形成就比較復(fù)雜了,那首先查詢物理表,在內(nèi)存中形成一個(gè)view,然后再查詢這個(gè)view。
使用merge方式:create algorithm-merge view view1 as select ... from goods;
使用temptable:create algorithm-temptable view view2 as select ... from goods;
自己搞不定就讓數(shù)據(jù)庫自動(dòng)決定!
表\視圖管理語句:
查看所有表:show tables;
查看結(jié)構(gòu):desc table/view-name;
查看建表/視圖過程:show create ?table/view ?table/view-name;
刪除表/視圖:drop table table/view-name;
查看表的詳細(xì)信息:show table status;加上\G會(huì)豎著顯示
改表名:rename table old-name to new-name;
清空表數(shù)據(jù):truncate;
delete和truncate的區(qū)別:
delete ?from table-name where id = 2;(id是auto_increment的),下次再插入一個(gè)數(shù)據(jù)的時(shí)候,id會(huì)直接從3開始,而不會(huì)從2開始,即使id=2的已經(jīng)被刪掉。
truncate table-name;相當(dāng)于執(zhí)行了兩步,首先drop掉這個(gè)table。然后又重新建立一次!
所以...自己體會(huì)
存儲(chǔ)引擎:
Myisam:單純的存取而已,沒有什么檢查之類的!
InnoDB:存取都有檢查,有自己的日志!
以上兩者參考燕十八的比喻!
eg:create....( ... ) engine-InnoDB default charset-utf8;
字符集亂碼問題:
文本本來的字符集與展示的字符集不一致就導(dǎo)致了亂碼!
我要存的類型是gbk/utf8:set character_set_client = gbk/utf8;
我要取數(shù)據(jù),請(qǐng)返回給我gbk/utf8類型的數(shù)據(jù):set character_set_result = gbk/utf8;
連接器不要設(shè)置比較小的字符集,不然會(huì)損失掉數(shù)據(jù),而且是不可逆的!
如果client、result、connect都設(shè)置為同一樣字符集,比如utf8,那就可以直接簡(jiǎn)寫為set names utf8;
亂碼的話檢查四個(gè)地方:php文件類型、php mate類型(meta charset='utf-8')、創(chuàng)建的table的類型、有沒有執(zhí)行set names utf8;
校對(duì)集就是一種排序規(guī)則。
索引:
作用:
1、索引就相當(dāng)于數(shù)據(jù)的目錄,能快速定位數(shù)據(jù)的位置。
2、索引是有代價(jià)的,它提高了查詢的速度,但是損耗了增刪改的效率。
3、一般在查詢比較頻繁的列上加索引,而且重復(fù)率低的的列上效果更好。比如:性別,只有男、女(shit,其他的不考慮),所有就沒必要加上索引。
類型:
普通索引key、唯一索引unique key、主鍵索引primary key、全文索引(在中文環(huán)境下無效,一般用第三方的解決方案)
索引在所有的列設(shè)置完了之后設(shè)置!
設(shè)置索引
設(shè)置索引長(zhǎng)度
多列索引
冗余索引:
就是在某個(gè)列上存在多個(gè)索引。
索引操作:
show index from table-name \G;
alter table table-name drop index index-name;/drop index index-name on table-name; ?(刪除索引)
alter table table-name add index unique index-name(line-name);(增加索引)
alter table table-name add primary key (line-name);(增加主鍵索引,不需要索引名)
alter table table-name drop primary key;(刪除主鍵索引)
事務(wù):(myisam不支持事務(wù))
特性:隔離性、原子性、一致性、持久性(一旦commit之后,就沒法rollback)。
start transaction;啟用事務(wù)
commit;確認(rèn)
rollback;回滾
我算是知道什么是事務(wù)什么事回滾了!!
總結(jié)
以上是生活随笔為你收集整理的d3 tip mysql_mysql的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html自定义标记,HTML模板(自定义
- 下一篇: SQL Server将数据库中的表复制到