Mysql数据库基础

SQL语句总结

  • DDL:DataDefinitionLanguage 数据库定义语言,关键字有:create,alter,drop
  1. create:创建表和数据库:
    create 数据库名 character set 'utf8';  
    show 数据库名; //显示建立的数据库
    use 数据库名;  //使用某个数据库

---
    create table 表名 (
        列名1 数据类型 主键约束 自增    //主键一般为自增
        列名2 数据类型 非空约束 唯一约束 //非空约束 唯一约束非强制添加
        列名3 数据类型
        ...   ...
    );   
  1. alter:修改表结构:
    -- 对列添加主键约束,对多个列添加主键约束,也可以对单个列添加。   
    alter table 表名    
        add constraint pk_表名   
            primary key(列名1,列名2...);  
    -- 对主键添加自增约束。
    alter table 表名 modify 主键列名 auto_increment;
    -- 添加约束的语句:不包括非空约束
    alter table 表名 add constraint 约束名 约束列;
    -- 添加非空约束:modify(非空约束是列级约束,只能用modify来添加)
    alter table 表名
	    modify 列名 列数据类型 not null;
	-- 删除非空约束:modify
    alter table 表名
	    modify 列名 列数据类型;
    -- 删除约束:不包含非空
    alter table 表名 drop 约束列 [约束名];
    --唯一性约束底层是对列添加唯一索引(index)
    --删除唯一约束:
    alter table 表名  
	    drop index 唯一约束名;
    -- 添加外键约束:foreign key:fk,外键名:fk_主表名_从表名
    -- 主表自己带有主键的表,从表是指有外键的表
    alter table t_score
	    add CONSTRAINT fk_student_score
          FOREIGN key(student_id) 
            -- REFERENCES引用
	        REFERENCES t_student(student_id);
    -- 删除外键要跟外键名
    alter table t_score
    	drop foreign key fk_student_score;

3.drop删除数据库和表

   -- 删表:
   drop table if EXISTS 表名;

    --删库:
    drop database if EXISTS 数据库名;

  • DML:DataManipulateLanguage,数据操纵语句,对表中的数据进行操作的语句,关键字:insert delete update
  1. insert:向表中添加数据:
      -- 插入数据
    insert into  表名
        values(所有列的值);
     -- 插入指定列的值
     insert into 表名
        列名1,列名2,values(值1,值2);
    -- 插入数据时,主键可以写空值。

2.delete:删除数据

    -- 删除行数据
    delete from 表名
        where 列名(条件);

3.upadate:修改数据

    -- 修改数据,修改的列值
   update 表名    
        set 列名='新值';
    where 条件

注意:insert和delete是对列进行添加和删除,update是对列的值进行修改

  • DQL:DataQueryLanguage:数据查询语句,查询的是表中的数据:select
    1.select:用来查询数据
    -- 查询表中所有数据
    select * from 表名;
    -- 查询指定列数据,as是起别名,可省略。
    select 列名1 as '别名',列名2 as '别名'
        from av_actress
	        where 要查询的条件;      
select语句后使用where;对查询结果进行筛选,where相当于if,where后:条件运算/逻辑运算

模糊查询:

1、可以用like表达式。
2、instr(列名,要查找的字符串)>0;表示列值中有要查找的字符串。
instr(列名,要查找的字符串)=1;表示要查找的字符串是第一个位置。
注意:Mysql中字符串下标从1开始,
instr();查找不到返回0;

参数绑定:

主查询子查询之间参数绑定应用场景:
1、子查询的查询结果不固定。
2、子查询的结果随着外层查询结果而变化。
绑定谁?
随着外层的哪列变化就绑定哪列;如果是多列就绑定多列

聚合函数、统计函数:

对多行值进行统计,返回值为一行一列(一个数)
AVG()
COUNT()
MAX()
MIN()
SUM();
注意:聚合函数单独使用或者和分组连用

分组:

分组的目的就是为了统计,
group by:表示分组;
group by 列名1,列名2,…
分组后,只能select 分组的列名,聚合函数
where是对整个查询结果进行筛选,
having是对分组的结果进行筛选,
having用在group by后
如果不分组,聚合函数单独使用

DQL语句的书写顺序:

select …
from …
where …
group by …
having …
order by …

count():

count():是按行统计个数,也就是统计有多少行,
count()和count(1)的区别?
count(
):整行统计,
count(1):按单列去统计,
count(1)的执行效率略高于count(*)。

分页查询:

limit m,n:
m:起始行数
n:连续查出几条
注意:0表示第1行
每页pageSize条,查询pageNo(页码)页的数据
limit (pageNo-1)*pageSize,pageSize;

子查询:

单行子查询:
子查询返回结果为一行,可以使用关系运算进行比较;
多行子查询:
子查询返回结果为多行,不能直接使用关系运算进行比较,可以使用in,any,all
any:任意一个
in(范围):=any(范围);
in的含义:=(任意一个即可)

所有的关联查询都可以使用子查询替换,
但不是所有的子查询都可以使用关联查询替换。
子查询和关联查询都可以实现需求的情况,优先选择关联查询,语法简单,效率更高。

EXISTS:

1.删库删表时,使用if EXISTS 进行判断
2.用来判定查询是否有结果:
where exists(子查询)
判断部分sql(子查询)是否有结果,
如果子查询有结果执行外层查询,否则不执行

where EXISTS只是确定下外层查询是否执行
不能限定外层查询结果
EXISTS相当于一个查询条件

where不是对最终的查询结果进行筛选,
它是对表中的数据按行进行筛选
聚合函数、分组:
是对最终的查询结果进行聚合、分组
having:是对分组后的结果进行筛选
where中不能使用聚合函数

多列分组原则:

是按列先后顺序分组如:group by 列1,列2…
先按列1分组,
然后再对分组后的结果按列2分组
依次类推…

关联查询:

把多张表关联为一张逻辑大表,目的是为了方便查询。
多个表关联后,select 各个表的列,
但关联后一般不select *,避免重复列

关联查询/连接查询:
笛卡尔积:一个表的每条数据分别和别的表去连接
A:m行记录 B:n行记录
笛卡尔积后:m*n条

内连接:inner join,inner可省略
等值连接:通过外键进行等值连接
非等值连接
笛卡尔积:全连接

外连接:
左外连接:
A left join B:
左表的数据会全部查出,
和右表无数据关联的列值使用null值填充;
右表只查询有关联的数据

右外连接:
A right join B:
右表的数据会全部查出,
和左表无数据关联的列值使用null值填充;
左表只查询有关联的数据

左连接,谁在左,全查谁
右连接,谁在右,全查谁

多表关联语法:
        // 1.inner join
        select ... from 表名1 inner join
            表名2 inner join...
            on 外键的链接
        // 2.
        select ... from 表1,表2...
            where 外间的连接
            and ...
            and ...
找外键,几个外键几个on/几个where条件
事务:
事务的特性:

ACID

  1. 原子性:原子性是指事务是一个不可分割的工作单位,事务中的操作要么 都发生,要么都不发生。
  2. 一致性:一个事务执行会使数据从一个一致状态切换到另外一个一致状态
  3. 隔离性:事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个 事务内部的操作及使用的数据对并发的其他事务是隔离的,并发 执行的各个事务之间不能互相干扰。
  4. 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是 永久性的,接下来的其他操作和数据库故障不应该对其有任何影响。

mysql数据库引擎:
innodb:支持事务
MyISAM:不支持事务,查询速度快,很少修改,经常查询
masql:默认提交事务:
每一个DML语句默认对应一个事务
需要事务控制时,首先要关闭自动提交事务。
转账:两个update是一个事务
事务结束方式:
正常结束:commit
事务回滚:rollback

隔离级别:
  1. 脏读: 对于两个事务 T1,T2, T1读取了已经被T2 更新但还没有被提交的字段 之后, 若T2回滚, T1读取的内容就是临时且无效的.
  2. 不可重复读: 对于两个事务T1, T2, T1 读取了一个字段, 然后 T2 更新了该字段. 之后, T1再次读取同一个字段, 值就不同了.
  3. 幻读: 对于两个事务T1, T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中插 入了一些新的行. 之后, 如果 T1 再次读取同一个表, 就会多出几行.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值