一、引言
1.1 现有的数据存储方式有哪些?
- Java程序存储数据(变量、对象、数组、集合),数据保存在内存中,属于瞬时状态存储。
- 文件(File)存储数据,保存在硬盘上,属于持久状态存储。
1.2 以上存储方式存在哪些缺点?
- 没有数据类型的区分。
- 存储数据量级较小。
- 没有访问安全限制。
- 没有备份、恢复机制。
二、数据库基本知识
2.1 为什么需要数据库?
数据库的出现,很好的解决了数据的存储效率和读取效率。
存储成一个文件,不大方便操作,也不大方便共享。
2.2 概念
数据库是“按照数据结构来组织、存储和管理数据的仓库。是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。
2.2.1什么是数据库
数据库就是存储数据的仓库。为了方便数据的存储和管理,将数据按照特定的规则存储在磁盘上。通过数据管理系统,有效的组织和管理存储在数据库中的数据。
数据库(DATABASE)是按照数据结构来组织、存储和管理数据的仓库(通常是一个文件或一组文件)。
理解数据库的一种简单方法就是将其想象成一个文件柜,此文件柜是一个存储存放数据的位置。
注意:有些人通常使用数据库这个术语来代表他们使用的数据库软件,这是不正确的。确切的说,数据库软件对应DBMS(数据库管理系统)。数据库是通过DBMS操纵的容器。我们不直接访问数据库,我们使用的是DBMS,它替我们访问数据库。
2.2.2什么是数据库系统
数据库系统和数据库不是一个概念,数据库系统DBS比数据库大很多,由数据库,数据库管理系统,应用开发工具构成。
数据库,数据表,表的结构。。
DB:是指datebase(数据库)
数据库是存储数据的一个集合,数据库中通常使用数据表等组成,而数据表是由数据的字段和数据的值等信息组成。
DBMS:是指datebase mangement systerm(数据库管理系统)
它是操作数据库和管理数据库的一个系统,比如mysql、sqlserver等都是属于数据库管理软件,人们通过这些系统或者工具来管理数据库内的数据。
DBS:是指datebase systerm (数据库系统)
数据库系统由数据库和数据库管理软件等组成,数据库是一个逻辑上的存储数据的概念,而对应的是实体是数据库管理软件存储在硬盘上的数据库,所以数据库系统包含数据库和数据库管理软件。
比较一下DB,DBMS,DBS
2.3 数据库的分类
- 网状结构数据库:美国通用电气公司IDS(Integrated Data Store),以节点形式存储和访问。
- 层次结构数据库:IBM公司IMS(Information Management System)定向有序的树状结构实现存储和访问。
- 关系结构数据库:Oracle、DB2、MySQL、SQL Server,以表格(Table)存储,多表间建立关联关系,通过分类、合并、连接、选取等运算实现访问。
- 非关系型数据库:ElastecSearch、MongoDB、Redis,多数使用哈希表,表中以键值(key-value)的方式实现特定的键和一个指针指向的特定数据。
2.4关系型数据库的介绍
关系型数据库模型是吧复杂的数据结构归结为简单的二元关系(即二维表格形式)
在关系型数据库中,对数据的操作几乎全部建立在一个或多个关系的表格上,通过对这些关联的表格分裂、合并、连接或选取等运算来实现数据库的管理。
Oracle在数据库领域上升到了霸主地位
MySQL数据库在中小企业和免费市场具有绝对地位
关系型数据库的几个概念:
表:
表(table)是数据库存储数据的基本单位。
列:
列(column)表中的一个字段。所有的表都是由一个或多个列组成
数据类型:
数据类型(datatype)每个列都有相应的数据类型,用来限制该列存储的数据。
行:
行(row)表中的一个(行)记录
表中的数据是按行存储的,所保存的每个记录存储在自己的行内,如果将表想象成网格,网格中垂直的列为表列,水平行为表行
主键:
主键(primary key)一列或一组列,其值能够唯一区分表中的每一行。
表中每一行都应该可以唯一标识自己的一列。一个顾客表可以使用顾客编号,而订单表可以使用订单ID。一个表中没有主键的话,更新或删除特定行的话很困难,因为没有相关的方法保证只涉及相关的行。
主键的规则 表中的任何列都可以作为主键,只要它满足以下条件:
- 任何两行都不具有相同的主键值(每一行的主键值唯一)
- 每个行都必须具有主键值(主键值不允许null)
主键的好习惯除了强制的规则外,应该坚持的几个普遍认可的好习惯:
- 不更新主键列中的值
- 不重用主键列的值
- 不在主键列中使用可能更改的值
三、MySQL
3.1 简介
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS(Relational Database Management System,关系数据库管理系统) 应用软件之一。
下载地址:https://dev.mysql.com/downloads/mysql/
3.3 登录
方式一:DOS窗口:输入以下命令:
mysql -u root -p 回车后输入密码即可
方式二:通过Mysql的Command Line来登录:
直接输入密码即可
方式三:通过其他的可视化工具软件:可以使用navicat
3.4 创建数据库:
1.创建数据库:
mysql> create database tulingDB character set utf8; Query OK, 1 row affected (0.00 sec)
说明:
- 数据库名不要使用中文,
- 由于数据库将来存储一些非ascii码的字符,所以务必指定字符编码,一般都是指定utf-8编码
- charset指定utf8 COLLATE 指定utf8_general_ci
- mysql中文字符集是utf8,不是utf-8
2.显示有哪些数据库:
mysql> show databases;
3.切换到数据库:以后的操作都是针对该数据库的,比如建表。。
mysql> use tulingDB;
4.查看当前数据库有哪些数据表:
mysql> show tables;
5.删除数据库:
mysql> drop database if exists tulingDB;
3.5 数据类型
MySQL支持多种类型,大致可以分为三类
- 数值:常用的是int(整数)和decimal(浮点数)
- 日期/时间:最常用的是datetime
- 字符串(字符):最常用的是char,varchar和text
char(10)-->定长的字符串,查找速度更快一些
"hello "
"abc "
varchar(10)-->变长,节省空间
"hello"
“abc”
总结常用的类型:
int :整型;
double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值:999.99
decimal:浮点型,不会出现精度缺失问题,比如金钱
char:固定长度字符串类型,最大长度:char(255)
varchar:可变长度字符串类型,最大长度:varchar(65535)
text(clob):字符串类型,存储超大文本
blob:字节类型,最大4G
date:日期类型;格式:yyyy-MM-dd
time:时间类型;格式:hh:mm:ss
timestamp:时间戳
datetime:
3.6 数据表的操作
1.创建数据库:
mysql> create database if not exists tulingDB default charset utf8 collate utf8_general_ci;
2.创建数据表:
创建表语法:
CREATE TABLE [IF NOT EXISTS]表名( 列名 列类型(长度) 约束 默认值, 列名 列类型(长度) 约束 默认值, ... );
注意:
- 字段使用NOT NULL,是因为我们不希望这个字段的值为NULL。因此,如果用户尝试创建具有NULL值的记录,那么MYSQL会产生错误
- 字段的AUTO_INCREMENT属性告诉MySQL自动增加id字段下一个可以用的编号。
- DEFAULT 设置默认值
- 关键字primary key 用于定义此列作为主键。
mysql> create table users( -> id int(4) primary key auto_increment, -> username varchar(20) , -> pwd varchar(30));
3.查看表结构:desc-->describe
mysql> desc users;
4.显示检表语句:
mysql> show create table users;
5.插入一条数据:
mysql> insert into users(id,username,pwd) values(1,'admin','123456'); Query OK, 1 row affected (0.02 sec)
6.查询数据:
mysql> select * from users; +----+----------+--------+ | id | username | pwd | +----+----------+--------+ | 1 | admin | 123456 | +----+----------+--------+ 1 row in set (0.00 sec)
3.7 修改表结构
alter table 表名 xxx。。。
- 添加字段:add
mysql> alter table users add( -> age int(4), -> birthday date);
- 修改已有字段的数据类型:modify
mysql> alter table users modify age float(4,1);
注意点:并不能随意的更改已有列的数据类型。尤其是表中已经有数据了
A:兼容类型:长度可以从小到大,不能已有的数据越界。
B:不兼容类型:varchar-->int,更改失败。
alter tables users modify name int;
3.删除某列:drop
mysql> alter table users drop birthday;
如果该列存在数据,那么数据也会被删掉。
4.删除表:drop table
mysql> drop table user3;
3.8 插入数据
1.插入数据:
insert into 表名(列1,列2,列3.。。) values(值1,值2,值3.。。)
全列插入:如果有所有列都要插入数据,那么可以省略列的名字
对自动增长的数据,在全列插入的时候需要占位处理,一般使用0来占位,但是最终的值以实际为准;
缺省插入:如果有某一个或一些字段没有数值,那么就要写清楚列名和值。
插入的时候,not null和primary key的列必须赋值,其他的列根据情况来赋值,如果没有赋值则会使用默认值
同时插入多行:
insert into 表名(列1,列2,列3.。。) values(值1,值2,值3.。。),(值1,值2,值3.。。),....;
3.9 修改数据
语法结构:
update 表名 set 列1=值1,列2=值2...[where 条件];
where后是修改条件:为true,才会修改数据。
注意点:
- 条件必须是boolean类型的值或表达式;
运算符: =,数值相等 !=,<>,数值不等 between ... and,区间 > < >= <= or and in(值1,值2,值3.。) is null is not null
3.is null不是=null(永远是false)
select * from student where birthday=null;
1.修改学号为1006的同学姓名为麻雷子
mysql> update student set name='麻雷子' where no=1006; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from student; +------+--------+------+------+------------+ | no | name | age | sex | birthday | +------+--------+------+------+------------+ | 1001 | 王二狗 | 18 | 男 | 2007-10-10 | | 1002 | rose | 19 | 女 | 2006-09-09 | | 1003 | jack | 20 | 男 | 2005-08-06 | | 1004 | 张三 | 18 | 女 | 1990-12-12 | | 1005 | 李四 | 21 | 男 | 1991-06-08 | | 1006 | 麻雷子 | 22 | 男 | 1992-10-10 | +------+--------+------+------+------------+ 6 rows in set (0.00 sec)
2.年龄小于19岁的同学,性别改为女
mysql> update student set sex='女' where age < 19; Query OK, 1 row affected (0.01 sec) Rows matched: 2 Changed: 1 Warnings: 0 mysql> select * from student; +------+--------+------+------+------------+ | no | name | age | sex | birthday | +------+--------+------+------+------------+ | 1001 | 王二狗 | 18 | 女 | 2007-10-10 | | 1002 | rose | 19 | 女 | 2006-09-09 | | 1003 | jack | 20 | 男 | 2005-08-06 | | 1004 | 张三 | 18 | 女 | 1990-12-12 | | 1005 | 李四 | 21 | 男 | 1991-06-08 | | 1006 | 麻雷子 | 22 | 男 | 1992-10-10 | +------+--------+------+------+------------+ 6 rows in set (0.01 sec)
3.年龄大于等于18岁,并且小于等于19岁的同学姓名改为马冬梅
mysql> update student set name='马冬梅' where age >= 18 and age <= 19; Query OK, 3 rows affected (0.01 sec) Rows matched: 3 Changed: 3 Warnings: 0 mysql> select *from student; +------+--------+------+------+------------+ | no | name | age | sex | birthday | +------+--------+------+------+------------+ | 1001 | 马冬梅 | 18 | 女 | 2007-10-10 | | 1002 | 马冬梅 | 19 | 女 | 2006-09-09 | | 1003 | jack | 20 | 男 | 2005-08-06 | | 1004 | 马冬梅 | 18 | 女 | 1990-12-12 | | 1005 | 李四 | 21 | 男 | 1991-06-08 | | 1006 | 麻雷子 | 22 | 男 | 1992-10-10 | +------+--------+------+------+------------+ 6 rows in set (0.00 sec)
4.修改年龄19到20岁之间的同学姓名为马春梅:
mysql> update student set name='马春梅' where age between 19 and 20; Query OK, 2 rows affected (0.01 sec) Rows matched: 2 Changed: 2 Warnings: 0 mysql> select * from student; +------+--------+------+------+------------+ | no | name | age | sex | birthday | +------+--------+------+------+------------+ | 1001 | 马冬梅 | 18 | 女 | 2007-10-10 | | 1002 | 马春梅 | 19 | 女 | 2006-09-09 | | 1003 | 马春梅 | 20 | 男 | 2005-08-06 | | 1004 | 马冬梅 | 18 | 女 | 1990-12-12 | | 1005 | 李四 | 21 | 男 | 1991-06-08 | | 1006 | 麻雷子 | 22 | 男 | 1992-10-10 | +------+--------+------+------+------------+ 6 rows in set (0.00 sec)
3.10删除数据
语法结构:
delete from 表名[where 条件]
mysql> delete from student2 where no=1001 or no=1002; Query OK, 2 rows affected (0.14 sec)
最后
本期结束咱们下次再见👋~
🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗