MySQL基础知识回顾

∥☆過路亽.° 提交于 2020-10-28 09:14:18

Mysql

基本准备

  • cmd登录 mysql -rusername -ppassword
  • 显示授权用户 show grants
  • 创建数据库 create datebase datebase_name
  • 展示所有数据库 show datebase
  • 使用数据库 use database_name;
  • 建表
    create table table_name(
    id int(11) auto_increment,
    name varchar(30),
    primary key(id)
    )default charset=utf8;
  • 展示表 show tables
  • 删表 drop table table_name
  • 修改表 alter table table_name
  • 重命名表 rename table table_name to table_name
  • 展示列 show columns form table_name

查询

  • 基本查询 select select * from table_name;
  • 条件查询 select where select * from table_name where id = ?;
  • 分页查询 select limit select * from table_name limit 0,5;
  • 查询不同行 select distinct select distinct colunm_name from table_name;

修改

  • 基本修改 update set where update table_name set column_name = value where id = ?

删除

  • 基本删除 delete where delete from table_name where id = ?

插入

  • 基本插入 insert into insert into table_name values(null,'');

  • 插入多条数据

    insert into table_name(column_name,
        column_name,
        column_name)
        VALUES(null,
            'b',
            'c'),
        values(null,
            null,
            'd');
    
    
    

排序

  • 基本单列升序 select order by select column_name from table_name order by column_name
  • 多列降序 select order by desc slect column_name,column_name from table_name order by column_name,column_name desc

过滤

  • 基本过滤 where selcet * from table_name where id = ?
  • 过滤空值 where is null select * from table_name where column_name is null
  • 范围过滤 where between select * from table_name where column_name between a and b
  • 和操作 selcet where and select * from table_name where column_name = a and column_name = b
  • 或操作 select where or select * from table_name where column_name = a or column_name = b
  • 条件范围 select where in(a,b) 且column_name为a或者b select * from table_name where column_name in (a,b)
  • 否定 where not select * from table_name where column_name not in (a,b)
  • 通配符 % _ like select * from table_name where colunm_name like '%a%' or column_name like '_a';

正则表达式

  • 基本匹配 select regexp select * from table_name where column_name regexp 'reg'
  • Or匹配 select regexp | select * from table_name where column_name regexp 'a|b'
  • 匹配几个字符之一 select regexp [] select * from table_name regexp '[123] a'
  • 匹配范围 select regexp [-] select * from table_name where column_name regexp '[1-9] a'
  • 匹配特殊字符 select regexp \ select * from table_name where column_name regexp '\\.'

计算字段

  • 简介:在数据库服务器上完成不同表的列数据进行拼接,返回用户期待的数据,如:在地址表获得地址列,在联系表获得联系电话,两者拼接成收货信息,返会给用户

  • 拼接字段 select Concat select Concat(column_name,'(',column_name,')')

  • 去除空格 selct RTrim select Concat(RTrim(column_name),'(',RTrim(column_name),')')

  • 重命名 select Concat as select Concat(column_name,'(',column_name,')') as column_name

基本函数

  • 文本处理
  • 日期时间
  • 数值处理

聚集函数

  • avg()函数 select avg() as select avg(column_name) as colunm_name from table_name
  • count()函数 selct count() select count(column_name) from table_name
  • max()函数
  • min()函数
  • sum()函数
  • 统计不同值 select avg distinct select avg(distinct column_name) from table_name
  • 组合函数 select count(*) as colunm_name,min(colunm_name) as coulunm_name from table_name

分组数据

  • 基本分组 select group by select column_name,count(*) from table_name group by column_name

  • 分组过滤 select from where group by having count 返回12个月内具有两个订单以上的顾客,where过滤12个月,having过滤两个订单分组

    select vend_id,count(*) as num_prods 
    from products
    where prod_price >= 10
    group by vend_id
    having count(*) >= 2;
    

子查询

  • 基本嵌套 先执行内嵌套 select from where in selcet

    select column_name,column_name
    from table_name
    where id in (select id
                from table_name
                where num in (select num
                            from table_name
                            where id = 'a'));
    

关系表

  • 相同数据出现多次决不是一件好事,此因素是关系数据库 设计的基础。如:多个供应商与多个产品的关系,用三张表,vendors表存储所有供应商信息,每个供应商占一行,以ven_id为主键。products表存储所有产品信息以及供应商id,以pro_id为主键,通过pro_id的查询得到ven_id,从而在vendors表中找到供应商的信息,又称pro_id为vendors的外键。

  • 外键:某个表中的一列,列值为另外一个表的主键。

    1. 供应商信息不重复,不浪费时间空间
    2. 供应商信息变更时,仅需更新供应商的单个记录
    3. 数据无重复,数据一致处理更加简单
  • 基本双表where内联结 select where table_name.column_name = table_name.column_name

    select vend_name,prod_name,prod_price
    from vendors,products
    where vendors.vend_id = products.vend_id
    order by vend_name,prod_name;
    
  • 基本双表inner内联结 select inner join on table_name.column_name = table_name.column_name

        select vend_name,prod_name,prod_price
        from vendors
        inner join products
        on vendors.vend_id = products.vend_id
    
  • 内连结查询可以代替嵌套子查询 selcet from where and

        select cust_name
        from customers,orders,orderitems
        where customers.order_num = orders.order_num
        and customers.cust_id = orders.cust_id
        and prod_id = 'tnt2';
    
  • 表别名 select from where and as 实现在单一的select语句中多次引用同一张表

        select  p1.prod_id,p1.prod_name
        from products as p1,products as p2
        where p1.vend_id = p2.vend_id
        and p2.prod_id = 'dtntr';
    
  • 外部联结 select from right outer join on 实现查询包括没有关联行的行,如未下单客户

    select *
    from customer right outer join orders
    on oreders.cust_id = customers.cust_id
    
  • 聚合函数联结

        select customers.cust_name
        count(orders.order_num) as num_ord
        from customers inner join orders
        on customers.cust_id = orders.cust_id
        group by customers.cust_id;
    

组合查询

  • 基本组合查询 union

    select vend_id,prod_id,prod_price
    from products
    where prod_price <= 5
    union
    select vend_id,prod_id,prod_price
    from products
    where vend_id in (1001,1002);
    

全文搜索

  • 前置条件 启用全文本搜索,需要建立MyISAM引擎的表ENGINE=MyISM,不同于一般的InnoDB表,并且在创建表时添加FULLTEXT子句FULLTEXT(note_text)

  • 基本搜索 select from where Match Against

    select note_text
    from productnotes
    where Match(note_text) Against('rabbit');
    

视图

  • 基本介绍

    1. 视图命名唯一
    2. 不能索引,不能有关联的触发器和默认值
    3. 可以和表一起联结使用
    4. MySQL的select语句层次的封装,用于简化数据处理以及重新格式化基础数据或保护数据
  • 创建视图 create view as select from where and

    create view view_name as
    select cust_name,prod_id
    from customers,orders,orderitems
    where customers.cust_id = order.cust_id
    and orderitems.order_num = orders.order.order_num;
    

存储过程

  • 基本介绍

    1. 维护数据的一致性
  • 执行存储过程

    call productpricing(@pricelow,
                        @pricehigh,
                        @priceaverge);
    
  • 创建存储过程 使用//作结束符号。等效于";"

    delimiter //
    create procedure productpricing()
    begin
        select avg(prod_price) as priceaverage
        from products;
    end //
    
  • 删除存储过程 drop procedure productpricing;

使用游标

使用触发器

  • 基本准备

    1. 唯一触发器名
    2. 触发器关联的表
    3. 触发器响应的活动
    4. 触发器执行时机
  • 创建触发器 插入执行之后,将对每个插入的行显示一次

    create trigger newproduct
    after insert on products
    for each row select 'Porduct added';
    
  • 删除触发器 drop trigger newproduct

  • insert触发器 create trigger after insert on for each row new

    create trigger neworder after insert on orders
    for each row select new.order_num;
    

    代码解读:插入一个新的订单到orders表时,MySQL生成一个新的订单号并保存到order_num中。触发器从NEW.order_num取得这个值并返回它。

  • delete触发器 create trigger before delete on for each row OLD delete触发器在delete语句执行之前或之后执行。在delete触发器代码内,你可以引用一个名为OLD的虚拟报表,访问被删除的行。

    create trigger deleteorder before delete on orders
    for each row
    begin
        insert into archive_orders(order_num,order_date,cust_id)
        values(OLD.order_num,OLD.order_date,OLD.cust_id);
    END;
    

    代码解读:在任意订单被删除之前将执行此触发器,它使用一条insert语句将OLD中的值(被删除订单)保存到一个名为archive_orders的存档表中

事务

  • 基础准备

    1. 事务:指一组SQL语句
    2. 回退:指撤销指定SQL语句的过程
    3. 提交:指将为存储的SQL语句写入数据库表
    4. 保留点: 回退部分事务的标记点
  • 回撤 start tansaction rollback

        selete * from ordertotals;
        start transaction;
        delete from ordertotals;
        select * from ordertotals;
        rollback;
        selete * from ordertotals;
    

    代码解读:查询表,然后开启事务管理,用一条delete语句删除所有行,另一条selete语句验证表已空。再用一条rollback回退开启事务之前的所有语句

  • 提交 start commit

        start transaction;
        delete from orders where order_num = 20010;
        delete from orders where order_num = 20021; 
        commit;
    

    代码解读:若有一句执行失败,另一句也不会执行,只有两个句都成功执行,才会执行

  • 设置保留点 savepoint delete1

  • 使用保留点 rollback to delete1

备份

  • 基本备份 "path\mysqldump.exe" -uusername -ppassword -hlocalhost -P3306 datebase_name -r path\test.sql
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!