zoukankan      html  css  js  c++  java
  • MySQL基础知识

    mysql

    众多关系型数据库中的一种
    用来存数据的
    一个仓库 -- 一个数据库
    箱子 -- 表
        进入mysql命令行:mysql -uroot -pxxx

        show tables;#查看所有表


    数据库:
      查看 show databases;
      创建 create database blk charset utf8;
      删除 drop database blk;
      选择数据库:use blk;
      show create database blk;
      查看创建数据库的语句


    表约束

      #自增长

      auto_increment

      #非空
      not null
      #默认值
      default 'xx'
      #唯一约束
      unique
      #charset
      指定字符集
      #主键
      primary key
      具有唯一性,不能为空
      #外键
      用来表示两个表之间的关系
     增:
      #score
      create table score(
      id int auto_increment primary key,
      s_id int not null,
      grade float not null
      );

      create table blk (
      id int auto_increment primary key,
      name varchar(10) not null,
      sex varchar(5) default '男' ,
      addr varchar(50),
      phone int not null unique,

      );

    删:
      drop table blk;

      alter table blk rename stu;#改表名
      alter table blk modify name varchar(20) unique;
      alter table blk change name stu_name varchar(30);#修改字段的数据类型
      alter table blk add money float not null after stu_name;#新增一个字段,放在哪个位置
      alter table tablename drop addr;#删除某个字段

    查:
      show create table tablename;#查看建表语句
      desc tablename;查看表结构
      show tables;#查看所有的表


    数据:
    增:
      insert into blk (stu_name,money,sex,phone)
      values ('赵小静','100.1','女',110);
      insert into blk (stu_name,money,phone)
      values ('王国元','100.1',110);
      #指定字段
      #不指定字段
      insert into blk values('','吕亚洲1',10000,'',10991);
      #指定字段的话,插入的值和字段对应
      #不指定的话,要把所有的字典值都写全。
      INSERT INTO blk (stu_name, money, phone)VALUES('杜红娟', 100011, 1091199),('张艳华',1000,1999),('薛伟',100000,101999);#同时插入多条
    删:
      DELETE from blk; 删除整个表里的数据
      truncate tablename;#删除整个表里的数据
      #delete清空的表自增长id还会继续增长
      #truncate 清空的表自增长id从1开始,truncate速度比delete要快,因为truncate 是从磁盘上直接把数据删除,恢复不了。
      delete from blk where stu_name = '赵小静';
      #删除指定的数据

      update blk set money=80;
      #如果不指定条件的话,修改的是整个表的数据
      update blk set money=90 where stu_name='赵小静' ; #修改指定的数据
      update blk set money=100,phone=10000 where stu_name='赵小静' ; #修改多个字段
      UPDATE blk set money=money+100 ;#在原来的值基础上做修改
    查:
      SELECT * from blk limit 1,5;#从第几条开始,下面的x条,不包含开始的那一条
      SELECT * from blk limit 5;查询5条
      SELECT id,stu_name,sex,money,phone from blk;#指定查询的字段
      SELECT * from blk;#查询所有的数据
      SELECT * from blk where sex='男';#指定条件
      SELECT * from blk where sex='男' and money>100; #多个条件,必须同时满足
      SELECT * from blk where sex='男' or sex='未知' ; #多个条件,有一个满足即可
      SELECT * from blk where sex !='男'; #<>也是不等于
      SELECT * FROM blk where addr like '%东京%';#模糊匹配,%代表的是通配符,必须得用like
      SELECT * from blk a where a.stu_name like '姚_';#_通配符表示任意一个单字符
      SELECT a.stu_name 学生名称,a.phone 学生电话 from blk as a where a.stu_name='姚远';#给表起别名,as可以省略
      SELECT * from blk a where a.stu_name in ('阿翔','林倩','姚远');# in
      SELECT * from blk a where a.money BETWEEN 1000 and 10000;#在什么什么之间的数据
      SELECT * from blk ORDER BY money desc;
      #order by xxx desc,根据哪个字段继续排序,默认是升序,
      降序是desc,升序asc
      SELECT * from blk a where a.addr = '' or a.addr is null; #查询数据为空
      SELECT DISTINCT a.money from blk a ;#去重
      SELECT COUNT(*) 学生人数 from blk where sex='女'; #统计行数
      SELECT MAX(a.money) 钱最多 from blk a; #最大值
      SELECT min(money) 钱最少 from blk;#最小值
      SELECT AVG(a.money) 平均多少钱 from blk a; #平均数
      SELECT sum(a.money) 总共多少钱 from blk a;#总和
      SELECT sex 性别,count(*) 人数 from blk GROUP BY sex; #分组
      SELECT
      sex 性别,
      count(*) 人数,
      a.stu_name 名字

      FROM
      blk a
      WHERE
      a.money > 300
      GROUP BY
      a.id
      HAVING
      a.stu_name LIKE '姚%';
      #如果group by后面有条件的话,必须得用having子句,having子句里面用到的字段必须出现在select后面,如果group by和order by一起用的话,order by必须写在  group by后面

      SELECT *,COUNT(*) from blk GROUP BY sex,class; #多个字段进行分组

      SELECT id,stu_name from blk UNION SELECT id,t_name from teacher;
      #用来合并两条select语句的结果,两条select语句字段数量要一致,并且数据类型也要一致
      union和union all的区别就是一个会去重一个不会

    多表关联:
      SELECT
      *
      FROM
      USER a,
      accounts b
      WHERE
      a.id = b.user_id
      AND a.username = 'niuhy';
      -- SELECT * from blk a ,score b where a.id=b.s_id; -- 多表关联
      -- 两个表里面都存在的数据查出来
      SELECT * from blk a LEFT JOIN score b on a.id=b.s_id;
      -- LEFT JOIN会把左边表所有的数据都查出来,右边表有匹配的就查出来
      SELECT * from blk a RIGHT JOIN score b on a.id=b.s_id;
      -- RIGHT JOIN会把右边表所有的数据都查出来,左边表有匹配的就查出来
      SELECT * from blk a inner JOIN score b on a.id=b.s_id;
      -- INNER JOIN两边表里都匹配的数据才查到


    子查询:
      把一条sql的结果,作为另一条sql的条件
      SELECT * from score a where a.s_id = (SELECT id from blk where stu_name='阿翔');

      把子查询当成一个表
      SELECT
      a.grade 成绩,
      b.stu_name 学生名称,
      b.id 学号
      FROM
      score a,
      (
      SELECT
      id,
      stu_name
      FROM
      blk
      WHERE
      stu_name = '阿翔'
      ) b
      WHERE
      a.s_id = b.id;


    数据库权限:
      mysql数据的权限实质上都是在user表里控制的
      1、grant
      #所有的权限 所有数据库下面的所有表 用户 用户ip
      grant all on *.* to 'andashu'@'localhost' IDENTIFIED BY '123456' with grant option;
      密码 #有执行grant语句的权限
      grant all on *.* to 'andashu'@'%' IDENTIFIED BY '123456' with grant option;
      取消授权:
      Revoke select on *.* from dba@localhost;
      Revoke all on *.* from andashu@localhost;

      2、修改user表的数据
      对user表进行增加、修改和删除
      flush privileges;#刷新权限
      备份数据库:
      mysqldump -uroot -p123456 db > db.sql
      mysqldump -uroot -p123456 -A > all.sql
      恢复数据:
      mysql -uroot -p123456 db < db.sql


    存储过程:
      批量的造数据
      delimiter $$; #为了改结束符
      CREATE PROCEDURE big_data1(num int)#代表要造多少条数据 100
      BEGIN
      DECLARE i int;
      set i=0;
      WHILE i<num do
      insert into blk (stu_name,money) VALUES (CONCAT('宋灏志',i),20000);
      #CONCAT的作用是连接不同类型的数据
      #把字符串和数字拼接到一起
      set i=i+1;
      end WHILE;
      End
      $$;
      delimiter;

      call big_data1(500); #调用

  • 相关阅读:
    多层动态库的编译及使用
    gxx -L和/etc/ld.so.conf的理解
    cmake 创建并调用动态库和静态库
    cifX驱动安装及SYCON.net的使用
    企业号新手指引
    转:Python正则表达式指南
    Windows平台安装Beautiful Soup
    微信企业号、订阅号、服务号之间有什么区别和不同
    常见HTTP状态(304,200等)
    微信内置浏览器对于html5的支持
  • 原文地址:https://www.cnblogs.com/lqcjlu/p/6259726.html
Copyright © 2011-2022 走看看