,介绍MySQL数据库基础知识
Posted 悲伤猪小猪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了,介绍MySQL数据库基础知识相关的知识,希望对你有一定的参考价值。
文章目录
什么是数据库?
在学习编程的道路上我们肯定时不时都会听到数据库这个东西,那么他到底是干什么用的呢?顾名思义数据库就是数据的仓库,他是一类软件,这种软件就是用来组织、保存、管理数据的。
数据库与数据结构的区别
数据结构的名字我们一定也不陌生,好像他也是用来组织数据的东西,那么数据结构与数据库之间有什么关系呢?
数据结构:
数据结构是一个学科,用来研究数据如何组织,对于大量的数据采用合适的方法去组织,而这个合适的方法就是数据结构所研究的。
数据库:
数据库是一个软件,用来组织数据、保存数据、管理数据,数据库如何组织数据呢?其实数据库在被实现的过程中也用到了很多数据结构。
数据库的分类
我们听到最多的数据库就是mysql了,然而数据库软件并不只有MySQL一种,不仅如此,数据库还有分类,数据库大体可以分为关系型数据库和非关系型数据库。
关系型数据库:
指采用了关系模型来组织数据的数据库,关系模型就是二维表格,而一个关系型数据库就是由二位表及其之间的联系所组成的一个数据组织。
常见的关系数据有Oracle MySQL SQL Server
非关系型数据库:
常见的非关系型数据库:redis MongoDB HBase
非关系型数据库功能相比于关系型数据库要少一点,但是性能更高。
简单总结一下二者的区别
关系型数据库 | 非关系型数据库 | |
---|---|---|
使用SQL | 是 | 不强制要求,一般不基于SQL实现 |
事务支持 | 支持 | 不支持 |
复杂操作 | 支持 | 不支持 |
海量读写操作 | 效率低 | 效率高 |
基本结构 | 基于表和列,结构固定 | 灵活性比较高 |
使用场景 | 业务方面的OLTP系统 | 用于数据 |
如何下载安装数据库?
经过上面的阅读,大家对于数据库已经有一个简单的了解了,下面我将向大家介绍如何安装MySQL
。 MySQL安装大家可以点击这个链接访问Oracle
官网下载MySQL
,下载完成后,打开安装包根据指引一路next就可以安装成功了,安装成功之后我们可以找到这样一个程序:
点击这两个程序就可以打开MySQL
,打开后需要输入我们在安装时设置的密码才可以进入数据库。
输入密码正确后,当我们看到这样的界面就说明MySQL已经安装成功了。
将MySQL命令添加到PATH路径
这样做的好处是我们可以直接在命令行窗口使用MySQL命令打开数据库。
完成上面的操作之后,我们就可以打开命令行窗口输入mysql -u root -p
打开数据库。
数据库如何储存数据
MySQL 这个数据库软件,是一个客户端服务器结构的程序。什么是客户端?服务器又是什么呢?我们可以做一个假设,你家里有一个厨师,而你随时可能会饿,你饿了就会向厨师点菜,厨师就会给你做饭,像这样**你是主动去发起交互的一方,所以你就叫做客户端,而厨师是被动接受你的请求,完成交互,所以厨师就是服务器。**客户端给服务器发的数据,就是请求。服务器返回给客户端的数据,就是响应。而因为厨师不知道我何时会饿,所以就得24小时待命,所以数据库的服务器要保证服务的稳定性。
数据被放在那里
那么数据是被放在客户端还是服务器呢?服务器!一定是放在服务器上的!
MySQL具体是使用什么样的硬件设备来保存呢?MySQL以及其他的关系型数据库都是使用硬盘来保存数据的。为什么使用硬盘而不适用内存呢?内存也可以用来存储数据啊。这样我们就不得不提内存与外存的区别:
1、内存的访问速度快,外存访问速度慢
2、内存的空间比较小,外存的空间更大。
3、内存成本贵,外存更便宜。
4、内存的数据,断电后会丢失,外存的数据,断电后还在。
综上选择硬盘来存储数据。
关系型数据库的存储结构
数据在服务器上到底以什么结构组织的呢?
1、MySQL服务器为了更好的组织数据,需要将数据从逻辑上划分为多个数据集合,这集合也成为”数据库“。
2、每个数据库里,使用表结构来组织数据
3、表里面有行结构,每个记录就是一行。
4、每一行有很多列,每个列也成为字段。
SQL语句
SQL是一种编程语言,通过SQL来完成对数据库的增删改查,不同的数据库软件,可能对于SQL的语法支持略有差异,但是整体都是一样的。SQL语言运行在数据库软件上,就像Java运行在jvm上一样。
创建数据库create
首先我们要使用数据库,就需要自己创建一个数据库,并使用该数据库,在数据库中创建若干张表。如何使用SQL语句实现这个操作呢?我们使用create
。
create database school;
创建school数据库
use school;
使用数据库
create table student ( id int, name varchar(50) );
创建一个学生表,表里面有学生的 id 和 姓名。
desc student;
我们还可以查看刚才创建的表
删除数据库drop
我们经常调侃删库跑路,现在我们真的学习到了如何删除数据库,使用drop
。
drop table student
删除student表。
drop database school;
删除school数据库。
注意删除数据库是非常危险的操作,要谨慎在谨慎,如果公司的数据库被你删了,那么你基本也就凉凉了。
插入数据insert
既然数据库是用来存储数据,组织数据,管理数据的,那在创建数据库和表之后,我们需要向表中插入数据,就需要使用insert
.
insert into student values (1,'张三');
可以一次插入一个数据。
insert into student values (2,'李四'),(3,'王五');
可以一次插入多行数据,中间用,
隔开。
insert into student(id) values (4);
还可以对指定的列进行插入数据。
修改数据update
当我们插入数据时不小心输入错误了怎么办呢?删除表在重新创建重新录入嘛?显然是不对的,这时我们使用update
就可以修改数据。
此时张三的id是1,但此时的数据是错误的我们需要进行修改
update student set id = 10 where name = '张三';
使用update进行修改,where的作用可以相当于if选择语句,对所更改的数据进行筛选。
查询数据select
查询是数据库中比较重要的操作,为了让查询的结果符合我们的预期,查询语句相比于其他语句会复杂一点,这里我们只介绍基础一点的查询语句。
全列查询
select * from student;
指定列查询
select id from student;
别名
select name as information from student;
去重查询
select distinct id from student;
此时查询id有重复,我们希望把重复的去掉只显示一次就可以了,使用distinct查询。
排序
select * from student order by id;
有些时候我们希望数据从小到大(ASC)或者从大到小(DESC)进行排列,此时我们可以使用order by
此时是从小到大排序的,我们还可以从大到小排序。
选择查询
有些时候由于数据库中的数据量太过庞大,我们查询时效率不高,就需要进行筛选,提高查询效率。一般选择
select * from student where id = 2;
范围查询select * from student where id between 2 and 4;
也可以使用and or
来进行范围查询,and or
相当于并和或。
模糊查询select * from student where name like '%四';
%
他是一个通配符,他可以代表任意个字符,这句sql语句的意思就是查询所以名字为四结尾的同学的信息。
_
这个也是一个通配符,他仅代表一个字符。
分页查询
select * from student order by id limit 0,2;
有时我们的数据太多一个页面放不下这么多数据,我们就可以使用limit
进行分页查询。0表示从0开始,2表示每个页面显示两行数据。
以上就是一些数据库的基础知识,下篇文章我们将介绍一下数据库的进阶知识,更复杂的查询,事物与索引,和JDBC编程。
mysql介绍——基础知识
数据库管理
登陆数据库
打开cmd -> 输入 mysql -u root -p 回车 -> 输入密码 回车
C:\\Users\\46319>mysql -u root -p
Enter password: ****
Welcome to the MySQL monitor. Commands end with ; or \\g.
Your MySQL connection id is 141
Server version: 5.5.47 MySQL Community Server (GPL)
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\\h' for help. Type '\\c' to clear the current input statement.
查询所有数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |--mysql元数据,基础数据
| mysql |--mysql配置数据库,包含用户名、密码和权限等信息。
| performance_schema |--mysql数据库软件的运行数据,日志信息,性能数据
| test |--测试数据库。空的
+--------------------+
4 rows in set (0.00 sec)
创建数据库
mysql> create database day15 -- 指定默认字符集创建数据库
-> default character set utf8
-> ;
Query OK, 1 row affected (0.00 sec)
看数据库的默认字符集
mysql> show create database day15;
+----------+-----------------------------------------------
| Database | Create Database |
+----------+-----------------------------------------------
| day15 | CREATE DATABASE `day15` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-----------------------------------------------
1 row in set (0.00 sec)
删除数据库
mysql> drop database day15;
Query OK, 0 rows affected (0.01 sec)
修改数据库
mysql> alter database day15 default character set gbk;
Query OK, 1 row affected (0.00 sec)
表管理
查看所有表
mysql> show tables;
+-----------------+
| Tables_in_day15 |
+-----------------+
| student |
+-----------------+
1 row in set (0.00 sec)
创建表
mysql> create table student[表名](
-> sid[字段名称] int[字段类型],
-> sname varchar(20)[类型长度],
-> sage int
-> );
Query OK, 0 rows affected (0.01 sec)
查看表结构
mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| sid | int(11) | YES | | NULL | |
| sname | varchar(20) | YES | | NULL | |
| sage | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
删除表
mysql> drop table student;
Query OK, 0 rows affected (0.01 sec)
修改表
- 添加字段
mysql> alter table student add column sgender varchar(2);
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
- 删除字段
mysql> alter table student drop column sgender;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
- 修改字段类型
mysql> alter table student modify column remark varchar(100);
Query OK, 0 rows affected (0.07 sec)
Records: 0 Duplicates: 0 Warnings: 0
- 修改字段名称
mysql> alter table student change column sgender gender varchar(2);
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
- 修改表名称
mysql> alter table student rename to teacher;
Query OK, 0 rows affected (0.01 sec)
增删改数据
增加数据
-- 插入所有字段。一定依次按顺序插入
INSERT INTO student VALUES(1,'张三','男',20);
-- 注意不能少或多字段值
-- INSERT INTO student VALUES(2,'李四','女');
-- 插入部分字段
INSERT INTO student(id,NAME) VALUES(2,'李四');
修改数据
-- 修改所有数据(建议少用)
UPDATE student SET gender='女';
-- 带条件的修改(推荐使用)
UPDATE student SET gender='男' WHERE id=1; -- 修改id为1的学生,修改性别为男
-- 修改多个字段,注意: SET 字段名=值,字段名=值,....
UPDATE student SET gender='男',age=30 WHERE id=2;
删除数据
-- 删除所有数据(建议少用)
DELETE FROM student;
-- 带条件的删除(推荐使用)
DELETE FROM student WHERE id=2;
-- 另一种方式
-- delete from: 可以全表删除 1)可以带条件删除 2)只能删除表的数据,不能删除表的约束 3)使用delete from删除的数据可以回滚(事务)
-- truncate table: 可以全表删除 1)不能带条件删除 2)即可以删除表的数据,也可以删除表的约束 3)使用truncate table删除的数据不能回滚
TRUNCATE TABLE student;
查询数据(重点)
查询所有列
SELECT * FROM student;
查询指定列
SELECT id,NAME,gender FROM student;
查询时添加常量列
-- 需求: 在查询student表时添加一个班级列,内容为“java就业班”
SELECT id,NAME,gender,age,'java就业班' AS '年级' FROM student;
查询时合并列
-- 需求: 查询每个学生的servlet和jsp的总成绩
SELECT id,NAME,(servlet+jsp) AS '总成绩' FROM student;
-- 注意:合并列只能合并数值类型的字段
SELECT id,(NAME+servlet) FROM student;
查询时去除重复记录
-- 需求: 查询学生的性别 男 女
SELECT DISTINCT gender FROM student;
-- 另一种语法
SELECT DISTINCT(gender) FROM student;
-- 需求: 查询学生所在的地区
SELECT DISTINCT address FROM student;
条件查询
-- 1 逻辑条件: and(与) or(或)
-- 需求: 查询id为2,且姓名为李四的学生
SELECT * FROM student WHERE id=2 AND NAME='李四'; -- 交集
-- 需求: 查询id为2,或姓名为张三的学生
SELECT * FROM student WHERE id=2 OR NAME='张三'; -- 并集
-- 2 比较条件: > < >= <= = <>(不等于) between and (等价于>= 且 <=)
-- 需求: 查询servlet成绩大于70分的学生
SELECT * FROM student WHERE servlet>70;
-- 需求: 查询jsp成绩大于等于75,且小于等于90分的学生
SELECT * FROM student WHERE jsp>=75 AND jsp<=90;
-- 另一个语法
SELECT * FROM student WHERE jsp BETWEEN 75 AND 90; -- (包前包后)
SELECT * FROM student WHERE gender<>'男';
-- 3 判空条件(null 空字符串): is null / is not null / ='' / <>''
-- 需求: 查询地址为空的学生(包括null和空字符串)
-- null vs 空字符串
-- null:表示没有值
-- 空字符串:有值的!
-- 判断null
SELECT * FROM student WHERE address IS NULL ;
-- 判断空字符串
SELECT * FROM student WHERE address='';
SELECT * FROM student WHERE address IS NULL OR address=''; -- (包括null和空字符串)
-- 需求: 查询有地址的学生(不包括null和空字符串)
SELECT * FROM student WHERE address IS NOT NULL AND address<>'';
-- 4 模糊条件: like
-- 通常使用以下替换标记:
-- % : 表示任意个字符
-- _ : 表示一个字符
-- 需求: 查询姓‘李’的学生
SELECT * FROM student WHERE NAME LIKE '李%';
-- 需求: 查询姓‘李’,且姓名只有两个字的学生
SELECT * FROM student WHERE NAME LIKE '李_';
聚合查询
-- 常用的聚合函数: sum() avg() max() min() count()
-- 需求:查询学生的servlet的总成绩 (sum() :求和函数)
SELECT SUM(servlet) AS 'servlet的总成绩' FROM student;
-- 需求: 查询学生的servlet的平均分
SELECT AVG(servlet) AS 'servlet的平均分' FROM student;
-- 需求: 查询当前servlet最高分
SELECT MAX(servlet) AS '最高分' FROM student;
-- 需求: 查询最低分
SELECT MIN(servlet) AS '最低分' FROM student;
-- 需求: 统计当前有多少学生(count(字段))
SELECT COUNT(*) FROM student;
SELECT COUNT(id) FROM student;
-- 注意:count()函数统计的数量不包含null的数据
-- 使用count统计表的记录数,要使用不包含null值的字段
SELECT COUNT(age) FROM student;
分页查询
-- 分页查询(limit 起始行,查询几行),起始行从0开始
-- 分页:当前页 每页显示多少条
-- 分页查询当前页的数据的sql: SELECT * FROM student LIMIT (当前页-1)*每页显示多少条,每页显示多少条;
-- 需求: 查询第1,2条记录(第1页的数据)
SELECT * FROM student LIMIT 0,2;
-- 查询第3,4条记录(第2页的数据)
SELECT * FROM student LIMIT 2,2;
-- 查询第5,6条记录(第3页的数据)
SELECT * FROM student LIMIT 4,2;
-- 查询第7,8条记录 (没有记录不显示)
SELECT * FROM student LIMIT 6,2;
查询排序
-- 语法 :order by 字段 asc/desc
-- asc: 顺序,正序。数值:递增,字母:自然顺序(a-z)
-- desc: 倒序,反序。数值:递减,字母:自然反序(z-a)
-- 默认情况下,按照插入记录顺序排序
SELECT * FROM student;
-- 需求: 按照id顺序排序
SELECT * FROM student ORDER BY id ASC;
SELECT * FROM student ORDER BY id; -- 默认正序
SELECT * FROM student ORDER BY id DESC;-- 反序
-- 注意:多个排序条件
-- 需求: 按照servlet正序,按照jsp的倒序
SELECT * FROM student ORDER BY servlet ASC,jsp DESC;
分组查询
-- 需求:查询男女的人数
SELECT gender,COUNT(*) FROM student GROUP BY gender;
分组查询
-- 需求:查询男女的人数
SELECT gender,COUNT(*) FROM student GROUP BY gender;
分组查询后筛选
-- 需求: 查询总人数大于2的性别
-- 1) 查询男女的人数
-- 2)筛选出人数大于2的记录(having)
--- 注意: 分组之前条件使用where关键字,分组之前条件使用having关键字
SELECT gender,COUNT(*) FROM student WHERE GROUP BY gender HAVING COUNT(*)>2;
以上是关于,介绍MySQL数据库基础知识的主要内容,如果未能解决你的问题,请参考以下文章