茫茫人海千千万万,感谢这一秒你看到这里。希望我的文章对你的有所帮助!
愿你在未来的日子,保持热爱,奔赴山海!
1. 数据库的基本知识
1.1 为什么要学习数据库
首先,我们要知道我们保存的数据的方式有几种呢?
数据保存在内存
保存在内存的方式有:集合和数组的方式。int[] arr = new int[]{1, 2, 3, 4};
ArrayList<Integer>list = new ArrayList<Integer>();
list.add(1);
list.add(2);
new出来的对象存储在堆中,堆是内存中的一小块空间。
优点:内存速度快。
缺点:断电/程序退出,数据就清除了,不能保证永久保存数据。
数据保存在普通文件
优点:永久保存
缺点:查找,增加,修改,删除数据比较麻烦,效率低
给大家看看我珍藏多年的照片文件。
数据保存在数据库
优点:
永久保存,实现数据持久化。
使用完整的管理系统统一管理,易于查询,通过SQL语句比较方便的操作数据库,数据库是对大量的信息进行管理的高效的解决方案
可以看到,使用数据库的好处:
持久化数据到本地 。
可以实现结构化查询,方便管理。
1.2 数据库的概念
DB:数据库,存储数据的仓库。它保存了一系列有组织的数据。
DBMS:数据库管理系统,又称为数据库软件(产品)。数据库是通过 DBMS创建和操作的容器,用于管理DB中的数据 。
SQL:结构化查询语言,专门用来与数据库通信的语言即用于和DBMS通信的语言。
1.3 数据库存储数据的特点
数据库存储方式是将数据 放到表中,表再放到库中。
一个数据库中可以有多个 表,每个表都有一个的名字,用来标识自己。表名具有唯一性 。
表具有一些特性,这些特性定义了数据在表中如何存储,类似Java中类的设计。
表由列组成,我们也称为字段。所有表都是由一个或多个列组成的,每一列类似Java中的属性
表中的数据是按行存储的,每一行类似于Java中的对象。
1.4 常见的数据库
Oracle:收费的大型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MySQL。
MySQL:开源免费的数据库,小型的数据库。已经被Oracle收购了。
DB2 :IBM公司的数据库产品,收费的。常应用在银行系统中。
SQLServer:MicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。
SyBase:已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。
SQLite: 嵌入式的小型数据库,应用在手机端。
现在互联网当中,较为常用的数据库:Oracle和MySQL。
在Web应用中,使用的最多的就是MySQL数据库,原因如下:
开源、免费。最主要就是免费,也是我们现在着重学习的数据库。
功能足够强大,足以应付Web应用开发(最高支持千万级别的并发访问)。
1.5 数据库的卸载与安装
MySQL安装地址
1.5.1 MySQL目录结构
目录结构大概了解下,知道有什么就行啦:│-- bin:mysql相关的可执行文件.exe
│-- MySQLInstanceConfig.exe mysql的配置程序
│-- data: mysql自带的数据库文件(不用关注)
│-- include: c语言的头文件(不用关注)
│-- lib: 存放mysql使用到的dll动态库(相当于jar包,不用关注)
│-- my.ini mysql的配置文件,配置了mysql的相关信息
1.5.2 MySQL服务的启动和停止
MySQL服务的启动和停止有两种方式:
1.5.3 登录MySQL服务器和退出
MySQL是一个需要账户名密码登录的数据库,登陆后使用,它提供了一个默认的root账号,我们在使用安装时设置了密码,这个账号和密码就是超级用户管理员,直接登录就行。
方式1:在 DOS命令行输入:mysql -u用户名 -p密码
注意: u和p后面没有空格。
方式2 : 在 DOS命令行输入:mysql -hip地址 -u用户名 -p密码
退出MySQL的方式:exit或quit
演示在上面两个登录也已经演示了。
1.6 服务器与数据库、表、记录的关系
一个数据库就是一个文件夹
一张表表示一个文件
记录表示的是数据
2. MySQL基本语法
2.1 SQL语句的分类和语法
1. SQL是什么
(S tructured Q uery L anguage) 结构化查询语言,简称SQL。专门用来与数据库通信的语言。
2. 作用
通过SQL语句我们可以方便 的操作数据库、表、数据。
SQL是数据库管理系统都需要遵循的规范。不同的数据库生产厂商都支持SQL语句,但都有特有内容。
3. 分类
其中较为重点的是:DML和DQL。就是增删改查。
4. 规范
MySQL数据库的SQL语句不区分大小写,但建议关键字大写 ,表名、列名小写 。
SQL语句可以单行或多行书写,以分号结尾,即每条命令最好用分号结尾
每条命令根据需要,可以进行缩进或换行来增强可读性。
注释:
SQL特有的单行注释:#注释文字
单行注释:-- 注释文字
多行注释:/ 注释文字 /
3. DCL语言的学习
主要对用户的权限的操作。主要了解即可。
我们默认使用的MySQL安装的时候带着的超级管理员用户:root用户,拥有全部的权限。但是,一个公司里面的数据库服务器上面可能同时运行着很多个项目的数据库。所以,我们应该可以根据不同的项目建立不同的用户,分配不同的权限来管理和维护数据库。
1. 创建用户
语法:CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
解释:
主机名 :指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%
密码 :该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器
演示下:-- user1用户只能在localhost这个IP登录mysql服务器
CREATE USER 'user1'@'localhost' IDENTIFIED BY '123';
-- user2用户可以在任何电脑上登录mysql服务器
CREATE USER 'user2'@'%' IDENTIFIED BY '123';
2. 授权用户
用户创建之后,不像root超级管理员,它基本没什么权限!需要给用户授权。
语法:GRANT 权限1, 权限2... ON 数据库名.表名 TO '用户名'@'主机名';
解释:
GRANT 授权关键字。
授予用户的权限,如SELECT ,INSERT ,UPDATE 等。如果要授予所的权限则使用ALL 。
数据库名.表名:该用户可以操作哪个数据库的哪些表。如果要授予该用户对所有数据库和表的相应操作权限则可用</em>表示,如*.<em> 。
演示下,给user1用户分配对test这个数据库操作的权限:GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON test. TO 'user1'@'localhost';
3. 撤销授权
4. 查看权限
5. 删除用户
语法:DROP USER '用户名'@'主机名';
演示下,删除user2:DROP USER 'user2'@'%';
6. 修改密码
需要在未登陆MySQL的情况下操作。而且需要知道原来的密码情况下。
4. DDL语言的学习
库和表的管理。
1. 库的管理
1.1 创建数据库
既然我们MySQL都有了对吧,那不就得创建一个属于我们自己的数据库,那怎么创建呢?这里创建的关键字为:CREATE。CREATE DATABASE 数据库名;
这个可以直接创建数据库,但是如果不确定数据库存不存在,存在还有必要创建吗,而且再创建也会报错,那这个时候就需要一个关键词:IF NOT EXISTS判断是否不存在。CREATE DATABASE IF NOT EXISTS 数据库名;
在创建的过程中,我们也可以指定一个字符集给这个数据库,默认字符集为UTF-8。CREATE DATABASE 数据名 DEFAULT CHARACTER SET 字符集;
直接演示下:CREATE DATABASE stu;
CREATE DATABASE IF NOT EXISTS stu;
CREATE DATABASE stu2 CHARACTER SET gbk;
1.2 查看数据库
既然创建了数据库,那我们该如何去查看呢?这里查看的关键字为:SHOW。
1.3 修改和删除数据库
修改数据库字符集
修改的关键词:ALTER。ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;
直接演示下,把刚才设置的stu2的数据库的gbk字符集改为uft8。ALTER DATABASE stu2 DEFAULT CHARACTER SET utf8;
删除数据库
删除的关键词:DROP。DROP DATABASE 数据库名;
一般我们也不知道这个数据库存不存在,我们就可以添加IF EXISTS判断是否存在。DROP DATABASE IF EXISTS 数据库名;
演示下,把stu2的数据库删除掉。嘿嘿,删库跑路是不可能滴。DROP DATABASE stu2;
SHOW DATABASES;
1.4 使用数据库
1.5 小结
DDL语句操作数据库关键字创建CREATE DATABASE 数据库名;修改ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;查看SHOW DATABASES;删除DROP DTABASE 数据库名;2. 表的管理
注意事项:每次要使用表前,都要先使用某个数据库,确定你在那个数据库中!
2.1 创建表
我们在创建数据库后,就相当于创建了一个文件夹,那我们就需要创建一个可以来保存的数据的文件对吧,那接下来我们先来创建表。创建的关键词:CREATE。CREATE TABLE 表名 (字段名1 字段类型1, 字段名2 字段类型2);
是不是觉得这样写觉得不好看,上面有提到SQL规范中,可以适当的缩进或换行来增加可读性:CREATE TABLE 表名 (
字段名1 字段类型1,
字段名2 字段类型2
);
而且如果我们无法判断这个表是否存在,我们也可以用IF NOT EXISTS这个关键词来判断是否不存在。CREATE TABLE IF NOT EXISTS 表名 (字段名1 字段类型1, 字段名2 字段类型2);
那这其中的字段名是我们起的名字,那这个字段类型有什么类型呢:
MySQL常用的数据类型有:
int:整型。
double:浮点型。
varchar:字符串类型。
date:日期类型。只有年月日,没有时分秒。"yyyy-MM-dd"。
比较详细的数据类型如下:
演示一下创建表格吧:CREATE TABLE student (
id INT,
name VARCHAR(20),
birthday DATE
);
后面我直接用SQLyog这个软件演示吧,毕竟这个DOS命令敲起来没有这个图像客户端方便。
如果没有安装SQLyog的,可以去上面我在安装MySQL里面有教大家,一般如果全跟着完成的话,就有了。如果你还想要DOS命令来训练,当然我不反对。嘿嘿!加油。
2.2 查看表
既然我们创建了表,那就看看我们创建了什么表对吧。查看的关键词:SHOW,DESC。
2.3 复制表
复制表,不复制数据内容,相当于把表结构复制过去。CREATE TABLE 表名 LIKE 其他表;
演示下:CREATE TABLE s1 LIKE student;
SHOW TABLES;
DESC s1 ;
2.4 删除表
直接删除表DROP TABLE 表名;
如果无法判断表名是否存在,就可以使用IF EXISTS这个关键词来判断是否存在。DROP TABLE IF EXISTS 表名;
演示一下:SHOW TABLES;
DROP TABLE s1;
SHOW TABLES;
DROP TABLE s1;
DROP TABLE IF EXISTS s1;
2.5 修改表
一般来说,我们创建了表,就不怎么需要修改了,但是需求总是会有。修改的关键词:ALTER。而修改的语句一般都是ALTER TABLE 表名 xxx。
添加表一列 ,添加关键词ADD。ALTER TABLE 表名 ADD 字段名 字段类型;
演示,在student表中增加一个age,类型为int的一列。ALTER TABLE student ADD age INT;
DESC student;
修改字段类型 ,添加关键词MODIFY。ALTER TABLE 表名 MODIFY 字段名 新类型;
演示一下,把student表中的name字段的改成varchar(10)。ALTER TABLE student MODIFY name VARCHAR(10);
DESC student;
修改字段名 ,关键词:CHANGE。ALTER TABLE 表名 CHANGE 老字段名 新字段名 类型;
演示一下,把student表中的name字段的改成sName,类型为varchar(20)。ALTER TABLE student CHANGE NAME sName VARCHAR(20);
DESC student;
删除字段 ,删除的关键词:DROP。ALTER TABLE 表名 DROP 字段名;
演示下,删除student表中的字段age。ALTER TABLE student DROP age;
DESC student;
修改表名,即重命名表名,关键词:RENAME。RENAME TABLE 表名 TO 新表名;
演示一下,将student表改名成student2表。RENAME TABLE student TO student2;
SHOW TABLES;
修改表的字符集 ,没有设置字符集,默认为utf8。ALTER TABLE 表名 DEFAULT CHARACTER SET 新字符集;
演示一下,将student2表的编码修改成gbk>。ALTER TABLE student2 DEFAULT CHARACTER SET gbk;
2.6 小结
DDL语句操作表关键字创建CREATE TABLE 表名;修改ALTER TABLE 表名 xxx;查看SHOW TABLES;删除DROP TABLE 表名;
5. DML语言的学习
主要对表中的数据进行增删改。
先创建一个beauty表,其中包含了id,name,sex,birthday,phone字段。CREATE TABLE beauty(
id INT,
NAME VARCHAR(20),
sex CHAR(2),
birthday DATE,
phone VARCHAR(15)
);
这样就先把表创建了,接下来的操作都是对这里面操作。
下面的学习,都对表进行操作更新,现在还没有到学习查询语句,这里先教大家一句查看表中的所有数据:SELECT FROM beauty;
1. 插入数据
插入方法有两种,我们一个一个学习:
插入关键词:INSERT INTO。
1.1 第一种插入方式
1.2 第二种插入方式
相对第一种,语法更为简单点。
语法:INSERT INTO 表名 set 字段=值, 字段2=值2,...;
应用:
重新添加一条数据:INSERT INTO beauty
SET id=5, NAME='诸葛大力', sex='女', birthday='1995-05-23';
SELECT FROM beauty;
1.3 两种方式的比较
方式一支持多行插入,而方式二不支持。INSERT INTO beauty VALUES
(6, '娄艺潇', '女', '1988-12-27', '16689540123'),
(7, '陈美嘉', '女', '1985-11-21', '16689540123'),
(8, '刘萌萌', '女', '1990-10-16', '16689540123');
SELECT * FROM beauty;
方式一支持子查询(后面详细讲解),而方式二不支持。INSERT INTO beauty (id, NAME , sex ,birthday)
SELECT 9, '赵雯', '女', '1987-10-28';
SELECT FROM beauty;
所以方式一的插入方法使用较多。
1.4 在DOS命令窗口操作数据乱码问题
我们现在都是在SQLyog软件进行操作数据,它本身字符集和MySQL服务器的字符集对应了,所以不会出现乱码。但是当我们使用DOS命令行进行SQL语句操作如有有中文会出现乱码,导致SQL执行失败。
具体出现的原因:
因为我们MySQL的客户端设置编码是utf8,而系统的DOS命令行编码是gbk,编码不一致导致的乱码。
那如何解决呢:
在DOS命令行下输入:set names gbk;就是让现在服务器使用gbk编码。
注意:以上方式为临时方案,退出DOS命令行就失效了,需要每次都配置。
修改MySQL安装目录下的my.ini文件,重启服务所有地方生效。此方案将所有编码都修改了,所以并不推荐。
2. 修改更新数据
修改表的关键词:UPDATEA。
3. 删除表中数据
删除也有两种方式:
第一种的关键词:DELETE。可以带WHERE进行筛选。
第二种的关键词:TRUNCATE。不可以带WHERE进行筛选。直接就是表中数据全部删除。
3.1 第一种删除方式
带WHERE筛选条件删除数据,删除掉满足条件的数据。DELETE FROM 表名 WHERE 条件;
不带WHERE筛选条件删除数据,直接相当于删除表中所有数据。嘿嘿删表删库跑路,真的刺激。DELETE FROM 表名;
具体演示下:
带条件删除数据,删除id为9的记录DELETE FROM beauty WHERE id = 9;
SELECT FROM beauty;
可以删除多条的记录吗:DELETE FROM beauty WHERE id = 8, id = 7;
这样肯定不行的,会报错:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' id = 7' at line 1
所以可以这样做:
DELETE FROM beauty WHERE id IN (7, 8);
SELECT * FROM beauty;
不带条件删除数据,删除表中的所有数据,这里的表我是有备份的,可以看我操作即可,等后面学到备份再来删除不香吗,或者你还想,然后再添加进去即可。DELETE FROM beauty;
SELECT FROM beauty;
3.2 第二种删除方式
相对第一种而言,它更加的暴力,只能全部删除掉数据了。是不是很暴力。
3.3 两种方式大PK
4. 小结
DML语句操作表关键字插入第一种:INSERT INTO 表名 (字段1, 字段2...) values(字段值1, 字段值2....);<br />第二种:INSERT INTO 表名 SET 字段1 = 字段值1,字段2 = 字段值2;修改UPDATE 表名 SET 字段1= 字段值1, 字段2 = 字段值2... 【WHERE 筛选条件】;删除第一种:DELETE FROM 表名 【WHERE 筛选条件】;<br />第二种:TRUNCATE TABLE 表名;
6. 完结
相信各位看官看到这里都会MySQL有了一定了解吧,当然还没有涉及到的,由于篇幅限制,查询篇我放在了下一篇中啦。查询对我们还是挺重要,对于初级程序员来说,使用最多就是查询语句了。
而我们在实际应用,MySQL还是占非常大的一个主流,我们今天了解一个MySQL的基础系列,对以后的一些高级应用,调优都是有一定的帮助。并且面试中比较常问的面试题中都有MySQL的身影,所以MySQL的学习也是必不可少滴!
我们还是小小的总结下吧:DCL: 主要对用户的权限的操作
创建用户: CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
授权用户: GRANT 权限1, 权限2... ON 数据库名.表名 TO '用户名'@'主机名';
撤销授权: REVOKE 权限1, 权限2... ON 数据库名.表名 FROM '用户名'@'主机名';
查看权限: SHOW GRANTS FOR '用户名'@'主机名';
删除用户: DROP USER '用户名'@'主机名';
DDL:库和表的管理。
创建数据库: CREATE DATABASE 数据库名;
创建表: CREATE TABLE 表名 (字段名1 字段类型1, 字段名2 字段类型2);
修改数据库: ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;
修改表: ALTER TABLE 表名 一些操作;
删除数据库: DROP DATABASE 数据库名;
删除表: DROP TABLE 表名;
DML:主要对表中的数据进行增删改。
插入数据: INSERT INTO 表名 (字段名1, 字段名2, 字段名3, ...) VALUES (值1, 值2, 值3, ...);
修改数据: UPDATE 表名 SET 字段名=字段值;
删除数据: DELETE FROM 表名;
当然啦,更多语句命令的一些细节,希望大家可以仔细学习!
学到这里,今天的世界打烊了,晚安!虽然这篇文章完结了,但是我还在,永不完结。我会努力保持写文章。来日方长,何惧车遥马慢!
感谢各位看到这里!愿你韶华不负,青春无悔!
注: 如果文章有任何错误和建议,请各位大佬尽情留言!如果这篇文章对你也有所帮助,希望可爱亲切的您给个三连关注下,非常感谢啦!