MySQL的学习笔记

SQL
structured Query Language:结构化查询语言
定义了操作所有关系型数据库规则:每一种数据库操作方式存在“方言”

SQL通用语法
 SQL 语句可以以单行或多行书写,以分号结尾;
  可以使用缩进或空格增强语句可读性,不区分大小写
 三种注释  单行注释
     -- (必须加空格)注释内容; # 注释内容
 多行注释  /* 注释内容*/
    SQL分类:
DDL :数据库定义语言:用来定义数据库对象
    数据库,表,列。关键字:create, drop, alter 等
DML:数据库操作语言 :用来对数据库表中的数据进行增删改
        关键字: insert,dalete,update 等
DQL: 数据库查询语言:用来查询数据库表中的记录
        关键字:select ,where等
DCL:数据库控制语言:用来定义数据库访问权限和安全级别,及创建用户。
        关键字:GRANT, REVOKE 等

**************************************************************
DDL操作数据库:CRUD:1、Create创建2、Retrieve查询3、update 4、dalete
 
show databases;查看所有数据库
show create database mysql;查看某个数据库的字符集
create database if not exists db2;创建数据库“先判断”
create database if not exists db3 character set gbk;判断数据库是否存在,
并指定字符集为jbk
 alter database db3 character set utf8;修改数据库字符集
 drop database if exists mymy;判断数据存在再删除数据库
使用数据库use "数据库名称"
查询当前正在使用的数据库 select database();
****************************************************
 操作表:CRUD:1、Create创 建2、Retrieve查询3、update 4、dalet
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
...
列表n 数据类型n
);
  show tables;查看数据库中所有的 表
  desc slow_log;查看表结构
  create table stu like student;复制表
  drop table if exists 表名;删除表
修改表
1、修改表名  :alter table 表名 rename to 新的表名
2、修改表字符集:alter table 表名character set utf8
3、添加一列:alter table 表名 add 列名 数据类型
4、修改列名,类型:alter table student change  列名 新列名 新类型;
        alter table student modify  列名  新数据类型;
5、删除列:alter table 表名 drop 列名;

***************************************************
DML:增删改表中的数据
1、添加数据:insert into 表名(列名1,列名2,...,列名n)values()
    注意-->列名 与 类型 --对应
    如果表名后 不定义列名,默认给所有列添加值
    除了数字类型,其他类型用引号引起里
2、删除数据:delete from 表名 [where 条件]
    truncate table 表名 再创建一个一模一样的表
    注意 如果不加条件,删除表中所有记录 --不推荐使用
    
3、修改数据:update 表名 set 列名1 = 值1,列名2 = 值2,... [where 条件];
**********************************************************************************
DQL :查询表中记录
1select * from 表名;
 语法:     select  字段名列表
     from 表名列表 
     where 条件列表
    group by 分组
    having 分组之后的条件
    order by 排序
    limit 分页限定
2、基础查询:
    1、多字段查询
    select  表达式1,表达式2,...,from 表名;
    2、去除重复
    select distinct ....
    3、计算列
    一般可以使用四则运算计算一些列的值
    ifnull(表达式1,表达式 2):null 参与运算,结果都为null
    4、起别名   as 可以省略
========================================
3条件查询
    where子句后跟条件
    运算符 >,<,<=,>=,=,<>
        between ...and
        in(集合)
        like模糊查询“_:单个字符,%:多个字符”
        is null
        and / &&
        or / ||
        not / !
=============================================
1、查询语句
    1.排序查询
语法:order by 排序字段1  排序方式1,排序字段2  排序方式2,.....;
    ASC:默认升序  DESC:降序
     2.聚合函数 :将一列数据作为一个整体,进行纵向计算
1.count:统计个数
2.max:计算最大值
3.min:计算最小值
4.sum:计算和
5.avg:计算平均值
    3.分组查询:将表中的数据按照条件进行分组,每一组是一个整体
语法: group by 分组字段:分组字段/聚合函数
    where 后不能跟聚合函数
    having后可以跟聚合函数
    4.分页查询:
语法:limit 开始的索引,每一页查询的条数
  开始的索引=(当前的页码 - 1)* 每页显示的条数
分页操作“limit”是一个“方言”
===========================================
2、约束 对表中的数据进行限定,保证数据的正确性,完整性,有效性。
    分类:
    1.主键约束:primary key
<注意:含义:非空且唯一;一张表只能有一个字段为主键;主键是表中记录的唯一标识。
<创建表时添加主键约束;
<创建表完成之后添加主键约束:alter table 表名 modify 列名 int primary key;
<删除primary key 约束 :alter table 表名 drop primary key;
<自动增长:如果一列是数值类型的,使用auto_increment 可以来实现值得自动增长。
    2.非空约束:not null
创建表时添加非空约束;创建表完成之后添加非空约束
    3.唯一约束:unique :值不能重复  可以有多个null
创建表时添加唯一约束;创建表完成之后添加唯一约束
删除unique 约束 alter table 表名 drop index 列名;
    4.外键约束:foreign key
在创建表时添加外键
create table 表名(...外键列constraint 外键名称 foreign key 外键列名称 references 主表名称(
主列名称))
<删除外键 alter table 表名 drop foreign key 外键名
<添加外键alter table 表名 add (...外键列constraint 外键名称 foreign key 外键列名称 references 主表名称(
主列名称))

<级联操作 级联更新 
    添加连操作alter table 表名 add constraint 外键名称
    foreign key 外键字段名称 references 主表名称 on update 
    cascade on delete cascade ;
    分类:
    1  级联更新:on update cascade 
    2  级联删除:on delete cascade 
========================================================
3、多表之间的关系
4、范式
5、数据库的备份和还原

++++++++++++++++++++++++++++++++++++++++++++++++
事务与存储过程
    事务: 针对数据库的一组操作,它是有一条或者多条sql语句组成,事务中的语句要么同时完成要么同时不完成 。
    mysql默认就自带事务。在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务
    自定义事务:
    start transaction; -- 开启事务
    ……
    …… -- 过程
    commit -- 提交事务, 让事务即可对数据库进行更新
    rollback -- 事务回滚 ,取消事务

    事务的4个特性
            1、原子性  不可分割的最小单元
            2、一致性  事务将数据库从一种状态转变为一下种一致的状态
            4、持久性  事务一旦提交,其所作的修改会永久保存到数据库中。
            3、隔离性  多个并发事务之间要相互隔离互不干扰

实际上数据库都是并发的,多个用户会同时操作数据库,
就有可能会出现脏读、不可重复读、虚读幻读的问题。
完全隔离不现实,影响数据库性能。
    1.脏读:一个事务读取到另一个事务未提交的数据
    2.不可重复读:一个事务多次读取同一条记录,结果不同,(一个事务读取到另一个事务已经提交的数据)
    3.虚读(幻读):是指一个事务中两个查询的数据的条数不一致(其它事务做了插入记录的操作)
事物的四大隔离级别:
    read uncommitted  -- 不做任何隔离,具有脏读不可重复读虚读(幻读)问题
    read committed    -- 可以防止脏读,不能防止不可重复读和虚读(幻读)问题
    Repeatable read   -- 可以防止脏读不可重复读,不能防止虚读(幻读)问题
    serializable      -- 数据库运行在串行化末实现所有问题都没有但是性能非常的低

查看数据库的隔离级别:
    select @@tx_isolation;
    
存储过程:
    存储过程的创建
    create procedure 函数名 ()
    begin -- 开始 
    …… 函数体
    end -- 结束
例如:创建一个student存储过程
    create procedure m1()
    begin
    select * from student;
    end ;
    
变量的使用:
    declare 变量名 变量类型 默认值
    declare id int default 100;
    
    set 变量名 = 值;
    set id = 120;
    
流程控制:
    if 条件判断;
    else 条件;
    
repeat循环:计算1+100

游标,光标 它可以使用户逐行的访问数据
    顺序:声明游标 打开游标 读取数据 关闭游标
    
    1.声明:
    declare 名字 cursor for 查询语句;
    2.打开:
    open 名字;
    3.取值:
    fetch 名字 into 字段名1,字段名2
    4.关闭:
    close 名字;
    
游标结合存储过程:
drop procedure if exists mycur;
create procedure mycur ()
begin
    declare stuname varchar(20) ;
    declare stuscore float;
    declare n int default 0;
    declare i int default 0;


    declare mystudent carsor for select name,grade from student:
    select count(*)into n from student;

    open mystudent;

    repeat
        fetch mystudent into stuname,stuscore;
        select stuname,stuscore;
        set i = i+1;
    until i>n end repeat;
    close mystudent;
end
call mycur();

close mystudent ;
end

call mvcuz () :

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扶不起来的小白菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值