Mysql
mysql就是开放源码的关系数据库管理系统
数据库就是按照数据结构来组织,存储和管理数据的仓库
数据库管理系统:操作和管理数据库的大型软件,用于建立、使用和维护数据库
关系型数据库:关系型数据库使用表来保存数据,使用表和表之间的关系来处理数据 还为数据的安全性、完整性、并发控制和数据恢复提供了保证。
关系型数据库的术语
关系: 一张二维表,每个关系必须有一个关系名,也就是俗称的表名
字段/属性:二维表中的一列
记录/元祖:二维表中的一行
超键(super key):在关系中能唯一标识元祖的属性集称为关系模式的超键
候选键(candidate key):不含有多余属性的超键
主键(primary key):用户选作元祖标标识一个候选键
外键:用于关联两张表
范式:符合某一级别的关系模式的集合,构造数据库的表必须遵循一定的规则
在学习或复习下面的知识点的时候,默认已安装了MySQL,如果没有安装的请参照下面这篇文章进行安装,MySQL的安装还是比较麻烦的,但是并不难。
1.1.入门语句
连接MySQL : 在cmd(管理员身份)下 运行: mysql -uroot -p 然后输入密码 ,即可进入MySQL
退出mysql语句: exit
1.2 当我们连接上服务器时,首先面对的是库,库有一个或者多个,可以使用 show databases; 查看我们有哪一些库,没有的话,可以创建数据库,
创建数据库语句: create database 数据库名 charset 字符集; 字符集建议使用 utf8。有了数据库,我们便可以对数据库进行操作了,首先选库,
选库语句: use 库名; 删除数据库: drop database 数据库名; (慎用,笑)
这里面我之前创建了几个库玩。
这里新创建了一个数据库demo01
这里删除了数据库sys
对于数据库来说,我们可不可以给数据库改名呢,答案是不可以的,所以你在创建数据库的时候命名时候要注意一些。但是表是可以改名的。
1.3 简单的表操作
建表语句,创建一个叫做stu的表,首先你要先选库,才能建表
建表语句的主体就是 create table 表名( ......)engine myisam charset utf8;
其中engine是表引擎,和性能相关,括号中的就是属性,下面会细讲
修改表,向表内增加新的属性
alter table 表名
add 列
建表完毕后,我们可以给表进行改名操作
rename table 旧名 to 新名;
显示数据库中存在多少表 show tables;
向表内插入数据,下面是一个简单的示例,插入了三条数据
insert into 表名 values (key,value),(key,value),......,(key,value);
当然增删改查的增操作肯定不可能如上边这条语句一样死板,还有许多变化,下面会讲
下面查看我们向这张表中填充的所有数据,使用select语句
select * from 表名; *是指所有数据的意思
清空表数据: truncate 表名;
删除表: drop table 表名;
truncate相当于删除表再重建一张同样结构的表,操作后得到一张全新的表
delete是从删除数据行的层面进行操作
2.1乱码问题
命令行(cmd)使用的是GBK字符集,而我们数据库存放的是utf8,所以要告诉服务器,客户端使用GBK编码 set names gbk;
2.2 增删改查(这是针对表来说的)
首先创建一个薪资表 sex:性别 salary:薪资 fanbu :饭补
varchar(), char(), decimal(), smallint()这些都是数据类型,下面会讲
not_null表示非空,default'' 表示设置默认值
查看一下表的结构
desc 表名;
增
insert into 表名(...........向哪一些属性添加数据..........) values (.....),(.......),......,(.......);
例如:
insert into xinzi(id,name,sex,company,salary,fanbu) values (1,"张三",'男', '百度', 8000.00,200);
下面向表中添加一些数据
查
select * from xinzi; 查看所有行所有列
查看某一行的所有属性或部分属性
查看所有行的部分属性
改操作
示例
update xinzi
set
name = ‘张飞’,
company = '蜀中集团'
where id = 2;
删 这里的删并不是删除数据表,而是删除整行数据
delete from 表名 where ..;
至此,一个表的最简单的增删改查就已经学习过了
下面是对建表时的知识点 列类型的学习 , 重点是学习列类型的 存储范围 和 占据的字节关系
3.1 整型
tinyint 占据空间 1个字节 即8位 0-65535
samllint 2个字节
mediuint 3个字节
int 4个字节
bigint 8个字节
3.2 浮点数型
float(m,d)
decimal(m,d)
m代表总位数,d代表小数点后的位数
3.3 字符串类型
char 如char(6) 表示定长字符串
varchar 如 varchar(20) 表示变长字符串
text 文本类型 可以存储大的文本段 text 不用加 默认值
blob 是二进制类型,用来存储图像,音频,视频等二进制信息 (对于图像,视频如何以二进制保存,可以去B站或其他地方去看一下科普视频,简直是太有趣了)
3.4 时间类型
date 日期 格式: YYYY-MM-DD
time 时间 格式: HH-MM-SS
datetime 日期时间 格式 YYYY-MM-DD HH-MM-SS
year 年份类型 格式: YYYY
timestamp 自动取系统当前时间
4 重新补充一下对于表的属性的增删改查
4.1 增
alter table 表名
add 列名称 列类型 列参数
下面创建一个teacher表,包含属性姓名,年龄属性,现在向其新增一个课程属性
4.2 删
alter table 表名 drop 列名;
4.3 改
alter table 表名
change 旧列名 新列名 新属性 新参数
5 查 select 的5种字句
5.1 where :条件查询
where常用的运算符
在某集合内: >= = != in
在某范围内: between
逻辑非: not 或 ! 逻辑或: or 或 || 逻辑与: and或&&
这里要介绍一个方法,模糊查询 , 这里假设我们有一个商品表,表内有一个属性叫做商品名称goods_name,要求查询所有华为开头的商品。
select 列名
from 表名
where goods_name like '华为%';
其中,%能匹配任何的字符 _匹配单一字符
5.2 group by 分组
group by 的常用用法是配合聚合函数 max() min() sum() avg() count()
test: 创建一个班级表,查询出班级中的成绩最高者
(1)创建一个表,列属性有姓名,班级,成绩
(2) 然后向其添加一些数据
(3)查询各班成绩最好的学生
5.3 having 筛选
还是定义一个学生表,内含属性name chinese(语文成绩) math(数学成绩) (english)英语成绩
然后向其添加一些数据,查询出总分大于200的 学生
5.4 order by 排序
order by desc; 降序
order by asc; 升序
上面的学生表,按语文成绩的升序排序
5.5 limit 限制条数
向上面的查询只查后面语文成绩最低的两名