mysql基本知识

Posted Hhhighway

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql基本知识相关的知识,希望对你有一定的参考价值。

mysql数据类型

  • 数值

    • 整形

      int tinyint

    • 浮点型

      float double

      表示的精度不同

      float 6位有效,double 16

  • decimal 浮点型,用来更加精确的保存小数

  • 字符串

    • char: 255个字符, 固定大小
    • varchar: 65535 字节,不固定(可变)
    • text: 64Kb
  • 枚举

    • enum() 1-2个字节存储数据
    • enum("值1","值2",.....)
  • 时间

    • date 年月日
    • datetime 年月日 时分秒
    • time 时分秒

数据库的操作

  -- 退出数据库
    exit
    quit 
    ctrl + d
  
  -- 查看当前使用的数据库
    select database();
  
  -- 查看当前使用的数据库
    select database();
    
  -- 指定编码的数据库创建
    create database python_db1 charset=utf8;

   -- 查看创建数据库的语句
   -- show create database ....
    show create database python_db;
    
   -- 删除数据库
   -- drop database 数据库名;
    drop database python_db;

SQL命令-表结构的创建

 -- 创建 classes 表(id、name)
    create table classes(
        id int unsigned primary key auto_increment,
        name varchar(10) not null,
        num tinyint

        );
   -- 查看表结构
    -- desc 数据表的名字;
    desc classes;
   
   -- 查看表的创建语句
    -- show create table 表名字;
    show create table students;

SQL命令-表结构的修改

 -- 修改表-添加字段 生日 datatime
    -- alter table 表名 add 列名 类型;
    alter table students add birthday datetime;

    -- 修改表-修改字段:不重命名版
    -- alter table 表名 modify 列名 类型及约束;
    alter table students modify birth date not null;

    -- 修改表-修改字段:重命名版
    -- alter table 表名 change 原名 新名 类型及约束;
    alter table students change birthday birth datetime;

    -- 修改表-删除字段
    -- alter table 表名 drop 列名;
    alter table students drop birth;

    -- 删除表
    -- drop table 表名;
    drop table students;

SQL命令-表数据的增删改查

-- 全列插入
-- insert [into] 表名 values(...)
-- 主键字段 可以用 0  null   default 来占位
 -- 向classes表中插入 一个班级
 insert into classes values(1, ‘python20‘, 70);
 
 -- 部分插入
 -- insert into 表名(列1,...) values(值1,...)
  insert into students(id, name) values(null, ‘司马狗剩‘);

-- 多行插入
        insert into students values(null, ‘欧阳铁娃‘, 18, 1.78, ‘妖‘, 1),(null, ‘诸葛铁锤‘, 18, 1.78, ‘妖‘, 1);

  -- 修改
  -- update 表名 set 列1=值1,列2=值2... where 条件;
   -- 全部修改
   update students set age = 38;
   
    -- 按条件修改
    update students set age = 88 where name = ‘司马狗剩‘;
    -- 查询基本使用
    -- 查询所有列
    -- select * from 表名;
     select * from students;
     
     ---定条件查询
    select * from students where name=‘司马狗剩‘;

     -- 查询指定列
     -- select 列1,列2,... from 表名;
        select id,name from students;

      -- 可以使用as为列或表指定别名
      -- select 字段[as 别名] , 字段[as 别名] from 数据表;
      select id as ‘编号‘, name as ‘姓名‘ from students;

      -- 删除
      -- 物理删除
      -- delete from 表名 where 条件
      delete from students where id = 2;

        -- 逻辑删除
        -- 用一个字段来表示 这条信息是否已经不能再使用了
        -- 给students表添加一个 is_delete 字段 bit 类型  默认为0
        alter table students add is_delete bit default 0;
        -- bit 类型,智能保存 0 或者 1
        -- is_delete = 1  逻辑删除  
        update students set is_delete = 1 where id = 3;
	
	-- 数据库备份与恢复(了解)
		-- mysqldump –uroot –p 数据库名 > python.sql;
		-- mysql -uroot –p 新数据库名 < python.sql;

where

  • 比较运算

    > 、< 、>=、<=、=、!=或<>

select * from where age <> 18 ;   # 所有年龄不等于18岁的学生
  • 逻辑运算

    and、or、not

  • 模糊查询(like)

    % 表示任意0个或多个

    _ 任意一个字符

    -- 查询姓名中 有 "小" 所有的名字
    select * from students where name like ‘%小%‘;
    
    -- 查询有2个字的名字
    select * from students where name like ‘__‘;
    
    -- 查询至少有2个字的名字
    select * from students where name like ‘__%‘;
    
  • 范围查询

    in 用于非连续的范围的查询,相等于 多个值的 or (或) 关系

    between 起始 and 终值 连续,包含起始值和终值,是一种 and(与) 关系

    -- in (1, 3, 8)表示在一个非连续的范围内
    -- 查询 年龄为18、34的姓名
    select name from students where age in (18,34)
    
    -- between ... and ...表示在一个连续的范围内
    -- 查询 年龄在18到34之间的的信息
    select * from students where age between 18 and 34;
    
  • 空值判断

    is null 表示判断值为空

    is not null 判断值非空, 错误写法:not is null

  • order排序

    order by 排序字段1 排序规则, 字段2 规则2,.....
    -- asc从小到大排列,即升序(默认排序规则)
    -- desc从大到小排序,即降序

    -- 查询年龄在18到34岁之间的女性,身高从高到矮排序
    select * from students where age between 18 and 34 and gender=‘女‘ order by height desc;
    

聚合函数

聚合函数:聚合函数会对当前所在表当做一个组进行统计

常见的聚合函数:

count(*) 统计数量

max(字段) 找出该字段的最大值

min(字段) 找出该字段的最小值

sum(字段) 对该字段求和

avg(字段) 对该字段求平均值

四舍五入的函数: round(数值,保留的小数位数)

   ```mysql

-- 计算班级学生的总数
select count() from students;
select count(
) ‘总人数‘ from students;

-- 查询女性的最高 身高
select max(height) from students where gender=‘女‘;

-- 计算男性的平均身高 保留2位小数
select round(avg(height),2) from students where gender = ‘男‘;
```

group分组

group by + 聚合函数,分组统计/计算

group by + group_concat() 分组 + 内容链接为一个字符串

group by + with rollup 分组 + 小计

  • having和where的区别:

    1. 作用的对象不同。where子句作用于表和视图,having 子句作用于组。

    2. having可以用聚合函数 ,where不能。因为where 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算), 而 having在分组和聚集之后选取分组的行。因此,WHERE 子句不能包含聚集函数 。

    如:having sum(qty)>1000 (正确) where sum(qty)>1000 (错误)

	-- group by
	-- 按照性别分组,查询所有的性别
	select gender from students group by gender;
	
	-- 注意下面这种查询会失败
	select name,gender from students group by gender;
	
	-- 计算每个年龄中的人数
	select age, count(*)  from students group by age;
	
	-- 查询同种性别中的姓名
	select gender, group_concat(name) from students group by gender;
	
	-- 查询平均年龄超过30岁的性别=
    select gender, avg(age) from students group by gender having avg(age) > 30;
    
    -- with rollup 汇总的作用(了解)
	select gender, count(*) from students group by gender with rollup;

limit限制记录

  • limit 数据有很多,只取指定数量的数据
    • 表中的数据,位置默认从 0 开始
  • limit 使用格式: limit 起始位置, 连续取的数目;
  • limit 一定要写到 SQL 语句的最后面
-- 检索记录行 6-15
select * from table limit 5,10;

注:标准的SQL书写格式

select 字段1,字段2,...
from  表名
[where 条件]
[group by 字段名]
[order by 字段名 排序规则]
[having 条件]
[limit 起始位置,数量]

连接

  • 内连接:查询的结果为两个表匹配到的数据,默认是笛卡尔积
    • 关键字 inner join
    • select 字段 from 表1 inner join 表2 where/on 表1.字段 = 表2.字段
  • 外连接
    • 左外连接 主表 left join 从表
      • 左外连接另外一个表,在从表中没有找到匹配,右侧补 NULL
    • 右外连接 从表 right join 主表
      • 右外连接一个表,在从表中没有找到匹配,左侧补 NULL
-- 查询 有能够对应班级的学生以及班级信息
	select * from students inner join classes where students.cls_id = classes.id;

-- 给数据表起名字
	select s.name, c.name  from students s inner join classes c where s.cls_id = c.id;

-- 内连接的另外一种写法
     select s.name, c.name  from students s, classes c where s.cls_id = c.id;
 
 -- 查询没有对应班级信息的学生
	select students.*  from students left join classes on students.cls_id = classes.id where classes.id is null;

以上是关于mysql基本知识的主要内容,如果未能解决你的问题,请参考以下文章

android小知识点代码片段

从mysql的片段中加载ListView

c_cpp Robolution基本代码片段

连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段

使用 json rereiver php mysql 在片段中填充列表视图

html PHP代码片段: - AJAX基本示例:此代码演示了使用PHP和JavaScript实现的基本AJAX功能。