MySQL 安装和基础语法 第一节

本文介绍了MySQL数据库的基础知识,包括其简介、安装、优点。详细讲解了数据库和表的操作,如创建、删除、修改及查询。还涉及SQL语言的使用,如增删改查、排序和别名。此外,讨论了数据库的三范式,以及提供了相关练习题及其解答。内容适合初学者了解和掌握MySQL。
摘要由CSDN通过智能技术生成

MySql数据库基础

MySql 简介和安装

1.MySql简介

	我们每天都在访问各种网站、APP,如微信、QQ、抖音、今日头条、腾讯新闻等,这些东西上面都存在大量的信息,这些信息都需要有地方存储,一般都是存储在数据库中。
    
	所以如果我们需要开发一个网站、app,数据库我们必须掌握的技术。常用的数据库有 mysql、 oracle、sqlserver、db2 等。上面介绍的几个数据库,oracle性能排名第一,服务也是相当到位的,但是收费也是非常高的,金融公司对数据库稳定性要求比较高,一般会选择 oracle。
	
	每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。
SQL:(结构化查询语言):是一种定义、操作、管理关系数据库的句法。大多数关系型数据库都支持。结构化查询语言的工业标准由 ANSI (美国国家标准学会,ISO 的成员之一)维护。世界著名数据库厂商如 Oracle、MySQL 都遵循 SQL 规范,只是在各家设计数据库时为了性能更好,相同功能的 SQL 有一些小小的区别。

	MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL的优点:
    Mysql 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
    MySQL 使用标准的 SQL 数据语言形式。
    Mysql 可以允许于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、			Eiffel、Ruby 和 Tcl 等。
    Mysql 对 PHP 有很好的支持,PHP 是目前最流行的 Web 开发语言。
    MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最		  大的表文件为 8TB。
    Mysql 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 Mysql 系统。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BpOyjv0T-1635603599180)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211030100654650.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QiMc7TmY-1635603599186)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211030100805764.png)]

2.MySql安装

搜索 phpStudy V8.1 ,下载大约 78m 左右:下载网址

管理数据库的常用工具:Navicat、SQLYog、Idea、HeidiSQL等等

phpStudy 可以随时升级和更换 mysql 版本,安装其他常用插件。而且 phpStudy 对于数据库的移植,备份,启动,操作等等都特别方便。

安装完 phpStudy 后会在 D 盘解压一个文件夹 ,将来如果有需要可以直接考走

MySQL 的默认账户与密码分别是

 root  root

启动数据库后,在左侧导航栏数据库中点击操作可以修改数据库密码。

phpStudy 默认自带一个好用的 MySQL 管理工具 HeidiSQL,不用安装 SQLyog 或 Navicat 数据库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8Kn5eTnq-1635603599188)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211030101704535.png)]

点击管理,输入基本信息即可连接数据库。

当然也可以使用 SQLyog 管理数据库:SQLyog下载

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HRbJIhl7-1635603599194)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211030101805047.png)]

使用 idea 连接 MySQL

MySQL数据库和表的操作

1.数据库操作

数据库作为数据表存储的基本单位,即一个数据库存储一张和多张表,同一个数据库中数据表可以关联查询。

一般的,在实际开发中每个项目都会使用独立的一个数据库,一个项目也不建议连接多个数据库。

在 SQL 窗口输入命令并点击执行,会创建一个名字叫 mydb 的数据库··

CREATE DATABASE mydb;

当再次执行时会报错,数据库 mydb 已经存在(

错误代码:1007
Can't create database 'mydb';database exists

删除数据库

DROP DATABASE mydb;

使用数据库

USE mydb;

在Windows窗口查看效果
在这里插入图片描述

2.表操作

数据库中每列数据的标识叫字段,表操作一般就是针对字段的操作。创建表时一般会有一个或多个字段,它们之间用逗号隔开。数据库中最常用的两种字段类型为 int 和 char 分别用于存储整数和字符串类型的数据,char 类型后需要指定存储的字符个数。

CREATE TABLE mytb (
    id INT,
    name CHAR(5)
);

创建完表后常用的就是字段的增删改操作,下面 SQL 演示如何操作字段

desc 表名 可以查询表结构

#删除字段
ALTER TABLE mytb  DROP id; 
#增加字段
ALTER TABLE mytb  ADD ids INT;  
#添加一个字段在最前面
ALTER TABLE mytb  ADD id INT FIRST; 
#增加一个字段在 name 后
ALTER TABLE mytb  ADD sex INT AFTER name; 
#修改 name 字段的长度为 10
ALTER TABLE mytb MODIFY name CHAR(10);
#修改 ids 字段的属性为 long 不为空默认值为 100
ALTER TABLE mytb MODIFY ids BIGINT NOT NULL DEFAULT 100;

修改表名为mytable

ALTER TABLE mytb RENAME TO mytable;

删除表mytable

DROP TABLE mytable

删除表有drop,truncate,delete三种操作,它们的区别如下:

drop:删除表数据和表结构

DROP TABLE user;

truncate:保留表结构,删除数据,释放空间

TRUNCATE TABLE user;

delete:保留表结构,删除数据,释放空间

DELETE FROM user;

三种的执行速度,一般来说:drop>truncate>delete

释放空间可以体现在:

1.通过 delete 删除的行数据是不释放空间的,如果表 id 是递增式的话,那么表数据的 id 就可能不是连续的;而通过 truncate 删除数据是释放空间的,如果表 id 是递增式的话,新增数据的 id 又是从头开始,而不是在已删数据的最大 id 值上递增。

2.使用 delete 删除数据时,mysql 并没有把数据文件删除,而是将数据文件的标识位删除,没有整理文件,因此不会彻底释放空间。被删除的数据将会被保存在一个链接清单中,当有新数据写入的时候,mysql 会利用这些已删除的空间再写入。即,删除操作会带来一些数据碎片,正是这些碎片在占用硬盘空间

MySQL 数据库的增删改查

1.增加记录

数据库的每条数据通常称为一条记录,记录的常用操作通常就是增删改查,往数据表中插入记录使用以下语法:

INSERT INTO table [(字段名 [, 字段名...])]
VALUES		(value [, value...]);
!注意:

(1)插入的数据应于字段的数据类型相同
(2)数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。
(3)在values中列出的数据位置必须与被加入的列的排列位置相对应。字符和日期型数据应包含在单引号中
(4)插入空值,不指定或insert into table value(null)即可插入空值

示例:

INSERT INTO `emp` (`name`,`sal`) VALUES ('张三',10000.5);

2.修改记录

修改数据表中记录使用如下语法:

UPDATE table_name SET 字段名1=expr1 [, 字段名2=expr2 ...] [WHERE where_definition]
!注意:
(1)UPDATE语法可以用新值更新原有表行中的各列
(2)SET子句指示要修改那些列和要给予哪些值
(3)WHERE子句指定应更新哪些行。若没有WHERE子句,则更新的是所有的行
 注意:如果在数据修改时,该表的全部字段相同,修改命令发送时会导致多条数据被修改。同时 SQLYog 会弹窗。所以为了避免这种问题数据库各大厂商提出数据库三大范式作为约束。

示例:

UPDATE emp SET `name` ='李四'
UPDATE emp SET `name`='王二' WHERE `id` = 1;
UPDATE emp SET `name`='王二',`sal`=16.5 WHERE `id` = 1;
UPDATE emp SET `name`='王二',`sal`=16.5 WHERE `id` IN(1,3,5);

在idea中效果展示
在这里插入图片描述

3.删除记录

删除数据表的数据使用如下语法:

delete from table_name [WHERE where_definition]
!注意:
(1)如果不是用WHERE子句,将删除表中所有的数据
(2)使用delete语句仅删除记录,不删除表本身
(3)如要删除表,使用drop table语句。

示例:

delete from `emp` where id = 1;

4.简单查询记录

查询数据表数据一般使用如下语法

SELECT [DISTINCT] *|{字段名1, 字段名2, 字段名3..} FROM table;
参数:
Select指定查询那些列的数据
*号代表查询所有列,在实际开发者很少用*,它会增加查询的负担
FROM指定查询那张表
DISTINCT可选,指定显示结果时,是否剔除重复数据

示例:

SELECT * FROM `emp`;
SELECT `name`,`sal` FROM `emp`;
SELECT DISTINCT `name`,`sal` FROM `emp`;

5.别名运算符和排序

在查询过程中,使用原字段的名称有时候不太方便,MySQL提供别名处理这样的情况。

SELECT 字段名 AS 别名 FROM 表名;

AS可以省略

示例:

SELECT `name` 姓名,`sal` 薪水 FROM `emp`;

注意别名处不使用单引号,但是为了不和一些数据库的关键字冲突建议所有表名、字段名都加上数据库专用单引号(一般位于tab键上方)

运算符

在WHERE子句中经常使用相关的运算符,常见运算符有比价运算符、逻辑运算符等

比较运算符:

>   <   <=   >=   =    <>/!=	大于、小于、大于(小于)等于、不等于
BETWEEN  ...AND...	        显示在某一区间的值(含头含尾)
IN(set)	                        显示在 in 列表中的值,例:in(100,200)
LIKE ‘%张%’	                模糊查询
IS NULL	                        判断是否为空(is not null)

LIKE语句中,%代表零个或多个任意字符,——代表一个字符。

示例:

name LIKE ‘_a%'    表示第二个字符为 a 的人
name like '张%'     姓张的所有人
name like '_伟'     所有姓名为两个字且第二个字为 “伟”
name like '%商%'    姓名中包含 “商”字
name like '%友'     姓名以“友”结尾

逻辑运算符

and	                        多个条件同时成立
or	                        多个条件任一成立
not	                        不成立,例:where not(salary>100);

示例

SELECT `id`, `name`,`sal` FROM `emp` WHERE id > 1;
SELECT `id`, `name`,`sal` FROM `emp` WHERE id BETWEEN 1 AND 3;
SELECT `id`, `name`,`sal` FROM `emp` WHERE `name` IS NULL;
SELECT `id`, `name`,`sal` FROM `emp` WHERE `name` LIKE '%王%' AND id = 1;

排序

排序的列即可是表中的列明,也可以是SElECT语句后指定的列名

ASC升序、DESC降序

ORDER BY子句应位于SELECT语句的结尾

案例:

SELECT `id`, `name`,`sal` FROM `emp` WHERE `id` > 0 ORDER BY `name` ASC ;
SELECT * FROM `mytabe` ORDER BY `sex` DESC,`id` DESC

6.数据库的三范式

第一范式(1NF): 字段具有原子性,不可再分。所有关系型数据库系统都满足第一范式

数据库表中的字段都是单一属性的,不可再分。例如,姓名字段,其中的姓和名必须作为一个整体,无法区分哪部分是姓,哪部分是名,如果要区分出姓和名,必须设计成两个独立的字段。 

第二范式(2NF): 第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。 

要求数据库表中的每个实例或行必须可以被惟一地区分。通常需要为表加上一个列,以存储各个实例的唯一标识。这个唯一属性列被称为主关键字或主键。 实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言 之,第二范式就是非主属性非部分依赖于主关键字。 

第三范式(3NF): 满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。 所以第三范式具有如下特征: 1,每一列只有一个值 2,每一行都能区分。 3,每一个表都不包含其他表已经包含的非主关键字信息。 例如,帖子表中只能出现发帖人的 id,而不能出现发帖人的 id,还同时出现发帖人姓名,否则,只要出现同一发帖人 id 的所有记录,它们中的姓名部分都必须严格保持一致,这就是数据冗余。 

7.章节练习

数据准备:

数据下载

create table student(
                        id int,
                        name varchar(20),
                        chinese float,
                        english float,
                        math float
)ENGINE = InnoDB DEFAULT CHARSET = utf8;
insert into student(id,name,chinese,english,math) values(1,'张小明',89,78,90);
insert into student(id,name,chinese,english,math) values(2,'李进',67,98,56);
insert into student(id,name,chinese,english,math) values(3,'王五',87,78,77);
insert into student(id,name,chinese,english,math) values(4,'李一',88,98,90);
insert into student(id,name,chinese,english,math) values(5,'李来财',82,84,67);
insert into student(id,name,chinese,english,math) values(6,'张进宝',55,85,45);
insert into student(id,name,chinese,english,math) values(7,'黄蓉',75,65,30);

练习:

# 1.查询表中所有学生的信息。
# 2.查询表中所有学生的姓名和对应的英语成绩。
# 3.过滤表中英语重复数据。
# 4.查询时在所有学生数学分数上加10分特长分。
# 5.统计每个学生的总分。
# 6.使用别名表示学生分数。
# 7.查询姓名为王五的学生成绩
# 8.查询英语成绩大于90分的同学
# 9.查询总分大于200分的所有同学
# 10.查询英语分数在 80-90之间的同学。
# 11.查询数学分数为89,90,91的同学。
# 12.查询所有姓李的学生成绩。
# 13.查询数学分>80,语文分>80的同学。
# 14.对数学成绩降序输出。
# 15.对总分排序后输出,然后再按从高到低的顺序输出
# 16.对姓李的学生成绩排序输出

答案:

1.查询表中所有学生的信息。
mysql>SELECT * FROM student;
2.查询表中所有学生的姓名和对应的英语成绩。
mysql>SELECT name,english FROM student;
3.过滤表中英语重复数据。
mysql>SELECT DISTINCT english FROM student;
4.在所有学生数学分数上加10分特长分。
mysql>SELECT name,math+10 FROM student;
5.统计每个学生的总分。
mysql>SELECT name,chinese+english+math FROM student;
6.使用别名表示学生分数。
mysql>SELECT name AS 姓名,chinese+english+math 总分 FROM student;
7.查询姓名为王五的学生成绩
mysql>SELECT * FROM student WHERE name='王五';
8.查询英语成绩大于90分的同学
mysql>SELECT * FROM student WHERE english>90;
9.查询总分大于200分的所有同学
mysql>SELECT name AS 姓名,chinese+english+math 总分 FROM student WHERE (chinese+english+math)>200;
10.查询英语分数在 80-90之间的同学。
mysql>SELECT name,english FROM student WHERE english BETWEEN 80 AND 90;
11.查询数学分数为89,90,91的同学。
mysql>SELECT name,math FROM student WHERE math IN (89,90,91);
12.查询所有姓李的学生成绩。
mysql>SELECT * FROM student WHERE name LIKE '李%';
13.查询数学分>80,语文分>80的同学。
mysql>SELECT * FROM student WHERE math>80 AND chinese>80;
14.对数学成绩排序后输出。
mysql>SELECT name,math FROM student ORDER BY math;
15.对总分排序后输出,然后再按从高到低的顺序输出
mysql>SELECT name 姓名,chinese+english+math 总分 FROM student ORDER BY 总分 DESC;
16.对姓李的学生成绩排序输出
mysql>SELECT name 姓名,chinese+english+math 总分 FROM student WHERE name LIKE '李%' ORDER BY 总分;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

抹泪的知更鸟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值