MySQL基础

数据库的基本概念

1. 数据库的英文单词:DataBase 简称 : DB
2. 什么是数据库?
	*用于存储和管理数据的仓库。

3. 数据库的特点
	1. 持久化存储数据的。其实数据库就是一个文件系统
	2. 方便存储和管理数据
	3. 使用了统一的方式操作数据库 --SQL

4.常见的数据库软件
	*Oracle
	*MySQL
	*SqlServer
	*DB2

MySQL

1. 安装
2. 卸载
3. 配置
	*MySQL服务启动
		1. 手动
		2. cmd-->service.msc 打开服务窗口
		3. 使用管理员打开cmd
			*net start mysql : 启动mysql服务
			*net stop mysql : 停止mysql服务
	*mysql登录
		1. mysql -uroot -p密码
		2. mysql -hip -uroot -p连接目标的密码
		3. mysql --host=ip --user=root --password=连接目标的密码
	*mysql退出
		1. exit
		2. quit
		
	*MySQL目录结构
		1. 安装目录
			*配置文件 my.oni
		2. 数据目录
			*几个概念
				*数据库:文件夹
				*表:文件
				*数据:数据

SQL

1. 什么是SQL?
	Structured Query Language : 结构化查询语言
	就是定义了操作所有关系型数据库的规则。每一种数据库的操作方式存在不一样的地方,称为“方言”
2. SQL通用语法
	1. 可以单行多行书写,分号结尾。
	2. 使用空格和缩进提高可读性
	3. SQL语句不区分大小写,建议关键字建议使用大写
	4. 三种注释
		* 单行注释: --注释内容 或 #注释内容(MySQL 特有)
		* 多行注释: /*注释内容*/
3. SQL 语句分类
	1)数据定义语言DDL(Data Ddefinition Language)
		CREATE,DROP,ALTER
		对逻辑结构等有操作的,其中包括表结构,视图和索引
	2)数据查询语言DQL(Data Query Language)
		SELECT
		查询操作,以select关键字。各种简单查询,连接查询等 都属于DQL。
	3)数据操纵语言DML(Data Manipulation Language)
		INSERT,UPDATE,DELETE
		对数据进行操作的,对应上面所说的查询操作 DQL与DML共同构建了
		多数初级程序员常用的增删改查操作。而查询是较为特殊的一种 被划分到DQL中。
	4)数据控制功能DCL(Data Control Language)
		GRANT,REVOKE,COMMIT,ROLLBACK
		对数据库安全性完整性等有操作的,可以简单的理解为权限控制等。 

DDL:操作数据库、表

1. 操作数据库:CRUD
	1. C(create):创建
		*create database 数据库名称;
		*创建数据库,判断不存在再创建
			*create database if not exists 数据库名称;
		*创建数据库并制定字符集
			*create database 数据库名称 character set 字符集名;
		*创建db1数据库,判断是否存在,并制定字符集为gbk
			*create database if not exists db1 character set gbk;
	2. R(retrieve):查询
		* 查询所有数据库的名称
			*show databases;
		*查看某个数据库的字符集
			*show create database 数据库名称;
	3. U(update):修改
		*修改数据库的字符集
			*alter database 数据库名称 character set 字符集名;
	4. D(delete):删除
		*drop database 数据库名称;
		*删除数据库,判断存在再删除
			*drop database if exists 数据库名称;
	5. 使用数据库
		*查询当前正在使用的数据库名称
			*select database();
		*使用数据库
			*use 数据库名称;
2. 操作表
	1. C(create):创建
		1. 语法
			create table 表名(
			列名1 数据类型1,
			列名2 数据类型2,
			...
			列名n 数据类型n
			);
			*注意:最后一列不需要加逗号
		2. 数据库类型(最常用的)
			*int() :整数
			*char():定长字符串
			*varchar():变长字符串
				*name varchar(20):姓名最大20个字符
					张三 2个字符  zhangsan 8个字符
			*float:单精度浮点数
			*double:双精度浮点数
			*date:日期,只包含年月日,yyyy-mm-dd
			*datetime:时间日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss
			*timestamp:时间错类型 包含年月日时分秒 yyyy-MM-dd HH:mm:ss
				如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值

		*创建表
		create table student(
			id int,
			name varchar(32),
			age int,
			score double(4,1),
			birthday date,
			insert_time timestamp
			);
	2. R(retrieve):查询
		*查询某个数据库中所有表的名称
			*show tables;
		*查看表结构
			*desc 表名;
	3. U(update):修改
		1. 修改表名
			alter table 表名 rename to 新的表名;
		2. 修改表的字符集
			alter table 表名 character set 字符集名称;
		3. 添加一列
			alter table 表名 add 列名 数据类型;
		4. 修改列名称 类型
			alter table 表名 change 列名  新列名 新数据类型;
			alter table 表名 modify 列名  新数据类型;
		5. 删除列
			alter table 表名 drop 列名;
	4. D(delete):删除
		*drop table 表名;
		*drop table if exists 表名;

DML:增删改表中数据

1. 添加数据
	*语法:
		*insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
	*注意:
		1. 列名和值一一对应。
		2. 如果表名后不定义列名,则默认给所有列添加值
			*insert into 表名 values(值1,值2,...值n);
		3. 除了数字类型,其他的类型要用引号'' 或 ""
2. 删除数据
	*语法
		*delete from 表名 [where 条件]
	*注意:
		1. 如果不加条件,则会删除表中所有数据
		2. 如果要删除所有记录,不推荐使用。有多少条记录就会执行多少次,效率低
		3. 建议使用 truncate table 表名   先删除表并创建一个一模一样的表,效率更高
3. 修改数据
	*语法
		*update 表名 set 列名1=值1,列名2=值2,...[where 条件];
	*注意:
		1. 如果不加条件,则会修改表中所有数据

DQL查询语句

1. 排序查询
	*语法:order by 子句
		*order by 排序字段1 排序方式1, 排序字段2 排序方式2...
	*排序方式
		*ASC:升序,默认的
		*DESC:降序
	*注意:如果有多个排序条件,则当前面的条件一样时,才会判断第二个条件
		*例:若按照数学成绩排名,如果数学成绩一样,则按英语成绩排名
			SELECT * FROM student ORDER BY math ASC , english DESC;		
2. 聚合函数:将一列数据作为一个整体,进行纵向计算
	1. count:计算个数
		1. 一般选择非空的列:主键
		2. count(*);
	2. max/min:计算最大值/最小值
	3. sum:计算和
	4. avg:计算平均值
	*注意:聚合函数的计算会排除null值
		解决方案:
			1. 选择不包含非空的列进行计算
			2. IFNULL函数
3. 分组查询
	1. 语法:GROUP BY 分组字段;
	2. 注意:
		1. 分组之后查询的字段:分组字段、聚合函数
		2. where 和 having 的区别
			1. where 在分组之前进行限定,如果不满足条件,则不参与分组。
			2. having在分组之后进行限定,如果不满足结果,则不会被查出来
			3. where后不可以跟聚合函数,having可以进行聚合函数的判断。
	*练习:按照性别分组,分别查询男、女同学的平均分,人数要求:
	分数低于70分的人,不参与分组,分组之后,人数要大于两个人。
		SELECT sex,AVG(math),COUNT(id) FROM student WHERE 
		math>70 GROUP BY sex HAVING COUNT(id)>2
4. 分页查询
	1. 语法: limit 开始的索引,每页查询的条数;
	2. 公式:开始的索引 = (当前的页码 - 1 ) * 每页显示的条数
		每页显示3条记录
		SELECT * FROM student LIMIT 0,3;  第一页		
		SELECT * FROM student LIMIT 3,3;  第二页
		SELECT * FROM student LIMIT 6,3;  第三页
	3. 分页操作是一个MySQL“方言”

DQL:查询表中记录

*select * from 表名;
1. 语法:
	select
		字段列表
	from
		表名列表
	where
		条件列表
	group by
		分组字段
	having
		分组之后的条件
	order by
		拍戏
	limit
		分页
2. 基础查询
	1. 多个字段的查询
		*select 字段名1, 字段名2,...from 表名;
		*注意:如果查询所有字段,则可以用*来代替字段列表
	2. 去除重复
		*dintinct
	3. 计算列
		*一般可以使用四则运算法则计算一些列的值。(一般只会进行数值型的计算)
		*ifnull(表达式1,表达式2):null参与1运算,计算结果都为null
			*表达式1:哪个字段需要判断是否为null
			*表达式2:如果该字段为null后的替换值
	4. 起别名
		*as:as也可以省略
3. 条件查询
	1. where子句后跟条件
	2. 运算符
		*比较运算符
		 =   是否相等
		 <    小于
		 >    大于
		 <=   小于等于
		 >=  大于等于
		 <>  !=  不等于
		*BETEEN...AND
			SELECT * from result WHERE StudentResult >=60 and StudentResult<=80;--解决这类问题
			SELECT * from result WHERE StudentResult BETWEEN 60 and 80; -- 等效
		*is null  判断值是否为null
		*逻辑运算符
		 and &&   逻辑与
		 or ||     或者
		 not  !     取反
		*is not null 
		 in 
			*SELECT * from result where SubjectId in(1,2,3,4,5);
		 not in
			*SELECT * from result where SubjectId not in(1,2,3);-- 除1 2 3之外所有的科目
		 模糊查询like
			*--% 表示0-n个字符
				SELECT * from student where StudentName like '张%';-- 所有姓张的同学
				SELECT * from student where Email like '%yahoo%';  -- 含有yhoo的邮箱
			*-- '_'表示任意一个字符
				SELECT * from student where StudentName LIKE '张_';-- 姓张的名字为两个字的同学
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值