MySQL

作者: hgzzz | 来源:发表于2019-04-18 22:22 被阅读0次

    数据库

    1.概念
    • 数据库是一个文件系统,只不过我们需要用命令(SQL)来操作,用来存储数据,带有访问权限,限制不同的人有不同的操作。
    2. 分类
    • 关系型数据库(SQL):用来描述实体与实体之间的关系
      a. mysql : 开源免费 被 oracle收购后开始收费
      b. mariadb:是mysql开源版本的分支,基本命令时一致的
      c. oracle:甲骨文公司,收费,适用于大型电商网站
      d. db2:IBM公司,大多银行系统使用
      e. sqlserver:Windows里面,政府网站(asp.net),图形化工具成熟
    • 非关系型数据库(NOSQL):key => value的形式存储数据
      a. mongodb
      b. redis : set get 来操作数据
    3. SQL语句(Structure Query Language)
    • DDL (Data Define Language):数据定义语言,定义数据库数据表和他们的结构 create(创建) drop(删除) alter(修改)
      1. 创建数据库
        create database databasename;
        指定字符集和校对规则
        create database databasename character set utf8 collate utf8_bin;
      2. 查看数据库
        a. 查看所有数据库
        show databases;
        b. 查看创建数据库的定义
        show create database databasename;
        c. 查看当前正在操作的数据库
        select database();
        status; 显示 current database
        d. 切换数据库
        use databasename;
      3. 修改数据库字符集
        alter database databasename character set 字符集;
      4. 删除数据库
        drop database databasename;
      5. 创建数据表:列的约束(primary key(主键) unique(唯一) not null(非空))
        create table tablename(字段名 类型(长度) 约束,字段名 类型(长度) 约束 )
      6. 查看表
        a. 查看所有表
        show tables;
        b. 查看表的定义
        show create table tablename;
        c. 查看表结构
        desc tablename;
      7. 修改表
        a. 添加列
        alter table tablename add 列名 类型 约束;
        b. 修改列定义
        alter table tablename modify 列名 类型 约束;
        c. 修改列名和定义
        alter table tablename change 旧列名 新列名 类型 约束;
        d. 删除列
        alter table tablename drop 列名;
        e. 修改表名(一般不修改表名)
        rename table tablename to newtablename
        f. 修改表的字符集
        alter table tablename character set 字符集;
      8. 删除表
        a. 删除表及其定义
        drop table tablename;
        b. 删除表中数据,并释放空间,之后插入的数据id标识会连续(覆盖之前的id标识),删除的数据无法恢复
        truncate table tablename
    • DML (Data Manipulation Language):数据操作语言,主要来操作数据 insert(插入) update(修改) delete(删除)
      1. 插入数据:如果values写全,可以不写字段,另外,多个values以逗号隔开可以批量插入数据
        insert into tablename (字段1, 字段 2) values (值1,值2);
      2. 删除数据:如果没有指定条件,会删除所有记录(一条一条删除),不会释放空间,使用roll back指令可以恢复数据
        delete from tablename [where 条件];
      3. 更新数据
        update table set 字段=值,字段=值 [where 条件]
    • DCL (Data Control Language):数据控制语言,定义访问权限,安全设置,grant
    • DQL (Data Query Language):数据查询语言,select(查询) from(子句) where(子句) 编写顺序 select ...from...where...group by...having...order by...,执行顺序 F-W-G-H-S-O
      1. 基本语法
        select [distinct] [ * ] [列名,列名2] from tablename [where 条件] [group by 字段名] [having 条件过滤] [order by 排序];
      2. 查询表中所有数据
        select * from product;
      3. 查询指定字段
        select pname,price from product;
      4. 别名查询:主要用在多表查询中
        a. 表别名
        select p.pname, p.price from tablename as p;
        b. 列别名
        select pname as 商品名称, price as 商品价格 from product;
        效果
      5. 去掉重复的值(distinct
        select distinct price from product;
      6. 运算查询 仅仅在查询结果上做 + - * /
        select *,price*0.8 as "会员价" from product;
      7. 条件查询 [where 关键字] 关系运算符 > < = >= <= != <>(表示不等于这是标准的sql语法) 逻辑运算and or not
        select * from product where price > 60 and price < 100;
        select * from product where price between 60 and 100;
      8. 模糊查询 like _: 表示一个字符 %:表示多个字符
        select * from product where pname like "%小%";
      9. 排序查询 order by asc 升序(默认) desc 降序
        select * from product where pname like "_米%" order by price desc;
      10. 聚合函数,聚合函数不能直接用在 where 条件后面
        a. sum():求和 select sum(price) from product;
        b. avg():求平均值 select avg(price) from product;
        c. count():统计数量 select count(*) from product;
        d. max():求最大值 select max(price) from product;
        f. min() :求最小值 select min(price) from product;
        g. select * from product where price > (select avg(price) from product);
      11. 分组 group by
        a. 基本语法
        select cno,count(*) from product group by cno;
        b. having关键字,可以接聚合函数,出现在分组之后;where关键字,不能接聚合函数,出现在分组之前
        select cno,avg(price) from product group by cno having avg(price) > 0 order by desc;
    4. 多表关系和多表查询
    • 多表之间的外键维护:外键约束foreign key
      1. 添加外键约束 alter table product add foreign key(cno) references category(cid);
    • 多表之间的建表原则
      1. 一对多(一个表中一条记录关联另一个表中多条记录):在多的一方添加一个外键指向一的一方的主键
      2. 多对多:多建一张中间表,至少有两个外键,这两个外键分别指向原来的两张表的主键,将多对多转换成两个一对多的关系。
      3. 一对一:当成一对多处理,给一个表添加外键,或者将两个表的外键设置成一样,或者直接写出一张表
    • 多表查询
      1. 交叉连接查询,笛卡尔积,没什么实际意义
        select * from product, category ;
      2. 内连接查询
        a. 隐式内连接
        select * from product as p,category as c where p.cno=c.cid;
        b. 显示内连接
        select * from product as p inner join category as c on p.cno=c.cid;
        select p.pname,c.cname from product p inner join category c on p.cno=c.cid;
      3. 外连接查询
        a. 左外连接,把左表中的数据全部查询出来,如果右表中没有对应的数据,用null填充
        select * from product p left outer join category c on p.cno=c.cid;
        b. 右外连接
        select * from product p right outer join category c on p.cno=c.cid;
      4. 分页查询
        select * from product limit 开始索引,个数;
      5. 子查询:查询语句中嵌套查询语句
        select * from product where cno = (select cid from category where cname="手机数码");
        select p.pname as "商品名称",(select c.cname from category c where c.cid=p.cno) as "分类名称" from product p;
    附:DQL中的表结构
    category表结构 product表结构
    数据库.png

    相关文章

      网友评论

          本文标题:MySQL

          本文链接:https://www.haomeiwen.com/subject/wqtnwqtx.html