MySQL的CRUD操作+使用视图
生活随笔
收集整理的這篇文章主要介紹了
MySQL的CRUD操作+使用视图
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【0】README
0.1)本文部分文字描述轉自“MySQL 必知必會”,旨在review“MySQL數據檢索+查詢+全文本搜索”?的基礎知識;
【1】插入數據 1)insert是用來插入(或添加)行到數據庫表的。插入可以用以下幾種方式使用(methods): m1)插入完整的行; m2)插入行的一部分; m3)插入多行; m4)插入某些查詢的結果; 2)插入完整的行 2.1)對于屬于 auto_increment 的列,我們用插入null 來替代; 2.2)編寫插入行的安全方法:要指定插入列名,后面更values 的各個value,而不僅僅是插入values; 如 insert into product(id,vendor,price) values(null,1,1.1); 2.3)省略列: 如果表的定義允許,則可以在 insert 操作中省略某些列。省略列必須滿足以下某個條件(conditions) c1)該列定義為允許null值; c2)在表定義中給出 default值,這表示如果不給出值,則使用該默認值; 2.4)提高整體性能:數據庫經常被多個客戶訪問,對處理什么請求以及用什么次序處理進行管理是MySQL的任務。如果數據檢索是重要的,則你可以通過在 insert 和 into 之間添加關鍵字 low_priority,指示MySQL 降低 insert語句的優先級;(如 insert low_priority into); 3)插入多行
Attention)提高insert性能:MySQL 用單條insert 語句處理多個插入比使用多條insert 語句要快,所以推薦使用如上圖所示的insert 方式 ;
4)插入檢索出的數據 4.1)intro:將select出的數據作為insert 插入的原始數據;
【2】更新和刪除數據 1)更新數據 1.0)update語句由3部分組成:要更新的表, 列名和他們的新值, 確定要更新行的過濾條件; 1.1)更新單個列和更新多個列
1.2)ignore關鍵字:如果用update語句更新多個行,并且在更新這些行中的一行或多行時出現一個錯誤,則這個update操作被取消。即使是發生錯誤,也繼續進行更新,可使用 ignore 關鍵字(update ignore product) 1.3)為了刪除某個列的值,可以設置它為null(假設表允許null值);(圖片t85)
2)刪除數據 Attention)刪除行使用delete,刪除列使用 update(置null);
3)更新和刪除的指導原則(rules),下面是許多SQL程序員使用update 和 delete 時所遵循的習慣; r1)除非確實打算更新和刪除每一行,否則絕對不要使用不帶 where 子句的update 和 delete語句; r2)保證每個表都有主鍵; r3)在對update 和 delete 語句使用 where子句前,應該先用 select 進行測試,保證它過濾的是正確記錄,以防編寫的where子句不正確; r4)使用強制實施引用完整性的數據庫,這樣MySQL將不允許刪除具有與其他表相關聯的數據的行;
【3】創建和操縱表 1)創建表 1.1)如果你想在一個表不存在時創建它,應該在表明前給出 if not exists語句;
1.2)使用NULL值
Attention)理解NULL: 不要把null值 與 空串相混淆,NULL 值是沒有值,它不是空串。如果指定'’(兩個單引號,其間沒有字符),這在not null 列中是允許的;空串是一個有效值,它不是無值; 1.3)主鍵再介紹:單個主鍵 和 復合主鍵;
1.4)使用auto_increment:自動遞增; Attention) A1)確定auto_increment的值:讓MySQL 生成主鍵的一個缺點是你不知道這些值都是誰; A2)如何在使用 auto_increment 列時獲得這個值呢? select last_insert_id() 來獲得;
1.5)指定默認值:如果在插入行時沒有給出值,MySQL允許指定此時使用的默認值。默認值用 create table 的列定義中的 default 關鍵字指定;
1.6)引擎類型:
1.6.1)intro to engine:MySQL 有一個具體管理和處理數據的 內部引擎。在你使用 create table 語句時,該引擎具體創建表,而在你使用select 語句或進行其他db 處理時,該引擎在內部處理你的請求; 1.6.2)如果省略engine 語句, 則默認的引擎是MyISAM;(干貨——這里強烈建議添加engine關鍵字指定數據庫表的引擎) 1.6.3)需要知道以下幾個MySQL 的engines: engine1)InnoDB:是一個可靠的事務處理引擎,它不支持全文本搜索; engine2)MEMORY:?在功能上等同于 MyISAM,但由于數據存儲在內存中,速度很快; engine3)MyISAM:MyISAM是一個性能很高的引擎,它支持全文本搜索,但不支持事務處理; Attention)外鍵不能跨引擎,即使用一個引擎的表不能引用具有使用不同引擎的表的外鍵;
【4】使用視圖 1)intro to view:視圖是虛擬的表。與包含數據的表不一樣,視圖只包含使用時動態減少數據的查詢;
1.1)假如吧整個查詢包裝為一個名為 product_vendor的虛擬表,則可以如下輕松地檢索出相同的數據;
1.2)這就是視圖的作用:product_vendor 是一個視圖,作為視圖,它不包含表中應該有的任何列或數據,它包含的是一個SQL查詢;(干貨——視圖包含的是一個SQL查詢) 2)為什么使用視圖?(reasons) r1)重用SQL 語句; r2)簡化復雜的SQL操作; r3)使用表的組成部分而不是整個表; r4)保護數據; r5)在創建視圖后,可以用與表基本相同的方式利用它們。可以對視圖執行select操作,過濾和排序操作,將視圖聯結到其他視圖或表,甚至能添加和更新數據; Attention)視圖僅僅是用來查看存儲在別處的數據的一種設施,視圖本身不包含任何數據,因此它們返回的數據是從其他表中檢索出來的。在添加或更改這些表中的數據時,視圖將返回改變過后的數據; 3)視圖使用的一些限制(restriction) r1)對于可創建的視圖數目沒有限制; r2)為了創建視圖,必須要有足夠的訪問權限; r3)視圖可以嵌套,即可以利用從其他視圖中檢索數據的查詢來構造一個視圖; r4)order by 可以用在視圖中,但如果從該視圖檢索數據的 select語句中也含有 order by,那么該視圖中的 order by 將被覆蓋; r5)視圖不能索引,也不能有關聯的觸發器或默認值; r6)視圖可以和表一起使用; 4)使用視圖 4.1)視圖用 create view 語句來創建; 4.2)使用show create view viewname來查看創建視圖的語句; 4.3)使用drop 刪除視圖,其語法為 drop view viewname; 4.4)更新視圖時,可以先用 drop 再用 create,也可以直接用 create or replace view。如果要更新的視圖不存在,則第2條更新語句會創建一個視圖;如果要更新的視圖存在,則第2條語句會替換原有視圖;
【4.1】利用視圖簡化復雜的聯結 【4.2】用視圖重新格式化檢索出的數據
Attention)就像使用數據庫表一樣使用視圖,包括 過濾數據 和使用視圖與計算字段;
【4.3】更新視圖 1)更新一個視圖將更新其基表:如果你對視圖增加或刪除行,則實際上是對其基表增加或刪除行; 2)但是,并非所有視圖都是可更新的。基本上可以說,如果MySQL 不能正確地確定被更新的基數據,則不允許更新(包括插入和更新);這也是說,如果視圖中有定義以下操作,則不能進行更新(operations): o1)分組(使用 group by 和 having); o2)聯結; o3)子查詢; o4)并; o5)聚集函數(min()函數, count()函數,sum() 函數等); o6)distinct; o7)導出(計算)列; Attention)視圖主要是用于數據檢索,而不是去更新數據;
【1】插入數據 1)insert是用來插入(或添加)行到數據庫表的。插入可以用以下幾種方式使用(methods): m1)插入完整的行; m2)插入行的一部分; m3)插入多行; m4)插入某些查詢的結果; 2)插入完整的行 2.1)對于屬于 auto_increment 的列,我們用插入null 來替代; 2.2)編寫插入行的安全方法:要指定插入列名,后面更values 的各個value,而不僅僅是插入values; 如 insert into product(id,vendor,price) values(null,1,1.1); 2.3)省略列: 如果表的定義允許,則可以在 insert 操作中省略某些列。省略列必須滿足以下某個條件(conditions) c1)該列定義為允許null值; c2)在表定義中給出 default值,這表示如果不給出值,則使用該默認值; 2.4)提高整體性能:數據庫經常被多個客戶訪問,對處理什么請求以及用什么次序處理進行管理是MySQL的任務。如果數據檢索是重要的,則你可以通過在 insert 和 into 之間添加關鍵字 low_priority,指示MySQL 降低 insert語句的優先級;(如 insert low_priority into); 3)插入多行
Attention)提高insert性能:MySQL 用單條insert 語句處理多個插入比使用多條insert 語句要快,所以推薦使用如上圖所示的insert 方式 ;
4)插入檢索出的數據 4.1)intro:將select出的數據作為insert 插入的原始數據;
【2】更新和刪除數據 1)更新數據 1.0)update語句由3部分組成:要更新的表, 列名和他們的新值, 確定要更新行的過濾條件; 1.1)更新單個列和更新多個列
1.2)ignore關鍵字:如果用update語句更新多個行,并且在更新這些行中的一行或多行時出現一個錯誤,則這個update操作被取消。即使是發生錯誤,也繼續進行更新,可使用 ignore 關鍵字(update ignore product) 1.3)為了刪除某個列的值,可以設置它為null(假設表允許null值);(圖片t85)
2)刪除數據 Attention)刪除行使用delete,刪除列使用 update(置null);
3)更新和刪除的指導原則(rules),下面是許多SQL程序員使用update 和 delete 時所遵循的習慣; r1)除非確實打算更新和刪除每一行,否則絕對不要使用不帶 where 子句的update 和 delete語句; r2)保證每個表都有主鍵; r3)在對update 和 delete 語句使用 where子句前,應該先用 select 進行測試,保證它過濾的是正確記錄,以防編寫的where子句不正確; r4)使用強制實施引用完整性的數據庫,這樣MySQL將不允許刪除具有與其他表相關聯的數據的行;
【3】創建和操縱表 1)創建表 1.1)如果你想在一個表不存在時創建它,應該在表明前給出 if not exists語句;
1.2)使用NULL值
Attention)理解NULL: 不要把null值 與 空串相混淆,NULL 值是沒有值,它不是空串。如果指定'’(兩個單引號,其間沒有字符),這在not null 列中是允許的;空串是一個有效值,它不是無值; 1.3)主鍵再介紹:單個主鍵 和 復合主鍵;
1.4)使用auto_increment:自動遞增; Attention) A1)確定auto_increment的值:讓MySQL 生成主鍵的一個缺點是你不知道這些值都是誰; A2)如何在使用 auto_increment 列時獲得這個值呢? select last_insert_id() 來獲得;
1.5)指定默認值:如果在插入行時沒有給出值,MySQL允許指定此時使用的默認值。默認值用 create table 的列定義中的 default 關鍵字指定;
1.6)引擎類型:
1.6.1)intro to engine:MySQL 有一個具體管理和處理數據的 內部引擎。在你使用 create table 語句時,該引擎具體創建表,而在你使用select 語句或進行其他db 處理時,該引擎在內部處理你的請求; 1.6.2)如果省略engine 語句, 則默認的引擎是MyISAM;(干貨——這里強烈建議添加engine關鍵字指定數據庫表的引擎) 1.6.3)需要知道以下幾個MySQL 的engines: engine1)InnoDB:是一個可靠的事務處理引擎,它不支持全文本搜索; engine2)MEMORY:?在功能上等同于 MyISAM,但由于數據存儲在內存中,速度很快; engine3)MyISAM:MyISAM是一個性能很高的引擎,它支持全文本搜索,但不支持事務處理; Attention)外鍵不能跨引擎,即使用一個引擎的表不能引用具有使用不同引擎的表的外鍵;
2)下面內容討論的是更新表,刪除表和重命名表的內容
以下內容轉自:?http://blog.163.com/zhangjie_0303/blog/static/99082706201191911653778/
ALTER TABLE:添加,修改,刪除表的列,約束等表的定義。
查看列:desc 表名; 修改表名:alter table t_book rename to bbb; 添加列:alter table 表名 add column 列名 varchar(30); 刪除列:alter table 表名 drop column 列名; 修改列名MySQL: alter table bbb change nnnnn hh int; 修改列名SQLServer:exec sp_rename't_student.name','nn','column'; 修改列名Oracle:lter table bbb rename column nnnnn to hh int; 修改列屬性:alter table t_book modify name varchar(22);for spec relative info, please visit ?MySQL 添加列+修改列+刪除列
【4】使用視圖 1)intro to view:視圖是虛擬的表。與包含數據的表不一樣,視圖只包含使用時動態減少數據的查詢;
1.1)假如吧整個查詢包裝為一個名為 product_vendor的虛擬表,則可以如下輕松地檢索出相同的數據;
1.2)這就是視圖的作用:product_vendor 是一個視圖,作為視圖,它不包含表中應該有的任何列或數據,它包含的是一個SQL查詢;(干貨——視圖包含的是一個SQL查詢) 2)為什么使用視圖?(reasons) r1)重用SQL 語句; r2)簡化復雜的SQL操作; r3)使用表的組成部分而不是整個表; r4)保護數據; r5)在創建視圖后,可以用與表基本相同的方式利用它們。可以對視圖執行select操作,過濾和排序操作,將視圖聯結到其他視圖或表,甚至能添加和更新數據; Attention)視圖僅僅是用來查看存儲在別處的數據的一種設施,視圖本身不包含任何數據,因此它們返回的數據是從其他表中檢索出來的。在添加或更改這些表中的數據時,視圖將返回改變過后的數據; 3)視圖使用的一些限制(restriction) r1)對于可創建的視圖數目沒有限制; r2)為了創建視圖,必須要有足夠的訪問權限; r3)視圖可以嵌套,即可以利用從其他視圖中檢索數據的查詢來構造一個視圖; r4)order by 可以用在視圖中,但如果從該視圖檢索數據的 select語句中也含有 order by,那么該視圖中的 order by 將被覆蓋; r5)視圖不能索引,也不能有關聯的觸發器或默認值; r6)視圖可以和表一起使用; 4)使用視圖 4.1)視圖用 create view 語句來創建; 4.2)使用show create view viewname來查看創建視圖的語句; 4.3)使用drop 刪除視圖,其語法為 drop view viewname; 4.4)更新視圖時,可以先用 drop 再用 create,也可以直接用 create or replace view。如果要更新的視圖不存在,則第2條更新語句會創建一個視圖;如果要更新的視圖存在,則第2條語句會替換原有視圖;
【4.1】利用視圖簡化復雜的聯結 【4.2】用視圖重新格式化檢索出的數據
Attention)就像使用數據庫表一樣使用視圖,包括 過濾數據 和使用視圖與計算字段;
【4.3】更新視圖 1)更新一個視圖將更新其基表:如果你對視圖增加或刪除行,則實際上是對其基表增加或刪除行; 2)但是,并非所有視圖都是可更新的。基本上可以說,如果MySQL 不能正確地確定被更新的基數據,則不允許更新(包括插入和更新);這也是說,如果視圖中有定義以下操作,則不能進行更新(operations): o1)分組(使用 group by 和 having); o2)聯結; o3)子查詢; o4)并; o5)聚集函數(min()函數, count()函數,sum() 函數等); o6)distinct; o7)導出(計算)列; Attention)視圖主要是用于數據檢索,而不是去更新數據;
總結
以上是生活随笔為你收集整理的MySQL的CRUD操作+使用视图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 路由器不能上网的原因和解决方法
- 下一篇: MySQL事务管理+安全管理+MySQL