MySQL01--基础

1.MySQL默认不区分大小写

如:select a.name from (select "asdf" as name) as a where a.name like 'aS%';
输出:asdf

2.MySQL中 + 的作用:

  • 若两个操作数都是数值型:如select 100+1.5; 输出:101.5
  • 若其中一个是字符型,另一个为数值型,会强制把字符型转为数值型,转换失败则当0处理:如select ‘张三’+100; 输出:100
  • 若其中一个为null:如select null+100; 输出null
    注: 若字符型拼接,要用concat,如:select concat(‘张三’,‘李四’); 输出:张三李四

3.distinct:去重

4.联合查询

  • union:自动去重
  • unionall:不去重

5.库的操作

  • 创建数据库:create database if not exists userDB;
  • 删除数据库:drop database if exists userDB;

6.表的操作

  • 创建表
    create table 表名(
    字段名 字段类型(长度) 字段约束,
    字段名 字段类型(长度) 字段约束
    );

  • 修改表
    alter table 表名 add|modify|drop 字段名 字段类型 【字段约束】comment ‘列的信息’;

  • 修改表名
    alter table 表名 change 旧表名 新表名 字段类型 字段约束

  • 删除表
    drop table if exists 表名

  • 复制表
    create table 新表 like 旧表; 复制表的结构
    create table 新表 select * from 旧表; 复制表的结构和数据

7.数据的操作

  • 插入数据
    insert into 表名(字段1,…) values (值1,…);

  • 删除数据

    • delete from 表名 [where]
    • truncate table 表名
    • delete和truncate区别:
      1.delete可以加where条件,truncate不能加where条件。
      2.删除全部数据时,truncate效率高。
      3.若删除带自增长列的表:delete删除后再插入数据,记录从断点处开始;truncate删除后再插入数据,记录从1开始。
      4.delete删除数据会返回受影响的行数,truncate删除后不会返回受影响的行数。
      5.delete支持事务回滚,truncate不支持事务回滚。

8.常用函数

字符函数

  • ifnull:如select ifnull(null,0); 输出0
  • length 获取字节长度 :如select length (1000); 输出4; 若数据库字符集设成utf8,select length (‘ab张三’); 输出:8
  • char_length 获取字符长度 :如select char_length(‘ab张三’); 输出:4
  • substr(str,起始索引,截取字符的长度) :如select substr(‘张三李四王五’,1,3); 输出:张三李
  • trim 去除前后指定字符,默认去除空格:如select trim(‘x’ from ‘xxxxx张三xxxxx’); 输出:张三
  • lpad/rpad 左填充/右填充:如select lpad(‘张三’,‘5’,‘x’); 输出:xxx张三; 若select lpad(‘张三’,‘1’,‘x’); 输出:张
  • upper/lower 变大/小写
  • left/right 截取字符串:如select left(‘abcd’,2); 输出:ab

数字函数

  • abs 绝对值:如select abs(-2.4); 输出:2.4
  • ceil 向上取整:如select ceil(1.01); 输出:2
  • floor 向下取整:如select floor(0.9); 输出:0
  • round 四舍五入:如select round(1.783); 输出:2;select round(1.783,2); 输出:1.78
  • truncate 截断:如select truncate(1.836,1); 输出:1.8 相当于把后面都舍去
  • mod 取余:如select mod(10,3); 输出:3

日期函数

  • now 获取当前日期和时间:如select now(); 输出:2020-11-01 12:12:12
  • curdate 获取当前日期:如select crudate(); 输出:2020-11-01
  • curtime 获取当前时间:如select crutime(); 输出:12:12:12
  • datediff 获取时间差:如select datediff(‘2020-11-01’,‘1998-10-15’); 输出:8053
  • date_format 格式化日期:如select date_format(‘2020-11-01 12:12:12’,‘%Y年%m月%d日 %H时%i分%s秒’); 输出:2020年11月01日 12时12分12秒
  • str_to_date 字符串转换成日期:如select str_to_date(‘11/01 2020’,‘%m/%d %Y’); 输出:2020-11-01
  • DATE_SUB获取前/后N年/月/天/时:如:假设当前时间是2020-11-18 12:41:39 select DATE_SUB(NOW(),INTERVAL -30 day); 输出:2020-12-18 12:41:39
    语法:DATE_SUB(date,INTERVAL expr type)在这里插入图片描述

流程控制函数

  • if :如select if(3>2,‘是’,‘否’); 输出:是
  • case when 条件 then 结果 else 结果2 end :如select id, case when id>3 then ‘A’ when id>2 then ‘B’ when id>1 then ‘C’ else ‘D’ end ff from tuser;

聚合函数

  • sum:求和
  • avg:平均数
  • max:最大值
  • min:最小值
  • count:计算非空字段值的个数
  • 关于count(1)和count(*):
    • 开发中需要用到count()聚合,那么优先考虑count(星*),因为mysql数据库本身对于count(*)做了特别的优化处理。
    • 有主键或联合主键的情况下,count(*)略比count(1)快一些。
    • 没有主键的情况下count(1)比count(*)快一些。
    • 如果表只有一个字段,则count(*)是最快的。
    • 使用count()聚合函数后,最好不要跟where age = 1;这样的条件,会导致不走索引,降低查询效率。除非该字段已经建立了索引。使用count()聚合函数后,若有where条件,且where条件的字段未建立索引,则查询不会走索引,直接扫描了全表。
    • count(字段),非主键字段,这样的使用方式最好不要出现。因为它不会走索引。

其他函数

  • FOUND_ROWS :SELECT语句中经常可能用LIMIT限制返回行数。有时候可能想要知道如果没有LIMIT会返回多少行,但又不想再执行一次相同语句。那么,在SELECT查询中包含SQL_CALC_FOUND_ROWS选项,然后执行FOUND_ROWS()就可以了,FOUND_ROWS只能执行上次执行的sql。

在这里插入图片描述

9.事务

事务四大特征(ACID)

  • 原子性(A):事务是最小单位,不可再分。
  • 一致性( C):数据库的完整性约束没有被破坏,事务执行的前后都是合法的数据状态。
  • 隔离性(I):事务A和事务B之间具有隔离性。
  • 持久性(D):是事务的保证,事务终结的标志(内存的数据持久到硬盘文件中。

隔离性(4个级别)

  • 读未提交:read uncommitted
    事务A和事务B,事务A未提交的数据,事务B可以读取到这里读取到的数据叫做“脏数据”。
  • 读已提交:read committed
    事务A和事务B,事务A提交的数据,事务B才能读取到。这种级别可以避免“脏数据”,会导致“不可重复读取”。Oracle默认隔离级别。
  • 可重复读:repeatable read
    事务A和事务B,事务A提交之后的数据,事务B读取不到,事务B是可重复读取数据,比如1点和2点读到数据是同一个,虽然可以达到可重复读取,但是会导致“幻读”。MySQL默认级别
  • 串行化:serializable
    事务A和事务B,事务A在操作数据库时,事务B只能排队等待,吞吐量太低,用户体验差。

设置事务隔离级别

  1. 在my.ini文件中使用transaction-isolation选项来设置服务器的缺省事务隔离级别。
[mysql]
transaction-isolation = READ-COMMITTED
  1. 通过命令:
SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL <isolation-level>
其中的<isolation-level>可以是:
    –   READ UNCOMMITTEDREAD COMMITTEDREPEATABLE READSERIALIZABLE
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值