设为首页 收藏本站
查看: 3594|回复: 0

[经验分享] mysql初学笔记1(来自runoob.com)

[复制链接]

尚未签到

发表于 2018-10-7 10:01:06 | 显示全部楼层 |阅读模式
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>

  如下命令使用了>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会忽略数据库中已经存在的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-614212-1-1.html 上篇帖子: LAMP架构介绍、MySQL,MariaDB介绍、MySQL安装 下篇帖子: mysql优化和索引
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表