MySql学习(一)…(⊙_⊙;)…

1.数据库的介绍

数据存储的方法分为内存,文件和数据库
在这里插入图片描述
1.1什么是数据库

  1. 存储数据的仓库
  2. 本质上是一个文件系统,还是以文件的方式存在服务器的电脑上的。
  3. 所有的关系型数据库都可以使用通用的 SQL 语句进行管理 DBMS DataBase Management System

常见数据库
在这里插入图片描述

MySql 数据库
MySQL 是一个需要账户名密码登录的数据库,登陆后使用,它提供了一个默认的 root 账号,使用安装时设置的密码即可登录。

mysql -u 用户名 -p 密码;

退出MySql

quit 或 exit

1.2 数据库的组成

⚫ 数据库管理系统:数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据 库 的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和 完整性,用户通过数据库管理系统访问数据库中表内的数据。
⚫ 所谓数据库服务器:是指在机器上装了一个数据库管理程序,这个管理程序可以管理多个数据库,一般开 发人员会针对每一个应用创建一个数据库。
⚫ 表:为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。
在这里插入图片描述

2.数据库设计

2.1 建模过程
⚫ 需求分析阶段:分析客户的业务和数据处理需求 与该系统有关人员进行交流、座谈, 充分了解用户需求,理解数据库需要完成的任务
⚫ 概要设计阶段:设计数据库的 E-R 模型图,确认需求信息的正确和完整
✓ 标识实体 (Entity)
◼ 标识数据库要管理的关键对象或实体,实体一般是名词
✓ 标识每个实体的属性(Attribute)
✓ 标识实体之间的关系(Relationship)
⚫ 详细设计阶段:应用三大范式审核数据库结构
⚫ 代码编写阶段:物理实现数据库,编码实现应用

2.2 范式
仅有好的 RDBMS 并不足以避免数据冗余,必须在数据库的设计中创建好的表结构,Dr E.F.codd 最初定义了规 范化的三个级别,范式是具有最小冗余的表结构。 这些范式是:
• 第一范式(1st NF -First Normal Form) 第一范式的目标是确保每列的原子性,如果每列都是不可再分的最小 数据单元(也称为最小的原子单元), 则满足第一范式(1NF)。

• 第二范式(2nd NF-Second Normal Form) 如果一个关系满足 1NF,并且除了主键以外的其他列,都依赖于该主键,则满足第二范式(2NF) ,第二范
式要求每个表只描述一件事情。

• 第三范式(3rd NF- Third Normal Form) 如果一个关系满足 2NF,并且除了主键以外的其他列都不传递依赖于主键列,则满足第三范式(3NF) 练习 假设某建筑公司要设计一个数据库。公司的业务规则概括说明如下:
⚫ 公司承担多个工程项目,每一项工程有:工程号、工程名称、施工人员等
⚫ 公司有多名职工,每一名职工有:职工号、姓名、性别、职务(工程师、技术员)等
⚫ 公司按照工时和小时工资率支付工资,小时工资率由职工的职务决定(例如,技术员的小时工资率 与工程 师不同) 绘制 ER 图,及设计表结构

2.3 Sql语句
1.什么是 SQL? Structured Query Language:结构化查询语言 其实就是定义了操作所有关系型数据库的规则。每一种数据库操 作的方式存在不一样的地方,称为“方言”。
2. SQL 通用语法 1. SQL 语句可以单行或多行书写,以分号结尾。 2. 可使用空格和缩进来增强语句的可读性。 3. MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。 4. 3 种注释 * 单行注释: – 注释内容 或 # 注释内容(mysql 特有) * 多行注释: /* 注释 */
3. SQL 分类

  1. DDL(Data Definition Language)数据定义语言 用来定义数据库对象:数据库, 表,列等。关键字:create, drop,alter 等
  2. DML(Data Manipulation Language)数据操作语言 用来对数据库中表的数据 进行增删改。关键字:insert, delete, update 等
  3. DQL(Data Query Language)数据查询语言 用来查询数据库中表 的记录(数据)。关键字:select, where 等
  4. DCL(Data Control Language)数据控制语言(了解) 用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE 等

3.管理数据库

3.1 查看所有数据库

mysql> show databases; 

3.2 创建数据库
1)创建数据库,并指定默认字符集,指定默认的校验规则

mysql>create datebase 数据库名 default character set utf8 collate utf8_general_ci;

2)查看数据库的状态(默认字符串)

mysql>show create database 数据库名;

3.3 删除数据库

mysql>drop database 数据库名;

3.4 修改数据库
修改数据库默认字符集

mysql>alter database 数据库名 default character set 字符集;

3.5 使用数据库

mysql>use 数据库名;

显示正在使用的数据库

mysql>select DATABASE();

3.6 数据约束
用户操作表的数据进行约束,包括默认值,非空,唯一,主键,自增长,外键
⚫ 默认值:用户对使用默认值的字段不插入值的时候,就使用默认值

create table 表名(
	列名 数据类型 default 默认值
);

⚫ 非空: 限制字段必须赋值

create table 表名(
	列名 数据类型 not null
);

⚫ 唯一:对字段的值不能重复

create table 表名(
	列名 数据类型 unique
);

⚫ 主键:非空+唯 一 注意:
1)通常情况下,每值表都会设置一个主键字段。用于标记表中的每条记录的唯一性。
2)建议不要选择表的包含业务含义的字段作为主键,建议给每值表独立设计一个非业务含义的 id 字段。

create table 表名(
	列名 数据类型 primary key
);

⚫ 自增长:自动递增
自增长,从0开始
zerofill 零填充

create table 表名(
	列名 int(4) zerofill primary key auto_increment
);

⚫ 外键:约束两种表的数据

-- 主表
create table 主表(
	列名1 数据类型 primary key,
	列名2 数据类型 varchar(20)
);

-- 副表
create table 副表(
	列名1 数据类型 primary key,
	列名2 数据类型 primary key,
	constraint 外键名字 foreign key(列名【外键】) references 主表(主键)
);

注意:
1)被约束的表称为副表,约束别人的表称为主表,外键设置在副表上的!!!
2)主表的参考字段通用为主键!
3)添加数据: 先添加主表,再添加副表
4)修改数据: 先修改副表,再修改主表
5)删除数据: 先删除副表,再删除主表

⚫ 级联操作
问题: 当有了外键约束的时候,必须先修改或删除副表中的所有关联数据,才能修改或删除主表,但是,我们 希望直接修改或删除主表数据,从而影响副表数据。可以使用级联操作实现。
级联修改: on update cascade
级联删除: on delete cascade

4.管理表

4.1 查询所有表
查看数据库中的所有表

mysql>show tables;

4.2 创建表

mysql>create table 表名(
	字段名称1 字段类型 primary key,
	字段名称2 字段类型
);

mysql 主要包括以下五大类:

整数类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT
浮点数类型:FLOAT、DOUBLE、DECIMAL
字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB
日期类型:Date、DateTime、TimeStamp、Time、Year
其他数据类型:BINARY、VARBINARY、ENUM、SET、Geometry、Point、MultiPoint、LineString、 MultiLineString、Polygon、GeometryCollection 等

4.3 查看表结构

mysql>desc;

4.4删除表

mysql>drop table 表名;

4.5 修改表
1)添加字段

mysql>alter table 表名 add column 字段名 类型;
mysql>alter table 表名 add 字段名1 类型,add 字段名2 类型;
  1. 修改字段类型
mysql>alter table 表名 modify column 列名 类型;
  1. 修改字段名称
mysql>alter table 表名 change column 列名 新列名 数据类型;

4)删除字段

mysql>alter table 表名 drop column 列名;

5)修改表名

mysql>alter table 表名 rename to 新表名;

5.数据操作

1)查看表的数据

mysql>select * from 表名;
  1. 插入数据
    插入所有列(所有列的值都要按顺序依次插入)
mysql>insert into 表名 values(1,2);
  1. 插入部分列(列的数据和值的顺序和数量一定保持一致)
mysql>insert into 表名(列名1,列名2,列名3)values(1,2,3);
  1. 修改数据
mysql>update 表名 set 列名=,列名1=1,列名2=2;

5)删除数据

mysql>delete from 表名;

注意:
只能删除表中的数据,不能影响表中的自增长约束
使用 delete 删除的数据,通过事务可以回滚。
后面带条件

6)删除所有数据

mysql>truncate table 表名;

注意:
1)既能删除表的数据,也能够把表的子增长约束置为 0
2)使用 truncate 删除的数据,不能回滚!
3)后面不能带条件

6 查询数据

6.1 查询所有列

select * from 表名;

6.2 查询指定列

select1,2 from 表名;

6.3 查询时指定别名

select 列名 as '别名',列名 as '别名' from 表名;
-- as 可以省略
select 列名  '别名',列名  '别名' from 表名;

6.4 查询去除重复数据

select distinct 列名 from 表名;

6.5 条件查询

1)逻辑条件:andorselect * from 表名 where 列名1=1 and 列名2=2;
select * from 表名 where 列名1=1 or 列名2=2;
2)比较条件:>	<	>=	<=	=	between...and
select * from 表名 where 别名>;
select * from 表名 where 别名<;
select * from 表名 where 别名<or 别名=;
select * from 表名 where 别名>=and 别名<=;
select * from 表名 where 别名 between1 and2;	-- 包前包后
3)判空条件:=" is null <>" is not null
update 表名 set 列名 ="" where 列名=;
update 表名 set 列名=null where 列名=;
-- null  和 空字符串的区别: 
-- null: 没有数据。 判断 null: is null,判断不为 null: is not null
--  空字符: 有数据,数据就是空字符串。判断空字符: =''; 判断不为空字符串: <>'' 
select * from 表名 whereis null;
select * from 表名 where='';
4)模糊条件:like
-- like 后面跟上符合 
-- %:  表示任意多个字符(0-多个) 
-- _:  表示一个字符
select * from 表名 where 列名 like '值%';
select * from 表名 where 列名 like '%值%';
select * from 表名 where 列名 like '值_';

6.6 聚合查询

select sum() from 表名;
select avg() from 表名;
select max() from 表名;
select min() from 表名;
select count(*) from 表名;
select count() from 表名; -- 效率比count(*)稍高
-- 注意:聚合函数,会排出null值的数据

6.7 分组查询

select count(*) from 表名 group by 列名;

6.8 分组筛选

select count(*) from 表名 group by 列名 having count(*)>;

6.9 多表查询

内连接查询:只有满足条件的结果才会显示
select 列名1,列名2
	from1,2
	where1.=2.-- 表与表之间的连接条件
-- 内连接的另一种语法
select 列名1,列名2
	from1
	inner join2
	on1.=2.列
	
左连接查询:使用左边表的数据去匹配右边表的数据,如果符合连接条件的结果则显示,如果不符合连接条件则显示null
-- (注意:左连接:左表数据一定会完全显示!)
select 列名1,列名2
	from1
	left join2
	on1.=2.列
右连接查询:使用右边表的数据去匹配左边表的数据,如果符合连接条件的结果则显示,如果不符合连接条件则显示null
-- (注意:右连接:右表数据一定会完全显示!)
select 列名1,列名2
	from1
	right join2
	on1.=2.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
主要包含最基础的数据库语句,很适合初学者,目标使用企业管理器创建数据库表设置表的主键、外键和建立表之间的关系为表增加约束数据完整性 数据完整性 数据存放在表中 “数据完整性的问题大多是由于设计引起的” 创建表的时候,就应当保证以后数据输入是正确的 ——错误的数据、不符合要求的数据不允许输入完整性包括… 输入的类型是否正确? ——年龄必须是数字输入的格式是否正确? ——身份证码必须是18位是否在允许的范围内? ——性别只能是”男”或者”女” 是否存在重复输入? ——学员信息输入了两次是否符合其他特定要求? ——信誉值大于5的用户才能够加入会员列表 …… 完整性包括… 实体完整性域完整性引用完整性自定义完整性表操作创建数据库表 SQL Server的数据类型思考创建数据库表思考创建数据库表思考选择主键的原则创建数据库表思考创建数据库表创建数据库表关系图主表和从表创建数据库表-7 创建数据库表完毕!导入-导出数据总结 SQL Server创建表的过程饰淦麈定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性、引用完整性和域完整性等)保证的过程实体完整性数据行不能存在重复,引用完整性要求子表中的相关项必须在主表中存在域完整性实现了对输入到特定列的数值的限制 SQL Server中存在五种约束,分别是:主键约束、外键约束、检查约束、默认约束和唯一性约束(唯一性约束将在后续课程中使用SQL语句实现)总结创建数据库表需要:确定表的列名、数据类型、是否允许为空,还需要确定主键、必要的默认值、标识列和检查约束如果建立了主表和子表的关系,则: ——子表中的相关项目的数据,在主表中必须存在; ——主表中相关项的数据更改了,则子表对应的数据项也应当随之 更改; ——在删除子表之前,不能够删除主表;回顾SQL Server的约束约束的目的:确保表中数据的完整型常用的约束类型:主键约束(Primary Key Constraint):要求主键列数据唯一,并且不允许为空唯一约束(Unique Constraint):要求该列唯一,允许为空,但只能出现一个空值。检查约束(Check Constraint):某列取值范围限制、格式限制等,如有关年龄的约束默认约束(Default Constraint):某列的默认值,如我们的男性学员较多,性别默认为“男” 外键约束(Foreign Key Constraint):用于两表间建立关系,需要指定引用主表的那列添加约束 添加约束的语法:添加约束示例添加约束示例删除约束如果错误地添加了约束,我们还可以删除约束 删除约束的语法第二部分 数据库的设计课程目标了解设计数据库的基本步骤熟练使用T-SQL实现建库、建表、加约束掌握T-SQL编程,实现功能强大的查询掌握创建索引、视图,快速访问数据库 掌握创建存储过程,实现复杂的业务规则理解触发器的原理,实现高级的约束目标了解设计数据库的步骤掌握如何绘制数据库的E-R图理解数据库的规范化-三大范式为什么需要设计数据库 2-1 为什么需要设计数据库 2-2 软件项目开发周期需求分析阶段:分析客户的业务和数据处理需求; 概要设计阶段:设计数据库的E-R模型图,确认需求信息 的正确和完整; 详细设计阶段:将E-R图转换为多张表,进行逻辑设计, 并应用数据库设计的三大范式进行审核; 代码编写阶段:选择具体数据库进行物理实现,并编写 代码实现前端应用; 软件测试阶段:…… 安装部署:…… 设计数据库的步骤4-1 收集信息: 与该系统有关人员进行交流、坐谈,充分理解数据库需要完成的任务 设计数据库的步骤4-2 标识对象(实体-Entity) 标识数据库要管理的关键对象或实体 设计数据库的步骤4-3 设计数据库的步骤4-4 标识对象之间的关系(Relationship) 绘制E-R图 4-1 E-R(Entity-Relationship)实体关系图 绘制E-R图 4-2 绘制E-R图 4-3 映射基数绘制E-R图如何将E-R图转换为表 3-1 如何将E-R图转换为表 3-2 如何将E-R图转换为表数据规范化 仅有好的RDBMS并不足以避免数据冗余,必须在数据库的设计中创建好的表结构 Dr E.F.codd 最初定义了规范化的三个级别,范式是具有最小冗余的表结构。这些范式是:第一范式(1st NF -First Normal Fromate) 第二范式(2nd NF-Second Normal Fromate) 第三范式(3rd NF- Third Normal Fromate) 第一范式 (1st NF) 第二范式 (2nd NF) 第三范式 (3rd NF) 规范化实例 5-1 假设某建筑公司要设计一个数据库。公司的业务规则概括说明如下:公司承担多个工程项目,每一项工程有:工程工程名称、施工人员等公司有多名职工,每一名职工有:职工、姓名、性别、职务(工程师、技术员)等公司按照工时和小时工资率支付工资,小时工资率由职工的职务决定(例如,技术员的小时工资率与工程师不同)公司定期制定一个工资报表,如图-1所示规范化实例 5-2 规范化实例 5-3 规范化实例 5-4 1.表中包含大量的冗余,可能会导致数据异常:更新异常 例如,修改职工=1001的职务,则必须修改所有职工=1001的行添加异常 若要增加一个新的职工时,首先必须给这名职工分配一个工程。或者为了添加一名新职工的数据,先给这名职工分配一个虚拟的工程。(因为主关键字不能为空)删除异常 例如,1001职工要辞职,则必须删除所有职工=1001的数据行。这样的删除操作,很可能丢失了其它有用的数据规范化实例 5-5 2.采用这种方法设计表的结构,虽然很容易产生工资报表,但是每当一名职工分配一个工程时,都要重复输入大量的数据。这种重复的输入操作,很可能导致数据的不一致性。 应用范式规范化设计应用第二范式规范化应用第三范式规范化规范化和性能的关系 总结 2-1 在需求分析阶段,设计数据库的一般步骤为:收集信息标识对象标识每个对象的属性标识对象之间的关系在概要设计阶段和详细设计阶段,设计数据库的步骤为:绘制E-R图将E-R图转换为表格应用三大范式规范化表格总结 2-2 为了设计结构良好的数据库,需要遵守一些专门的规则,称为数据库的设计范式 。第一范式(1NF)的目标:确保每列的原子性。第二范式(2NF)的目标:确保表中的每列,都和主键相关 第三范式(3NF)的目标:确保每列都和主键列直接相关,而不是间接相关 第三部分 常用的SQL语法及技巧查询-单表查询 SELECT <选择列表> FROM [[<数据库名>.]<模式名>.]<基表名> | <视图名> <相关名> [
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值