数据库(DataBase,DB):指长期保存在计算机的存储设备上,按照一定规则组织起来,可
以被各种用户或应用共享的数据集合。
数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的
大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的
安全性和完整性。用户通过数据库管理系统访问数据库中的数据。
数据库软件应该为数据库管理系统,数据库是通过数据库管理系统创建和操作的。
数据库:存储、维护和管理数据的集合。
数据库分类
1.关系型数据库(sql)
2.非关系型数据库(nosql)
常见关系型数据库
Oracle:是Oracle公司的数据库产品
Mysql: 最早属于瑞典的MysqlAB公司的,后被Sun公司收购,Sun在2009年4月20号被
Oracle收购。
SQLServer:微软旗下的数据库产品
Access:微软旗下的数据库产品
DB2:IBM公司旗下的数据库产品
常见的非关系型数据库
HBase是一个分布式的、面向列的开源数据库
MongoDB是一个基于分布式文件存储的数据库
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key
Value数据库,并提供多种语言的API
修改mysql root用户密码
1.停止mysql服务 运行输入services.msc 停止mysql服务 或者 cmd --> net stop mysql
2.在cmd下 输入 mysqld --skip-grant-tables 启动服务器 光标不动 (不要关闭该窗口)
3.新打开cmd 输入mysql -u root -p 不需要密码
use mysql; update user set password=password('abc') WHERE User='root';
4.关闭两个cmd窗口 在任务管理器结束mysqld 进程
5.在服务管理页面 重启mysql 服务,密码修改完成
解决编码问题
当我们在mysql5.7数据库中创建默认表的时候默认是latin1 编码集即是iso-8859-1 这样的编
码集我们向表中出入数据的时候是无法插入中文的
创建数据库时候可以指定编码集为gbk/utf8
create database mydb4 character set 'utf8';
create database mydb4 character set 'gbk';
以后再在此数据库中创建的表是默认gbk/utf8的编码
数据库已经默认存在了而且编码集是latin1,那么我们可以在创建表的时候指定表的默认编码
集,在建表语句的最后添加DEFAULT CHARSET=utf8或gbk
CREATE TABLE t_1 (
id int(11)
)DEFAULT CHARSET=utf8;
或
CREATE TABLE t_1 (
id int(11)
)DEFAULT CHARSET=gbk;
数据库已经默认存在了,表也默认存在了还是latin1编码集
修改表的编码集
alter table 表名 convert to character set utf8;
或
alter table 表名 convert to character set gbk;
修改数据库编码集
alter database 数据库名 character set utf8;
或
alter database 数据库名 character set gbk;
SQL:Structure Query Language。(结构化查询语言)
Sql的分类
DDL(Data Defifinition Language):数据定义语言,用来定义数据库对象:库、表、列等;
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
DQL(重要)(Data Query Language):数据查询语言,用来查询记录(数据)。 注意:sql
语句以;结尾
DDL操作
定义:操作数据库、表、列等
使用的关键字:CREATE、 ALTER、 DROP
操作数据库
创建
Create database mydb1;
Create database mydb2 character set gbk;
Create database mydb3 character set gbk COLLATE gbk_chinese_c
查询
查看当前数据库服务器中的所有数据库
Show databases;
查看前面创建的mydb2数据库的定义信息
Show create database mydb2;
删除前面创建的mydb3数据库
Drop database mydb3;
查看服务器中的数据库,并把mydb2的字符集修改为utf8;
alter database mydb2 character set utf8;
删除
Drop database mydb3
查看当前使用的数据库
Select database();
切换数据库
Use mydb2
操作数据表
create table 表名(
字段1 字段类型,
字段2 字段类型,
...
字段n 字段类型
);
常用数据类型
int:整型
double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为
999.99;
char:固定长度字符串类型;
char(10): 'aaa ' 占10位
varchar:可变长度字符串类型;
varchar(10): 'aaa' 占3为
text:字符串类型;
blob:字节类型;
date:日期类型,格式为:yyyy-MM-dd;
time:时间类型,格式为:hh:mm:ss
timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss 会自动赋值
datetime:日期时间类型 yyyy-MM-dd hh:mm:ss
boolean:mysql不支持,oracle支持
DML操作
DML是对表中的数据进行增、删、改的操作。不要与DDL混淆了。
INSERT 、UPDATE、 DELETE 小知识:在mysql中,字符串类型和日期类型都要用单引号括
起来。空值:null
插入操作
语法:
INSERT INTO 表名(列名1,列名2 ...)VALUES(列值1,列值2...);注意:列名与列值的类型、
个数、顺序要一一对应。
可以把列名当做java中的形参,把列值当做实参。值不要超出列定义的长度。如果插入空
值,请使用null插入的日期和字符一样,都使用单引号括起来。
查看数据库编码的具体信息
Show variables like 'character%';
临时更改客户端和服务器结果集的编码
Set character_set_client=gbk;
Set character_set_results=gbk;
INSERT INTO emp1 select * from emp 将emp表的所有数据复制到emp1中
1.mysql不支持select into
2.在复制时是按照列的顺序依次进行
3.新表的列与原来表的列的名字,类型都可以不一样,照样复制成功.但是会出现数据转换错误.
具体的:名字不一样,问题不大.类型不一样,出现错误,比如将int型的数据强制转换成varchar型,
会显示0,反之亦然
修改操作
UPDATE 表名 SET 列名1=列值1,列名2=列值2 。。。 WHERE 列名=值
删除操作
DELETE FROM 表名 【WHERE 列名=值】
truncate和delete的区别
DELETE 删除表中的数据,表结构还在;删除后的数据可以找回 TRUNCATE 删除是把表直接
DROP掉,然后再创建一个同样的新表。 Truncate删除的数据不能找回。执行速度比DELETE
快
DQL操作
DQL数据查询语言 (重要)
数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。查询返回的
结果集是一张虚拟表。
语法
SELECT 列名 FROM 表名
【WHERE --> GOUP BY -->HAVING--> ORDER BY LIMIT】
条件查询
语法
条件查询介绍
条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:
=、!=、<>、<、<=、>、>=;BETWEEN…AND;IN(set);IS NULL; AND;OR;NOT,XOR
(逻辑异或);
模糊查询
语法
当想查询姓名中包含a字母的学生时就需要使用模糊查询了。模糊查询需要使用关键字LIKE。
通配符:
_ 任意一个字母
%:任意0~n个字母 '张%'
正则表达式:
MySQL 同样也支持其他正则表达式的匹配, MySQL中使用 REGEXP 操作符来进行正则表达
式匹配。
模式 描述
^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属
性,^ 也匹配 '\n' 或 '\r' 之后的位置。
$ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,
$ 也匹配 '\n' 或 '\r' 之前的位置。
. 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请
使用象 '[.\n]' 的模式。
[...] 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配
"plain" 中的 'a'。
[^...] 负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配
"plain" 中的'p'。
p1|p2|p3 匹配 p1 或 p2 或 p3。例如,'z|food' 能匹配 "z" 或
"food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等
价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",
但不能匹配 "z"。+ 等价于 {1,}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的
'o',但是能匹配 "food" 中的两个 o。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。
去除重复记录
去除重复记录(两行或两行以上记录中系列的上的数据都相同),例如emp表中sal字段就存
在相同的记录。当只查询emp表的sal字段时,那么会出现重复记录,那么想去除重复记录,
需要使用DISTINCT:
聚合函数是用来做纵向运算的函数:
COUNT():统计指定列不为NULL的记录行数;
MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
分组查询
当需要分组查询时需要使用GROUP BY子句,例如查询每个部门的工资和,这说明要使用部
门来分组。
注:凡和聚合函数同时出现的列名,则一定要写在group by 之后
having与where的区别:
1.having是在分组后对数据进行过滤.
where是在分组前对数据进行过滤
2.having后面可以使用分组函数(统计函数)
where后面不可以使用分组函数。
WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参
加分组;而HAVING是对分组后数据的约束
LIMIT
LIMIT用来限定查询结果的起始行,以及总行数。
其他知识
查询语句书写顺序
select – from- where- group by- having- order by-limit
查询语句执行顺序
from - where -group by - having - select - order by-limit
运算符的优先级
最高优先级为: !、BINARY、 COLLATE