MySQL之基础概念

根据B站黑马程序员MySQL数据库整理,用于自查

DDL

全称Data Definition Language,数据定义语言,对数据库进行增删改查。

  1. create table/database [if not exists]表名/数据库名;
  2. drop table/database 表名/数据库名;
  3. truncate table 表名;
  4. alter table 表名 add 字段名 字段类型;
  5. alter table 表名 drop 字段名;
  6. alter table 表名 modify 字段名 字段类型(修改字段类型);
  7. alter table 表名 change 旧字段名 新字段名 新字段类型(修改字段名和字段类型);
  8. alter table 旧表名 rename to 新表名;
  9. show tables/databses;
  10. desc table 表名;

DML

全称Data Manipulation Language,数据操纵语言,对表中数据进行增删改。

  1. insert into 表名 (字段…) values(值…)
  2. insert into 表名 values (值…)
  3. insert into 表名 (字段…) values (值…),(值…)…
  4. insert into 表名 values (值…),(值…),…
  5. delete from 表名 where
  6. update 表名 set 字段=值,… where

DQL

全称Data Query Language,数据查询语言。

  1. where
  • like ‘__’ 和 like ‘%’
  • 解析顺序:自下而上
  1. 聚合函数
  • max min count avg sum
  • null不参与聚合函数运算
  • select 聚合函数 from 表名
  1. 分组查询
  • group by 字段名 having 条件

where和having区别:
where是group by前过滤,having是group by之后过滤;
where后不能加聚合函数,having后可以通过聚合函数过滤;
where中不可以使用select中的别名,having中可以使用别名。
eg. 查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址
select workaddress, count(*) address_count from emp where age<45 group by workaddress having address_count >= 3;

  1. 排序查询
  • order by 默认asc
  1. 分页查询
  • limit 要写在最后(编写顺序)
  • select 字段列表 from 表名 limit 起始索引,查询记录数

语法顺序:select -> from -> where -> group by -> having -> order by -> limit
执行顺序:from -> where -> group by -> having -> select -> order by -> limit

DCL

全称Data Control Language,数据控制语言,管理用户。

  1. use / create / alter / drop
  2. 权限控制
  • 查:show grants for ‘用户名’@‘主机名’
  • 改/增:grant 权限 on 数据库名.表名 to ‘用户名’@‘主机名’
  • 删:revoke 权限 on 数据库名.表名 to ‘用户名’@‘主机名’

函数

字符串函数

  1. concat(s1,s2,…)
  2. lower()/upper()
  3. lpad(str,n,pad)左填充,用字符串pad对str的左边进行填充,达到n个字符串长度
  4. rpad(str,n,pad)右填充
  5. trim()
  6. substring(str,start,len) 将str从start位置(从1开始)起截取len个长度

数值函数

  1. ceil 向上取整
  2. floor向下取整
  3. mod 取模
  4. rand 0~1内随机数
  5. round(x,y) x四舍五入,保留y位小数

日期函数

  1. curdate()
  2. curtime()
  3. now()
  4. year(date)
  5. month(date)
  6. day(date)
  7. date_add(date,interval expr type)
  8. datediff(date1,date2) date1和date2相差的天数

流程函数

  1. if(value,t,f)
  2. ifnull(value1,value2)
  3. case when then end

约束

  1. 非空约束 not null
    唯一约束 unique
    主键约束 primary key, auto_increment
    默认约束 dedault
    检查约束 check(条件1 && || 条件2)
    外键约束 foreign key referrnces 表名(主表列名)
  2. 设置emp表外键dept_id,和dept表id关联,删除和更新时,删除和更新关联表中的数据
    alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id) on update cascade on delete cascade;
  3. 设置emp表外键dept_id,和dept表id关联,删除时,关联表中的数据置为null
    alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id) on delete set null;
  4. 删除外键
    alter table emp drop foreign key fk_emp_dept_id;

多表查询

  1. select * from A,B(笛卡尔积)
  2. select * from A,B where … 等价于 select * from A inner join B on… (任何条件字段为空,这条数据都查询不到)
  3. Union 去重
    Union all 不去重
  4. all/some/any
  • 比财务部所有人工资都高的员工信息
    select * from emp where salary > all(select salary from emp where dept_id = (select id from dept where name=‘财务部’);
  • 比财务部任意一个工资高的员工信息
    select * from emp where salary > any/some (select salary from emp where dept_id = (select id from dept where name=‘财务部’);
  1. 查询与’张三’,'李四’的职位和薪资相同的员工信息
    select *from emp where (job,salary) in (select job,salary from emp where name=‘张三’ or name=‘李四’);

事务

事务是一组操作的集合,他是不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功要么同时失败。

事务四大特性

原子性:事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
一致性:事务完成时,必须所有数据都保持一致状态。
隔离性:数据库提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
持久性:事务一旦提交或回滚,它对数据库中的数据的改变是永久的。

事务操作

  1. MySQL数据库中默认自动提交,也可设置为手动提交 set @@autocommit = 0;
  2. 开启事务:start transaction 或begin
  3. 提交事务:commit;
  4. 回滚事务:rollback;
  5. 查看事务隔离级别:select @@transaction_isolation;
  6. 设置事务隔离级别:set transaction isolation level {read uncommitted | read committed | repeatable read | serializable};

事务隔离级别

隔离级别脏读不可重复读幻读
read uncommitted
read committed×
repeatable read××
serializable×××

mysql默认隔离级别是repeatable read,oracle是read committed

  1. 脏读:一个事务读到另外一个事务还没提交的数据。
  2. 不可重复读:是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。
  3. 幻读指并发插入、删除时,另一个事务前后执行相同条件的查询得到的数据不一致

隔离级别越高,安全性越高,并行度越低,付出的代价越大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值