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