mysql初學筆記1(來自runoob.com)
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)