MySql数据库入门
标签搜索
侧边栏壁纸
  • 累计撰写 19 篇文章
  • 累计收到 1 条评论

MySql数据库入门

bai1hao
2024-07-21 / 0 评论 / 27 阅读 / 正在检测是否收录...

数据库

dos命令

查询所有服务
sc query
查询指定服务 eg: mysql80
sc query mysql80
高级查询(查询更多信息,如:PID)
sc queryex mysql80
查询如二进制路径之类的信息
sc qc mysql80
查询网络状态
netstat -ano
查询当前运行的任务列表
tasklist | findstr "mysqld"
查询mysql的网络状态 PID 见sc queryex
netstat -aon | findstr "[PID]"

mysqld 表示数据库服务

MySql

\! [dos命令] 在mysql里面调用系统命令
desc [表名] 查询表格结构
select * from [表名] 查询表信息
更改发送信息的列名
select id as 编号 from employees;
计数
select count(*) from employees;

函数

最大值
select max(列名) from 表名
最小值
select min(列名) from 表名
平均值
select avg(列名) from 表名
保留两位小数
select round(avg(列名),2) from 表名
统计不重复的值
select distinct 列名 from 表名
拼接
concat(salary,'元')

条件

select * from employees where birth_data>'1949-12-31' order by birth_data

show columns from [表名] 和desc [表名] 类似

分组

select gender,count(*) from emps group by gender;

逐级分组

select department,gender,count(*) from emps group by department,gender;

以年份分组

select year(birth_date) as birth_year,count(*) from emps group by birth_year;

以同年代分组(floor()向下取整求年代数,concat()拼接,\转义字符,as birth_year 用 birth_year 当表头)

select concat(floor(year(birth_date)/10)10,'\'s') as birth_year,count() fromm emps group by birth_year

limit分页

跳过第20条拿10条
select * from emps limit 10 offset 20
(简写,参数位置相反)
select * from emps limit 20,10

join使用

交集(可省略inner)

select * from cities inner join guests on cities.id=guests.from_city_id;

交集+左侧剩余数据

select * from cities left outer join guests on cities.id=guests.from_city_id;

交集+右侧剩余数据

select * from cities right outer join guests on cities.id=guests.from_city_id;

并集(mysql没有outer join, 将 left,right join union 即可得并集)

select * from cities left outer join guests on cities.id=guests.from_city_id
union
select * from cities right outer join guests on cities.id=guests.from_city_id;

用truncate 删除表的所有数据
TRUNCATE TABLE

having

筛选总薪资大于500000的分组
select distinct education,sum(salary) from employees group by education having sum(salary)>500000;

serial

bigint unsigned auto_increment

数据库设计模范化

(1)修改异常(Modication)

表一

编号姓名部门部门电话
1王娟人事0871-12345677
2李强人事0871-12345677
2张三公关0871-12345677

修改李强的电话信息后
表二

编号姓名部门部门电话
1王娟人事0871-12345677
2李强人事0871-12345689
2张三公关0871-12345677

人事部门的数据出现了不一致(Inconsistence),这就是修改异常

(2)删除异常(Deletion)

从表一删除张三
表三

编号姓名部门部门电话
1王娟人事0871-12345677
2李强人事0871-12345689

部门公关信息丢失

(3)插入异常(Insertion)

新员工未定部门,无法插入(假定信息必须完整)

模范化数据库设计

业界标准
第一范式(1NF)
第二范式(2NF)
第三范式(3NF)
BC范式
第四范式(4NF)
第五范式(5NF)

三个基本范式

第一范式(1NF)

1.数据列的数据类型必须一致

2.数据要有原子性(atomic)

指信息不能再细分,是相对的,与业务需求有关,如果业务需求需要将姓氏名字分开处理,则姓名作为一个数据就不够原子性
修正:将姓名拆分成姓氏名字

3.一个表的单元格不能出现重复数据

编号姓名电话
1王娟0871-12345677,0871-123452312

修正:
联系人信息

编号姓名
1李娜

联系电话

联系人编号电话
10871-12345677
1871-123452312

出现了联系人编号参照编号的情况

4.不能出现同性质的表格列

编号姓名课程1成绩1课程2成绩2课程3成绩3
1王娟html100css100js100

几个成绩和几个课程就是同性质的表格列

修正:
学生信息

编号姓名
1王娟

成绩

学生编号课程成绩
1html100

5.必须有一列或几列数据的组合将表格行区分开

姓名性别电话
李强18575896321
李强17563548596

李强不知道是不是同一个人
修正:
添加一列或多列组合在业务上能够将记录分开的数据

姓名身份证号性别电话
李强53011120025687962318575896321
李强53011120050612589317563548596

在业务上能够将每行记录区分开的一列或多列组合被称为(可做主键primary key的)候选键(candiadte key)

候选键:
: 在业务上,他们的数据具有唯一性要求

主键
: 可被其他表参照的候选键

有候选键的情况下,为方便数据处理,我们有时会添加一个具有唯一值的"人工候选键"

第二范式

1.满足第一范式

2.所有候选键列都依赖于全部候选键

员工编号姓名出生日期项目编号项目名称工时
1王娟2002-06-011产品设计26
2李四2002-05-052产品推广30
1王娟2002-06-012产品推广10

姓名 取决于 员工编号
项目名称 取决于 项目编号
候选键应该是员工编号项目编号的组合
除了工时外,其余列出现了部分依赖

修正
员工信息表

员工编号姓名出生日期
1王娟2002-06-01
2李四2002-05-05

项目信息

项目编号项目名称
1产品设计
2产品推广

工时

员工编号部门编号工时
1126
2230

第三范式

1.满足第二范式

2.所有非候选键列都直接依赖于候选键列

消除传递依赖

员工编号姓名城市省份国家
1李强昆明云南中国
2LinawashiontonD.CUSA

国家依赖于省份
省份依赖于城市
来自城市依赖于员工编号
因此,所有列都依赖于全部候选键列,但出现了非直接依赖——传递依赖
修正:
员工信息

员工编号姓名来自城市编号
1李强1
2Lina2

城市信息

城市编号名称省份国家
1昆明云南中国
2WashiontonD.CUSA

总结

1.不要在一张表中描述多个事物
2.要有主键
3.数据的原子性由业务决定
4.拆分的多种表具有参照关系

实体(Entity)

实体,是一张表所表述的业务对象
每个实体应该有一个主键(primary key)
如果一个实体需要参照其他实体,则需要有一个外键(Foreign Key),用于参照那个实体的主键。与主键对应的外键,在数据类型上必须严格与主键一致

实体关系

实体间由业务类型决定了他们之间的关系

1.一对一关系

一个实体对应着另一个实体,他们之间有主外键参照。一对一关系通常用于拆分一个实体的多个方面
eg. 一名员工,对应着一个银行账户(用于公司发放工资)。一对一的设计,要求外键具有唯一性

2.一对多关系

有主外键参照关系,
eg. 一名顾客的多个邮寄地址
分两类,一类是紧密的关系(组合,composition),另一类是松散的(聚合,aggregation)

紧密关系:一方被删除,多方无存在意义
松散关系:一方被删除,多方仍存在

3.多对多关系

A 对应多个 B
B 也对应多个 A
无法用主外键建立,但可拆分为两个多对多关系

数据库设计过程

1.实体及其关系的识别

通过描述,找到设计的事物名词,从中找到实体并确立他们之间的关系

2.确定实体的属性

确定原子性的列,列名,数据类型

3.确定数据约束

确定数据约束如唯一性不可空

4.绘制实体关系图(entity-relation,e-r图)

er图能从整体上看到实体间的关系

5.建立数据字典

是建立数据表及例程的依据

举例

例一:
一对多
客户 和 邮递信息

客户属性
编号
: 用于区分客户(候选键列),字符串或整数

姓名
: 姓名,字符串,必填

电话
: 电话,字符串,必填

邮递信息的属性
编号
: 用于区分每个记录,主键。


: 字符串,必填

市(县)
: 字符串,必填

详细地址
: 字符串,必填

0

评论

博主关闭了所有页面的评论