WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)。
使用 GROUP BY 语句 将数据表按名字进行分组,并统计每个人有多少条记录
mysql> SELECT name, COUNT(*) FROM employee_tbl GROUP BY name;
+--------+----------+
| name | COUNT(*) |
+--------+----------+
| 小丽 | 1 |
| 小明 | 3 |
| 小王 | 2 |
+--------+----------+
3 rows in set (0.01 sec)
我们将以上的数据表按名字进行分组,再统计每个人登录的次数:
mysql> SELECT name, SUM(singin) as singin_count FROM employee_tbl
GROUP BY name WITH ROLLUP;
+--------+--------------+
| name | singin_count |
+--------+--------------+
| 小丽 | 2 |
| 小明 | 7 |
| 小王 | 7 |
| NULL | 16 |
+--------+--------------+
4 rows in set (0.00 sec)
select coalesce(a,b,c);
参数说明:
如果a==null,则选择b;如果b==null,则选择c;如果a!=null,则选择a;
如果a b c 都为null ,则返回为null(没意义)。
-----------------------------------------------
select IFNULL(expression, alt_value);
参数说明:
expression,必须,要测试的值
alt_value, 必须,expression 表达式为 NULL 时返回的值
我们观察到统计登录次数时,输出了Null,这是没意义的,下面解决这个问题。
mysql> SELECT coalesce(name, '总数'), SUM(singin) as singin_count FROM employee_tbl GROUP BY name WITH ROLLUP;
+--------------------------+--------------+
| coalesce(name, '总数') | singin_count |
+--------------------------+--------------+
| 小丽 | 2 |
| 小明 | 7 |
| 小王 | 7 |
| 总数 | 16 |
+--------------------------+--------------+
4 rows in set (0.01 sec)
(内连接,或等值连接)获取两个表中字段匹配关系的记录。)
SELECT a.`runoob_id`,a.`runoob_author`,b.`runoob_count` FROM runoob_tbl a
INNER JOIN tcount_tbl b ON a.`runoob_author`=b.`runoob_author`
以左表为参照,找出两个表的交集,再计算交集的笛卡尔积即可
left join 与 join 有所不同。LEFT JOIN 会读取左边数据表的全部数据,即便右边表无对应数据。
SELECT a.`runoob_id`,a.`runoob_author`,b.`runoob_count` FROM runoob_tbl a
LEFT JOIN tcount_tbl b ON a.`runoob_author`=b.`runoob_author`
用左边表所有的数据来和右边表的数据匹配,如果,右边表找不到对应的则显示为NULL。
RIGHT JOIN 会读取右边数据表的全部数据,即便左边边表无对应数据。
SELECT a.`runoob_id`,a.`runoob_author`,b.`runoob_count` FROM runoob_tbl a
RIGHT JOIN tcount_tbl b ON a.`runoob_author`=b.`runoob_author`
用右边表所有的数据来和左边表的数据匹配,如果,左边表找不到对应的则显示为NULL。
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
原子性
一致性
隔离性
持久性
在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。因此要显式地开启一个事务务须使用命令 BEGIN 或 START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。
提供参考博客:MySQL中的事务
CREATE TABLE tcount_tbl_back SELECT * FROM tcount_tbl_test;
//方式一
ALTER TABLE tcount_tbl_back RENAME TO tb;
//方式二
RENAME TABLE tb TO runoob_tbl_back;
ALTER TABLE runoob_tbl_back CHARSET utf8;
ALTER TABLE runoob_tbl_back ADD login_name VARCHAR(50) DEFAULT '游客';
ALTER TABLE runoob_tbl_back MODIFY runoob_count FLOAT NOT NULL;
优秀文档:MySQL文档