1. 程式人生 > >mysql初學筆記1(來自runoob.com)

mysql初學筆記1(來自runoob.com)

mysql

group by 分組使用 WITH ROLLUP

WITH ROLLUP 可以實現在分組統計數據基礎上再進行相同的統計(SUM,AVG,COUNT…)。


例如我們將以上的數據表按名字進行分組,再統計每個人登錄的次數:

mysql> SELECT name, SUM(singin) as singin_count FROM  employee_tbl  name;
+--------+--------------+
| name   | singin_count |
+--------+--------------+
| 小麗 |            2 |
| 小明 |            7 |
| 小王 |            7 |

+--------+--------------+
4 rows in set (0.00 sec)

其中記錄 NULL 表示所有人的登錄次數。


我們可以使用 coalesce 來設置一個可以取代 NUll 的名稱,coalesce 語法:

select coalesce(a,b,c);

參數說明:如果a==null,則選擇b;如果b==null,則選擇c;如果a!=null,則選擇a;如果a b c 都為null ,則返回為null(沒意義)。

以下實例中如果名字為空我們使用總數代替:

mysql> SELECT , SUM(singin) as singin_count FROM  employee_tbl  name ;
+--------------------------+--------------+
| coalesce(name, ‘總數‘) | singin_count |
+--------------------------+--------------+
| 小麗                   |            2 |
| 小明                   |            7 |
| 小王                   |            7 |

+--------------------------+--------------+
4 rows in set (0.01 sec)


MySQL 正則表達式

MySQL可以通過 LIKE ...% 來進行模糊匹配。

MySQL 同樣也支持其他正則表達式的匹配, MySQL中使用 REGEXP 操作符來進行正則表達式匹配。

查找name字段中包含‘mar‘字符串的所有數據:

mysql> SELECT name FROM person_tbl WHERE name  ‘mar‘;

查找name字段中以元音字符開頭或以‘ok‘字符串結尾的所有數據:

mysql> SELECT name FROM person_tbl WHERE name  ‘^[aeiou]|ok$‘;



MySQL 事務

事務處理可以用來維護數據庫的完整性,保證成批的 SQL 語句要麽全部執行,要麽全部不執行

事務用來管理 insert,update,delete 語句。

一般來說,事務是必須滿足4個條件(ACID): Atomicity(原子性)、Consistency(穩定性)、Isolation(隔離性)、Durability(可靠性)


    • 1、事務的原子性:一組事務,要麽成功;要麽撤回。

    • 2、穩定性 :有非法數據(外鍵約束之類),事務撤回。

    • 3、隔離性:事務獨立運行。一個事務處理後的結果,影響了其他事務,那麽其他事務會撤回。事務的100%隔離,需要犧牲速度。

    • 4、可靠性:軟、硬件崩潰後,InnoDB數據表驅動會利用日誌文件重構修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit 選項 決定什麽時候吧事務保存到日誌裏。


MySQL ALTER命令--刪除,添加或修改表字段

如下命令使用了 ALTER 命令及 DROP 子句來刪除以上創建表的 i 字段:

mysql> ALTER TABLE testalter_tbl  DROP i;

如果數據表中只剩余一個字段則無法使用DROP來刪除字段。

MySQL 中使用 ADD 子句來向數據表中添加列,如下實例在表 testalter_tbl 中添加 i 字段,並定義數據類型:

mysql> ALTER TABLE testalter_tbl ADD i INT;

執行以上命令後,i 字段會自動添加到數據表字段的末尾。

如果你需要指定新增字段的位置,可以使用MySQL提供的關鍵字 FIRST (設定位第一列), AFTER 字段名(設定位於某個字段之後)。

ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT ;
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT ;

把字段 c 的類型從 CHAR(1) 改為 CHAR(10),可以執行以下命令:

mysql> ALTER TABLE testalter_tbl MODIFY c CHAR(10);

修改字段的相對位置:這裏name1為想要修改的字段,type1為該字段原來類型,first和after二選一,這應該顯而易見,first放在第一位,after放在name2字段後面

alter table tableName modify name1 type1 first|after name2;


MySQL 處理重復數據

防止表中出現重復數據

可以在MySQL數據表中設置指定的字段為 PRIMARY KEY(主鍵) 或者 UNIQUE(唯一) 索引來保證數據的唯一性。

如果我們設置了唯一索引,那麽在插入重復數據時,SQL語句將無法執行成功,並拋出錯。

INSERT IGNORE INTO與INSERT INTO的區別就是INSERT IGNORE會忽略數據庫中已經存在的數據,如果數據庫沒有數據,就插入新的數據,如果有數據的話就跳過這條數據。這樣就可以保留數據庫中已經存在數據,達到在間隙中插入數據的目的。





mysql初學筆記1(來自runoob.com)