MySQL - 学习笔记

1、安装

1.1 终端连接

  > 基本命令

  	打开终端:win + r ,输入 cmd ,敲回车
   	window 系统中盘符切换:直接输入盘符 -> d:  并回车
       
  > 连接 数据库

  	mysql -u 用户名 -p

2、数据库认识

2.1 数据库分类

  > 关系型数据库(mysql)

  > 非关系型数据库(mongodb、redis)

2.2 理解关系型数据库

  > 可以类比Excel表格。

关系型数据库中三种关系:

  一对一关系
  一对多关系
  多对多关系

2.3 SQL 的认识

什么是 SQL?

  一种用于管理关系型数据库、与数据库中的数据进行通讯的计算机标准语言。

语言组成:

  数据定义语言(DDL)
  数据查询语言(DQL)
  数据操作语言(DML)
  数据控制语言(DCL)

DBMS(数据库管理系统):

  数据库组成部分,主要完成对数据库的操作与管理。

3、MySQL

3.1 创建数据库

  	create database 数据库名;

3.2 创建表

  CREATE TABLE `students` (
  	`student_id` int(11) NOT NULL AUTO_INCREMENT,
  	`student_name` varchar(20) NOT NULL COMMENT '学生姓名',
  	PRIMARY KEY (`student_id`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

3.3 数据类型

整数类型

  tinyint -- 1字节
  int -- 4字节
  bigint -- 8字节

浮点数类型

  float(m,d) -- 小数,4字节,单精度
  double(m, d)  --  8字节,双精度
  decimal(m, d) 

字符类型

  char -- 固定长度(0~255)
  varchar -- 可变长度(0~65535)
  text -- 长文字

日期格式:

  date -- yyyy-mm-dd
  datetime -- yyyy-mm-dd hh:mm:ss
  time -- hh:mm:ss
  timestamp 时间戳

4、增删改操作

4.1 新增数据

  insert into 表名 values (列1值,列2值);

  INSERT INTO students VALUES (NULL,'李四');

  insert into 表名 (列1, 列2) values (列1值,列2值); -- 指定列添加数据

  INSERT INTO students(student_name) VALUES ('王五');

  insert into 表名 values (列1值,列2值),(列1值,列2值) -- 同时添加多条数据

  INSERT INTO students(student_name) VALUES ('麻子'),('刚娃子');

4.2 修改数据

  update 表名 set 列名1=新值, 列名2=新值 where 条件;

  -- 如果更新的时候不写条件,将会更细所有的数据
  	UPDATE students SET student_name='李雷';

  -- 更新指定条件
  	UPDATE students SET student_name='韩梅梅' WHERE student_id=3;

4.3 删除数据

  delete from 表名 where 条件;

   DELETE FROM students WHERE student_id=6;

  -- 不加条件,全删
  	DELETE FROM students;

  -- 删除所有数据,标识列恢复默认值 (彻底删除 无法恢复)
  	TRUNCATE TABLE students;

5、数据完整性

5.1 实体完整性

主键:一般是当前表的 id

  PRIMARY KEY 

唯一性

  unique

  CREATE TABLE `students` (
  	`student_id` int(11),
  	`student_name` varchar(20) unique, // 设置 unique后 名字就不能出现重复的数据
  	PRIMARY KEY (`student_id`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

5.2 域完整性

非空约束

  `student_name` varchar(20) NOT NULL COMMENT '学生姓名',

默认值

  `sex` tinyint(1) DEFAULT '1' COMMENT '1-男 2-女',

5.3 自定义完整性

  `student_id` int(11) NOT NULL AUTO_INCREMENT,

5.4 引用完整性

  外键约束:表达表和表之间的关系
  	-- 第一步:创建主表(外键要连接的表,即 班级表)

  	-- 第二步:创建从表(发生依赖关系的表,即需要设置外键的表,即 学生表)

  	CONSTRAINT `students_ibfk_1` FOREIGN KEY (`grades_id`) > REFERENCES `grades`(`grades_id`)

6、数据查询

6.1 基本语法

  	select * | 列名
  	from 表名
  	[where 条件]
  	[group by 分组名]
  	[having 筛选条件]
  	[order by 排序]
  	[limit 限制结果数量]

6.2 查询操作的分类

  投影操作:指定查询的结果中能显示哪些列;

  选择操作:指定哪些行出现在结果中;

  排序操作:指定查询的结果以什么样的顺序显示

6.3 查询

6.3.1 – 简单查询

  SELECT * FROM students;

6.3.2 – 选择某些列进行投影

  SELECT student_name,age FROM students;

6.3.3 – 别名设置

  SELECT student_name AS studentName,age FROM students;

简写:

  SELECT student_name studentName,age FROM students;

6.3.4 where 查询

单条件

  = > < >=

  SELECT student_name,age FROM students WHERE age>8;

多条件

  and or

  SELECT student_name,age FROM students WHERE age>8 AND sex=1;

  SELECT student_name,age FROM students WHERE age BETWEEN 10 AND 16;

范围

  between ... and ... / in / not in

  SELECT student_name,age FROM students WHERE grades_id NOT IN (2,4);

模糊查询

  like

规则:

%:任意长度任意字符

_:任意单个字符

  -- 找姓李
  	SELECT student_name,age FROM students WHERE student_name LIKE '李%';

  -- 找王XX
  	SELECT student_name,age FROM students WHERE student_name LIKE '王__';

  -- 带 四 这个字的  '%四%'
  	SELECT student_name,age FROM students WHERE student_name LIKE '%王%';

  -- 查询电话号码不为空
  	-- is null
  	-- is not null

  	SELECT student_name,age FROM students WHERE tel IS NOT NULL;

6.4 排序

  -- 默认升序 asc
  	SELECT * FROM students ORDER BY age;

  -- desc 降序
  	SELECT * FROM students ORDER BY age DESC;

6.5 限制

  limit 开始位置,指定行数
  开始位置是从 0 开始的

  SELECT * FROM students LIMIT 2,2;

6.6 聚合函数

查询中经常会对数据进行统计,就需要用到聚合函数。

 

注意:
返回的是单行单列;
不能和普通列一起查询。

  -- 求数量:count()
  	SELECT COUNT(*) FROM students;

  -- 求男生的数量
  	SELECT COUNT(*) FROM students WHERE sex=1;

  -- 查询 age 非空的学生数量
  	SELECT COUNT(age) FROM students;

  -- 统计 grades_id 没有重复的数量
  	SELECT COUNT(DISTINCT grades_id) FROM students;

  -- 求平均值:avg
  -- 不会计算空值
  	SELECT AVG(age) FROM students;

  -- ifnull(字段, 指定值)
  	SELECT AVG(IFNULL(age, 0)) FROM students;

  -- 别名设置
  	SELECT AVG(IFNULL(age, 0)) studentAvg FROM students;

  -- 求最大值:max
  	SELECT MAX(age) FROM students;

  -- 求最小值:min
  	SELECT MIN(age) FROM students;

  -- 求和:sum
  	SELECT SUM(age) FROM students;

7、 分组查询

将表中的行进行分组,然后在每隔分组上应用聚合函数。

  -- 每个班级有多少人
  	SELECT grades_id,COUNT(*) FROM students GROUP BY grades_id;

  -- 每个班级最老的年龄
  	SELECT grades_id,MAX(age) FROM students GROUP BY grades_id;

  -- 统计各个班级男女各多少人
  	SELECT grades_id,sex,COUNT(*) FROM students GROUP BY grades_id,sex;

  -- 分组统计各个年级的男生人数大于1的
  	SELECT grades_id,sex,COUNT(*) 
  	FROM students 
  	WHERE sex=1 -- 发生在聚合之前
  	GROUP BY grades_id,sex
  	HAVING COUNT(*)>1; -- having 是对聚合之后的数据进行筛选

  -- 分组统计各个年级的男生人数大于1的,并且按人数进行升序排列
  	SELECT grades_id,sex,COUNT(*) num
  	FROM students 
  	WHERE sex=1
  	GROUP BY grades_id,sex
  	HAVING num>1
  	ORDER BY num;

  -- 分组统计各个年级的男生人数大于1的,并且按人数进行升序排列,然后分页显示
  	SELECT grades_id,sex,COUNT(*) num
  	FROM students 
  	WHERE sex=1
  	GROUP BY grades_id,sex
  	HAVING num>1
  	ORDER BY num
  	LIMIT 0,1;

  -- 需求:返回学生 王五 的 班级名字
  	SELECT grades_id 
  	FROM students 
  	WHERE student_name='王五';

  -- 子查询
  	SELECT * FROM grades 
  	WHERE grades_id=(SELECT grades_id FROM students 
  	WHERE student_name='王五');

  -- 表联接
  	SELECT * FROM students
  	JOIN grades
  	ON students.grades_id=grades.grades_id
  	WHERE students.student_name='王五'

相关文章


在这里插入图片描述

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只 小网虫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值