《mysql必知必会》学习完毕

本文介绍了SQL的基础知识,包括如何连接数据库,使用INSERT,UPDATE,DELETE操作数据,以及排序、筛选和聚合函数的运用。还讨论了索引的创建和作用,视图的概念以及事务处理的重要性,如回滚和提交。

连接

主机名+端口名+用户名+密码

基础

  • 数据排序默认为升序,若要指定降序,使用DESC关键字

  • where 子句中

    • 如果将值与串类型的列进行比较,则需要限定单引号。用来与数值列进行比较的值不用引号
    • 空值检查 is null
    • in 操作符一般比or操作符 更快
  • BETWEEN 5 AND 10,包括5和10

  • distinct关键字 应用于所有的列,而不是前置修饰的单列

  • limit关键字

    • limit a 前a行,从0开始
    • limit a,b 从行a开始的b行,例如:limit 1,1 指第二行;limit 2,20 指从第二行开始的20行
    • limit b offset a 等同于 limit a,b
  • like 通配符

    • % 任何字符出现的任意次数,例如’user%'表示任意以user开头的字符串
    • _ 单个字符,例如‘s_e’表示,以s开头,以e结尾,并且中间只有一个字符的字符串
  • REGEXP 正则表达式

    • ‘.0‘ 匹配以0结尾的字符串
    • ‘100|200’ 匹配100或者200
    • ‘[123]99’ 匹配199,或者299,或者399
    • ‘[^123]99’ 匹配除1,2,3,之外含99的字符串
    • [1-5] 匹配数字1-5,[a-z] 匹配任意字母字符
    • \ 转义字符
  • UNION

    • UNION 从查询结果集中自动去除了重复的行,想返回所有匹配行,可使用UNION ALL而不是UNION,前者效率更高
    • UNION中的每个查询必须包含相同的列、表达式或聚集函数(不过列的顺序可以不一样)
    • 在用UNION组合查询时,只能使用一条ORDER BY子句,它必须出现在最后一条SELECT语句之后。虽然ORDER BY子句似乎只是最后一条SELECT语句的组成部分,但实际上MySQL将用它来排序所有SELECT语句返回的所有结果。

函数

  • concat() 拼接 :把多个串拼接成一个串
  • RTrim():去掉值右边的所有空格
  • LTrim():去掉串左边的空格
  • Trim():去掉串左右两边的空格

在这里插入图片描述

  • 日期格式为yyyy-mm-dd
  • 例如将sql.date转化为util.date 使用new java.util.date(XXX.getTime())
  • 使用COUNT(*)对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值。
  • 使用COUNT(column)对特定列中具有值的行进行计数,忽略NULL值
  • 除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY子句中给出。
  • 在这里插入图片描述

数据类型

  • 字符或者字符串
  • char 定长
  • varchar(n) 不定长
  • 不管使用何种形式的串数据类型,串值都必须括在引号内(通常单引号更好)。
  • 数值
  • 与串不一样,数值不应该括在引号内。
  • 在这里插入图片描述
  • 时间类型
    在这里插入图片描述

insert

  • 语法:全表插入,依赖列值的顺序 insert into table_name values(),一般不使用
  • 指定列插入: insert into table_name(col1,col2,col3) value(‘s1’,‘s2’,null),较常使用,允许为空或者有默认值的列可以不给值,不写出来
  • 如果对表中不允许NULL值且没有默认值的列不给出值,则插入不成功。
  • 可一次插入多行
  • INSERT SELECT
    • insert into table1 t1(col1,col2,col3)select t2.col1,t2.col2 from table2 t2,0 as col3

update

  • update table_name set col1=‘0’ where col1=‘1’

delete

  • delete form table_name where col1=‘0’ limit 5
  • 如果想从表中删除所有行,不要使用DELETE。可使用TRUNCATE TABLE语句,它完成相同的工作,但速度更快(TRUNCATE实际是删除原来的表并重新创建一个表,而不是逐行删除表中的数据)
  • 在对UPDATE或DELETE语句使用WHERE子句前,应该先用SELECT进行测试,保证它过滤的是正确的记录,以防编写的WHERE子句不正确。

索引

  • 优化查询的性能
  • create index 索引 on table_name(col1,col2)
  • 使用EXPLAIN语句让MySQL解释它将如何执行一条SELECT语句。
  • 如果一个简单的WHERE子句返回结果所花的时间太长,则可以断定其中使用的列(或几个列)就是需要索引的对象。
  • 你的SELECT语句中有一系列复杂的OR条件吗?通过使用多条SELECT语句和连接它们的UNION语句,你能看到极大的性能改进
  • union all比union 效率高
  • 索引改善数据检索的性能,但损害数据插入、删除和更新的性能。如果你有一些表,它们收集数据且不经常被搜索,则在有必要之前不要索引它们。(索引可根据需要添加和删除。)

视图

  • 创建视图 create view 视图1 as select查询语句
  • 查看视图对应的sql语句 show create view view1
  • 删除视图 drop view1
  • 视图不存储数据,存储的是查询的结果集,一般用于较复杂或者较常用的查询
  • 视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。
  • 视图提供了一种MySQL的SELECT语句层次的封装,可用来简化数据处理以及重新格式化基础数据或保护基础数据。

事务

  • 事务(transaction)指一组SQL语句,可以用来维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么完全不执行。
    • 回退(rollback)指撤销指定SQL语句的过程;
    • 提交(commit)指将未存储的SQL语句结果写入数据库表;
    • 保留点(savepoint)指事务处理中设置的临时占位符(placeholder),你可以对它发布回退(与回退整个事务处理不同)例如:savepoint p1, rollback to p1
  • 一般的MySQL语句都是直接针对数据库表执行和编写的。这就是所谓的隐含提交(implicit commit),即提交(写或保存)操作是自动进行的。
    但是,在事务处理块中,提交不会隐含地进行。为进行明确的提交,使用COMMIT语句
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值