MySQL数据库基础

Posted 我可是ikun啊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL数据库基础相关的知识,希望对你有一定的参考价值。

目录

数据库介绍

什么是数据库

数据库的分类

1. 数据库的操作

创建数据库

显示数据库

使用数据库

删除数据库 

 2. 表的操作

创建表

删除表

3. 常用数据类型

插入数据

查询数据


从本篇起就又要开始新的篇章了,数据结构初级阶段的就告一段落了,等把后面的JavaEE初级阶段学习完,又会回到数据结构进阶部分。

本章开始就是主打mysql了。

MySQL是个啥?其实就是个数据库,那么数据库又是个啥?

首先来介绍以下什么是数据库。

数据库介绍

什么是数据库

数据库简单来说就是用来存储文件的,如何存储又要牵扯到很多这里就不展开了,可以参考:

数据库发展史 - 知乎 (zhihu.com)

随着时代的发展,大部分数据都是存储在文件当中的,那为什么还要弄个数据库?
对比以下优缺点:

文件保存数据有以下几个缺点:

  • 文件的安全性问题
  • 文件不利于数据查询和管理
  • 文件不利于存储海量数据
  • 文件在程序中控制不方便

数据库中的数据一般存储在内存和磁盘中。

数据库的分类

数据库大体可以分为 关系型数据库 和 非关系型数据库

  • 关系型数据库(RDBMS):是指采用了关系模型来组织数据的数据库。 简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。基于标准的SQL,只是内部一些实现有区别。常用的关系型数据库如:
  1. Oracle:甲骨文产品,适合大型项目,适用于做复杂的业务逻辑,如ERP、OA等企业信息系统。收费。
  2.  MySQL:属于甲骨文,不适合做复杂的业务。开源免费。
  3.  SQL Server:微软的产品,安装部署在windows server上,适用于中大型项目。收费。
  • 非关系型数据库(了解):不规定基于SQL实现。现在更多是指NoSQL数据库,如:
  1.  基于键值对(Key-Value):如 memcached、redis
  2.  基于文档型:如 mongodb
  3.  基于列族:如 hbase
  4.  基于图型:如 neo4j

关系型数据库与非关系型数据库的 区别:

关系数据库非关系型数据库
使用SQL不强制要求,一般不基于SQL实现
事务支持支持不支持
复杂操作支持不支持
海量读写操作效率低效率高
基本结构基于表和列,结构固定灵活性比较高
使用场景业务方面的OLTP系统用于数据的缓存、或基于统计分析的OLAP系统

关于数据库如何安装等等,我这里就不过多介绍了,我直接抄一篇博客,链接如下:

Windows安装mysql详细步骤(通俗易懂,简单上手)_华夏之威的博客-CSDN博客https://blog.csdn.net/weixin_43423484/article/details/124408565而我们主要学习的就是MySQL,因为它开源,免费!!!

接下来开始进入正题,数据库如何操作的。

1. 数据库的操作

MySQL服务器中的数据库可以有很多个,分别存储不同的数据,想要将数据存储到数据库中,首先要创建一个数据库,我们来看看如何创建一个数据库:

创建数据库

首先登陆我们的数据库:

 第二步创建一个数据库,语法格式:

create database 【数据库名称】【库选项】

 库选项主要就一些字符集,引擎什么的,这里就不多介绍,需要的话可以去查。

java就是数据库名称,字符集设置为utf-8 后面添加数据时,就可以添加汉字了。

显示数据库

既然创建了,我们可以查看我们创建的数据库是否存在MySQL服务器中,语法格式如下:

show databases;

java雀氏已经存在了,里面有的是我自己创建的,也有是系统自带的。

使用数据库

既然创建了,那就来用用看,语法格式如下:

use 数据库名称;

数据中系统提示的很多单词相信大家都认识,我也就不介绍了。

这样我们就进入到了java这个库中了,我们再来看看库中有些啥:

嘿嘿,啥也没有。

删除数据库 

这一步操作非常危险啊,除非有需要,不然千万不要进行这一步操作,不然小手一点,分分钟让老板损失上百万;但是我们的数据库啥也没有,我们一次性删爽来。

语法格式如下:

drop database 数据库名称;

再来看看,服务器中是否还存在;

 

只有10行了,雀氏删除成功了;还是得提醒以下,千万不要手欠删库啊,分分钟丢失工作

 2. 表的操作

我们先前创建了一个数据库名叫java的,库中的内容啥也没有;数据库中存放的就是表了,emoty 指的就是表,所以这一部分就是如何去创建表。

创建表

语法格式:

create table 表名( 字段名 字段类型(属性), 字段名 字段类型(属性),.......)【表选项】

这里面的我们一 一来解释,表选项和前面的一样,也是指字符集,存储引擎,校对集。

字段名就是指表的列名;字段类型就是指数据类型;

属性指的是对字段的某些约束条件等等。

我们拿个图来看看:

从左往右开始,Field 和 Type 翻译 过来就知道是字段和类型的意思;

Null 确定该字段是否为空,Key指的是索引类型;Default 指的是默认值; Extra 表示扩充

其实可以直接翻译以下就懂了。

这里涉及到查看表结构的语法:

desc 表名;desc 对应的单词就是description 【后面还有一个关键字也是desc】

删除表

有创建就有删除,对应的语法如下:

drop table 表名 ;

类似于删库,好吧就是一个语法。

同样删表也是个非常危险的操作,除非有需要不然不要轻易尝试,分分钟离职;蹭现在我们删爽来:

这就ok了,还是提醒以下啊,千万不要手欠删表,不然真的就g了。

一天一个离职小技巧 ~~ 

介绍了创建表和删除表,但是我们还是没有开始插入数据,在讲插入数据之前我们得对数据类型进行一个了解:

3. 常用数据类型

无论数据类型,都得贴近我们的生活,不会太离谱,本身数据库的目的就是存储数据的,正常而言数据就那么几中类型;和Java、C一样 都是有整型的浮点型的,但是还是略有区别的。

从整型和浮点型开始介绍

整型和浮点型:

数据类型大小说明对应java类型
BIT[ (M) ]M指定位
数,默认
为1
二进制数,M范围从1到64,
存储数值范围从0到2^M-1
常用Boolean对应BIT,此时
默认是1位,即只能存0和1
TINYINT1字节Byte
SMALLINT2字节Short
INT4字节Integer
BIGINT8字节Long
FLOAT(M, D)4字节单精度,M指定长度,D指定
小数位数。会发生精度丢失
Float
DOUBLE(M,
D)
8字节Double
DECIMAL(M,
D)
M/D最大
值+2
双精度,M指定长度,D表示
小数点位数。精确数值
BigDecimal
NUMERIC(M,
D)
M/D最大
值+2
和DECIMAL一样BigDecimal

当然啦,MySQL和c语言类似,数值类型可以指定为无符号(unsigned),表示不取负数。

如果当我们int都存不下去了,就换一个类型,没必要去纠结使用unsigned 和 signed ,signed都存不下去,unsigned 大概率也存不下去。

字符串类型

数据类型大小说明对应java类型
VARCHAR (SIZE)0-65,535字节可变长度字符串String
TEXT0-65,535字节长文本数据String
MEDIUMTEXT0-16 777 215字节中等长度文本数据String
BLOB0-65,535字节二进制形式的长文本数据byte[]

这没什么好介绍的,就只需要认识一个 blob 是存储二进制的;要用到时,百度即可。

日期类型

数据类型
说明对应java类型
DATETIME8 字 节范围从1000到9999年,不会进行时区的
检索及转换。
java.util.Date、
java.sql.Timestamp
TIMESTAMP4 字 节范围从1970到2038年,自动检索当前时
区并进行转换。
java.util.Date、
java.sql.Timestamp

和字符串一样,不会比较,不会添加,没关系,要用时直接百度。

等会我也来演示以下。

到现在,我们就可以开始进行插入数据了。

插入数据

语法格式:

insert into 表名 value(值1,值2......);【单行插入】

insert into 表名 values(值1,值2......),(值1,值2......);【多行插入】

我们用多行插入的语法去插入一行记录也是可以滴!

示例:

一行插入没问题,我们再来看看多行插入:

既然插入欧克,那么我们再来看看服务器中是否已经存在我们添加的数据:

查询数据

 语法格式:

select * from 表名;【这是全列查询】

这种查询,真正工作时,并不推荐,公司里的数据不同于我们自己写的,他们可能动则就上几十万条数据,我们一查带宽直接崩了,所以这条查询语句也非常危险!!

我们来看看结果如何:

的确能够查询出表中的数据!

当然,还有其他很多查询语句,今天就先到这里,其他的留给后面再细说,本章就到此为止,先对MySQL有部分的了解!

Mysql基础1

一、数据库简介
1、Structured Query Language (结构化查询语言)
2、SQL:工业标准。(各个数据库厂商都支持)
SQL-Server:对标准进行了扩展。TSQL 方言
Oracle:对标准进行了扩展。PLSQL

规定:
shell>window下命令
mysql>mysql中的命令,一般以;结尾(进入数据库)

二、安装MySQL数据库
如何验证安装是否成功!
shell>mysql -u root -psorry
显示所有的数据库
mysql>SHOW DATABASES;
除了test,其他2个数据库不要动。
*****三、SQL语句
1、DDL:Data Definition Language(数据定义语言)
关键字:CREATE ALTER DROP(操作对象:数据库和表结构。就是定义数据库或表的结构)
------------------------------------------------------------------
创建一个名称为mydb1的数据库。
mysql>CREATE DATABASE mydb1;
查看数据库的创建细节
mysql>SHOW CREATE DATABASE mydb1;
创建一个使用gbk字符集的mydb2数据库。
mysql>CREATE DATABASE mydb2 CHARACTER SET gbk;
创建一个使用utf8字符集,并带校对规则的mydb3数据库。
mysql>CREATE DATABASE mydb3 CHARACTER SET utf8 COLLATE utf8_general_ci;
查看当前数据库服务器中的所有数据库
mysql>SHOW DATABASES;
查看前面创建的mydb2数据库的定义信息
mysql>SHOW CREATE DATABASE mydb2;
删除前面创建的mydb2数据库
mysql>DROP DATABASE mydb2;

查看服务器中的数据库,并把其中mydb1库的字符集修改为gbk;
mysql>ALTER DATABASE mydb1 CHARACTER SET gbk;
备份test库中的数据,并恢复

备份:
shell>mysqldump -h localhost -u root -psorry test>c:/test.sql
恢复数据库:(删除掉test数据库)
创建test数据库
mysql>CREATE DATABASE test;
mysql>USE test;
恢复:
方式一:
mysql>SOURCE C:/test.sql;
//选择数据库
mysql>USE test;
方式二:
shell>mysql -u root -psorry test<c:/test.sql

显示数据库中的所有表格
mysql>SHOW TABLES;
-------------------------------------------------
创建员工信息表
mysql>CREATE TABLE employee(
id int,
name varchar(100),
gender varchar(10),
birthday date,
entry_date date,
job varchar(100),
salary float(8,2),
resume varchar(200)
);
查看数据库中所有的表格
mysql>SHOW TABLES;
查看某张表格的结构
mysql>DESC employee;
在上面员工表的基本上增加一个image列。
mysql>ALTER TABLE employee ADD (image blob);
修改job列,使其长度为60。
mysql>ALTER TABLE employee MODIFY job varchar(60);
删除gender列。
mysql>ALTER TABLE employee DROP gender;
表名改为user。
mysql>RENAME TABLE employee TO user;
修改表的字符集为utf-8
mysql>ALTER TABLE user CHARACTER SET utf8;
列名name修改为username
mysql>ALTER TABLE user CHANGE name username varchar(100);

*2、DML:Data Manipulation Language(数据操作语言)
关键字:INSERT UPDATE DELETE(操作对象:表中的数据。就是操作表中的记录用的)
------------------------------------------------------------------
在MySQL中,字符或字符串或日期类型的数据要使用单引号引起来。关键字NULL表示空值,不同于空字符串值。‘‘
使用insert语句向表中插入三个员工的信息。
mysql>INSERT INTO user (id,username,birthday,entry_date,job,salary,resume) VALUES (1,‘huangshanshan‘,‘1992-09-08‘,‘2012-11-15‘,‘CEO‘,‘10000‘,‘beautiful girl‘);
mysql>INSERT INTO user VALUES (2,‘niuyang‘,‘1992-09-08‘,‘2012-11-15‘,‘CTO‘,‘10000‘,‘beautiful boy‘);
mysql>INSERT INTO user VALUES (3,‘于连林‘,‘1992-09-08‘,‘2012-11-15‘,‘CMO‘,‘10000‘,‘帅锅‘);
告诉服务器客户端用的编码是什么?
mysql>SET character_set_client=gbk;
查看数据
mysql>SELECT * FROM user;
解决返回的数据中文乱码
mysql>SET character_set_results=gbk;
MySQL中的各种编码:
查看有哪些地方用到编码
mysql>SHOW VARIABLES LIKE ‘character%‘;
character_set_client:此变量通知服务器客户端用的是什么编码
character_set_connection:此变量通知服务器客户端链接时用的是什么编码
character_set_database:数据库用的编码
character_set_results:是数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集。
character_set_server:是服务器安装时指定的默认字符集设定
character_set_system :是数据库系统使用的字符集设定。

将所有员工薪水修改为5000元。
mysql>UPDATE user SET salary=5000;
将姓名为’niuyang’的员工薪水修改为30000元。
mysql>UPDATE user SET salary=30000 WHERE username=‘niuyang‘;
将姓名为’huangshanshan’的员工薪水修改为20000元,job改为HR。
mysql>UPDATE user SET salary=20000,job=‘HR‘ WHERE username=‘huangshanshan‘;
将于连林的薪水在原有基础上增加10000元。
mysql>UPDATE user SET salary=salary+10000 WHERE username=‘于连林‘;

删除表中名称为’于连林’的记录。
mysql>DELETE FROM user WHERE username=‘于连林‘;
删除表中所有记录。(一条一条地删除)
mysql>DELETE FROM user;
使用truncate删除表中记录。(摧毁整张表,然后重建表结构)
mysql>TRUNCATE user;

------------------------------------------------------------------
*3、DQL:Data Query Language(数据查询语言)
关键字:SELECT
查询表中所有学生的信息。
mysql>SELECT id,name,chinese,english,math FROM student;
或者SELECT * FROM student;
查询表中所有学生的姓名和对应的英语成绩。
mysql>SELECT name,english FROM student;
过滤表中重复数据。
mysql>SELECT DISTINCT english FROM student;

在所有学生语文分数上加10分特长分。
mysql>SELECT id,name,chinese+10 FROM student;
统计每个学生的总分。
mysql>SELECT id,name,chinese+english+math FROM student;
使用别名表示学生分数。(AS可以省略)
mysql>SELECT id,name,chinese+english+math AS 总分 FROM student;
mysql>SELECT id,name,chinese+english+math 分 FROM student;

查询姓名为wu的学生成绩
mysql>SELECT id,name,chinese,english,math FROM student WHERE name=‘王五‘;
查询英语成绩大于90分的同学
mysql>SELECT name,english FROM student WHERE english>90;
查询总分大于200分的所有同学
mysql>SELECT name,chinese+english+math AS 总分 FROM student WHERE (chinese+english+math)>200;
------------------------------------------------------------------
(选修)4、DCL:Data Control Language(数据控制语言)
GRANT等
*****四、多表关系及设计
*****五、约束

以上是关于MySQL数据库基础的主要内容,如果未能解决你的问题,请参考以下文章

《零基础入门MySQL数据库》专栏简介

MySQL数据库基础+ 数据库的基本操作?

Mysql基础1

MySQL基础

MySQL-MySQL基础的语句

MySQL入门基础一-Mysql的基础体系架构