MySQL

数据库

database

table

每个库中可以包含多张表, 必须在库中建表

每个表中,一行数据,称为 记录

每一列数据,称为字段, 每个字段都有自己的类型

数据库本质是一种文件, 有一种专门的工具软件帮助管理数据库,

这种软件被称为RDBMS(关系型数据库管理系统)

关系型数据库: MYSQL、 Oracle 、MS SQL server、sqlite3

  • MySQL(免费)、Oracle(商业版) 属于同一个公司(Oracle)
  • MS SQL server 针对Windows平台,属于微软
  • Sqlite3 用在 嵌入式设备中, 如 手机、平板等

关系型数据库所用的语言都是 SQL语言

非关系型数据库

MongoDB

Redis:内存型数据库,一般用来做缓存

库操作

  1. 创建数据库

    create database school charset=utf8;  # 创建数据库school, 指定编码方式为utf8, 防止中文乱码
    
  2. 查看数据库

    show databases;
    
  3. 删除数据库

    drop database 库名;  
    
  4. 入库

    use 库名;
    

单表结构操作

  1. 建表
    IDnameagegenderis_vip
    1小红23true
    2小绿20false
    3小黑22true
    create table users(
      	# 字段名   字段类型  字段属性
        id int unsigned primary key auto_increment,
        name varchar(10) not null,
        age int unsigned,
        gender enum("男", "女") default "男",
        is_vip bool default false
        )charset=utf8;
    
  2. 查看当前库的所有表
    show tables;
    
  3. 查看表结构
    desc  students; # 查看表students的结构
    
  4. 删除表
    drop table 表名; 
    
  5. 简单查询
    SELECT * FROM student;
    
    # 指定 查询结果有哪些字段
    SELECT NAME,age FROM student;
    
    • 起别名
      我们可以给 字段 或者 表 起别名,使用as语句
      当然 as是可以省略的
    SELECT NAME 姓名,age 年龄 FROM student;
    
    SELECT NAME AS 姓名,age AS 年龄 FROM student;
    
    • 去重(DISTINCT)
      对查询的结果去重,如果有完全一样的 就去掉重复的
    SELECT DISTINCT NAME FROM student;
    
    • 聚合函数

      SELECT COUNT(*) 总计 FROM student

      聚合函数 是对结果进行操作

      sum:求和

      count:统计记录数

      max:求最大值

      min:求最小值

      avg:求平均值

字段类型
  • 数字
    • 整数
      • int: 整数, 0 -1 1
      • int unsigned:无符号整数, 0 1 2 3 4
      • bit: 只能存01, 代表真或假
      • bool,实际是 tinyint(1), 插入 true, 实际就是1, 插入 false, 实际就是0
    • 小数
      • float: 一般的浮点数
      • decimal(n,m): 存金钱有关的数字, 总共n位数字, m位小数, 正或负都可以
  • 字符串
    • varchar(n): 创建大小为n的变长字符串, 如 varchar(10), 只存"hello", 剩余空间可以被别人使用
    • char(10): 创建大小为n定长字符串,如 char(10), 只存"hello", 剩余空间用空格补够10个长度
  • 枚举
    • enum(A, B):在列举的所有情况中,选择一个, 如 enum("男", "女")
  • 时间
    • date :年月日, 如 2020-8-13
    • time: 时分秒, 如 13:54:00
    • datetime: 年月日 时分秒, 如 20202-8-13 13:55:30
字段属性
  • 主键: 唯一标识一条记录,primary key
  • 自增:auto_increment, 一般都是对主键自增
  • 非空:not null
  • 默认:default
  • 唯一:unique
  • 外键:foreign key

唯一约束 与 主键

  • 两者都不能重复
  • 主键不能为空, 唯一约束可以为空

一对多表结构操作

分类表

IDcate_name
1手机
2电脑
3家居

商品表

idgoods_namePriceCate_id
1Apple Iphone 115899.001
2联想 小新 Air144599.002
3荣耀 4Tpro1489.001
-- 创建分类表, 先创建被关联的表
create table cate(
    id int unsigned primary key auto_increment,
    cate_name varchar(10) not null
);

-- 创建商品表, 后创建关联表
create table goods(
    id int unsigned primary key auto_increment,
    goods_name varchar(128) not null,
    price decimal(6,2),
    cate_id int unsigned,
    foreign key(cate_id) references cate(id) -- 外键关联: 外键 需要关联 另一表的主键, 强制约束
);
数据操作
  • 插入数据(insert into
insert into cate values(0, "手机");  -- 插入表中所有字段的数据,只有主键中插入0,代表自增
insert into cate values(0, "电脑");
insert into cate values(0, "家居");
insert into cate values(0, "家具"),(0, "厨具"),(0, "餐具");
-- 指定字段插入
insert into goods(goods_name, price, cate_id) values("Apple Iphone 11",5899.00,1);
insert into goods(goods_name, price, cate_id) values("联想 小新 Air14",4599.00,2),("荣耀 4Tpro", 1489.00, 1);
  • 查询数据(select
select * from cate; -- * 代表所有字段
select * from goods;
  • 删除数据(delete
delete from goods where id=3;  -- 删除id为3的记录
  • 修改数据(update
update cate set cate_name='家具' where id=3;
条件查询
比较运算符
-- 等于=、大于>、小于<、不等于!=、大于等于>=、小于等于<=
select * from goods where price > 2000; -- 查询价格大于2000的商品
select * from goods where id>=3;   -- 查询id不小于3的商品信息

select * from goods where price < 2000; -- 查询价格小于2000的商品
select * from goods where id<=3;   -- 查询id不大于3的商品信息

select * from goods where id=2; -- 查询id为2的商品信息
select * from goods where id!=2; -- 查询id不为2的商品信息
select * from goods where id<>2; -- 查询id不为2的商品信息
逻辑运算符
select * from goods where price>2000  and id>=2; -- 查询价格大于2000 且 id不小于2 的商品信息
select name, price from goods where id=1 or id=3; -- 查询id为1 或 id为3 的商品名称和价格
范围查询
-- 查询id在5到50之间的商品信息
select * from goods where id>=5 and id<=50; -- 使用比较运算符 (and)并且
-- 连续范围、一段数据   可以使用 between ... and ...表示在一个连续的范围内 
select * from goods where id between 5 and 50; -- 用来判断连续的范围
-- 查询id为1 或3 或 5 的商品信息
select * from goods where id=1 or id=3 or id=5; -- 使用比较运算符 (or)或者
-- 类似于枚举,列举出具体的值    in 表达式  表示 是否在这些选项中
select * from goods where id in (1,3,5);  -- 用来判断不连续的范围
NULL判断
-- 注意:null与''是不同的
-- 判空is null
select * from goods where price is null; -- 查询价格为空的商品信息
select * from goods where price is not null; -- 查询价格不为空的商品信息
 
select * from goods where goods_name=""; -- 判断是有内容,只不过内容为空字符串
模糊查询
-- %任意个任意字符
select * from goods where goods_name like "%电脑%"; -- 查询名称含有“电脑”的商品信息
select * from goods where goods_name like "电脑%"-- 查询名称以"电脑"开头的商品信息
select * from goods where goods_name like "%电脑"-- 查询名称以"电脑"结尾的商品信息

-- _一个任意字符
select * from person where name like "李_"; -- 查询姓李且名为1个字的 人的信息
排序
select * from goods order by price; -- 默认升序排序
select * from goods order by price asc; -- asc确定升序

select * from goods order by price desc; -- desc 降序排序

 select * from goods order by price desc, id desc; -- 多个字段排序,先按照前面的字段排序;只有前面字段值相等,才会按照下一个字段排序
分页
-- 查询一条语句,从 哪里offset开始查  查几条num
select  * from 表名 limit  offset,num;
-- 省略offset写法
select * from goods limit 0,10; -- 代表每页10条数据,第1页
select * from goods limit 10,10; -- 代表每页10条数据,第2页
select * from goods limit 20,10; -- 代表每页10条数据,第3页

select * from goods limit (n-1)*m, m; -- n代表第几页,m代表每页多少条数据
select * from goods limit 10 offset 0; -- 代表每页10条数据,第1页
select * from goods limit 10 offset 10; -- 代表每页10条数据,第2页
select * from goods limit 10 offset 20; -- 代表每页10条数据,第3页

select * from goods limit m offset (n-1)*m; -- n代表第几页,m代表每页多少条数据
分组

我们使用分组可以做一些集合类的相关业务

-- 对应第一张表

-- 统计出 每个年龄的 学生数
SELECT COUNT(NAME),age FROM student GROUP BY age;
-- 查看 每个年龄的具体姓名
SELECT GROUP_CONCAT(NAME),age FROM student GROUP BY age;
  • 分组中使用 having

    having 条件表达式:用来过滤分组结果。

    having作用和where类似,但having只能用于group by 而where是用来过滤表数据

-- 筛选出 年龄 大于30的记录
SELECT GROUP_CONCAT(NAME),age  FROM student GROUP  BY  age HAVING age>30;

从分组结果中 在筛选出 年龄 大于30的记录

子查询

在一个 select 语句中,嵌入了另外一个 select 语句, 那么被嵌入的 select 语句称之为子查询语句

外部那个select语句则称为主查询。

子查询 先执行,查询的结果 作为 主查询的条件

-- 条件平均年龄
SELECT * FROM student WHERE age > (SELECT AVG(age) FROM student);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值