数据库
数据库概念
什么是数据库?
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。简单来说,数据库就是管理数据的一个库。
常见的数据库分为关系型数据库和非关系型数据库:
- 关系型数据库:关系型数据库是一种基于关系模型的数据库,关系模型折射现实世界中的实体关系,将现实世界中各种实体及实体之间的关系通过关系模型表达出来。如下图所示:
常见的关系型数据库:MySQL、MariaDB(MySQL的代替品,英文维基百科从MySQL转向MariaDB)、Percona Server(MySQL的代替品·)、PostgreSQL、Microsoft Access、Microsoft SQL Server、Google Fusion Tables、FileMaker、Oracle数据库、Sybase、dBASE、Clipper、FoxPro、foshub。 - 非关系型数据库:指非关系型的,分布式的,且一般不保证遵循ACID原则的数据存储系统。
非关系型数据库以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,不局限于固定的结构,可以减少一些时间和空间的开销。
常见的非关系型数据库:BigTable(Google)、Cassandra、MongoDB、CouchDB。
链接: 简述关系型数据库和非关系型数据库.
Mysql数据库
Mysql数据库安装
链接: 数据库Mysql安装.
Mysql数据库作用
- mysql服务端,它来处理具体数据维护,保存磁盘。
- mysql客户端,CRUD新增,修改,删除,查询。
Mysql数据库配置
mysql安装目录下查找my.ini文件:
如果没有该文件可以新建一个txt文件,内容为:
[mysqld]
# 设置mysql的安装目录,也就是刚才我们解压的目录
basedir=C:/mysql-8.0.13-winx64
# 设置mysql数据库的数据的存放目录
# datadir=C:/mysql-8.0.13-winx64/data
# 设置默认使用的端口
port=3306
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人试图攻击数据库
max_connect_errors=10
# 服务端使用的字符集
character-set-server=utf8mb4
# 数据库字符集对应一些排序等规则使用的字符集
collation-server=utf8mb4_general_ci
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件作为认证加密方式
# MySQL8.0默认认证加密方式为caching_sha2_password
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
port=3306
然后修改文件为:my.ini
Mysql数据库的使用
数据库结构
数据库–>表–>记录(行,列,属性)
SQL语句
1.定义:
结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ “S-Q-L”),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
2.分类:
- DML(Data Manipulation Language)数据操纵语言
如:insert,delete,update,select(插入、删除、修改、检索)简称CRUD操新增Create、查询Retrieve、修改Update、删除Delete - DDL(Data Definition Language)数据库定义语言
如:create table之类 - DCL(Data Control Language)数据库控制语言
如:grant、deny、revoke等,只有管理员才有相应的权限 - DQL (Data Query Language):数据查询语言
注意:SQL不区分大小写
3.数据库常用操作:
客户端操作:根据软件提示操作就行。
DOS命令框操作:
- 启动MySQL服务:
net start mysql
—>mysql 服务正在启动, —》 服务已成功启动 - 停止MySQL服务:
net stop mysql
—>mysql 服务正在停止, —》 服务已成功停止 - 进入MySQL数据库系统:
mysql -u root -p 密码
(一般密码为root,例如:mysql -u root -p root
)回车
–1.数据库
查看库:show databases;
(注意有分号)
创建库:create database 库名;
删除库:drop database 库名;
使用/打开库:use 库名;
显示当前使用的数据库:select database();
–2.表
查看表:先use 库名
打开指定数据库,然后使用show tables;
打开指定库的表。
获取表结构: desc 表名;
,或者show columns from 表名;
创建表:create table 表名(字段名 字段类型(长度),字段2,.....);
删除表:drop table 表名;
修改表:alter table 表名 add column 字段名 字段类型(长度);
–3.记录!!!
- 创建:
insert into 表名 values('字段1的值',"字段2的值",.......);
指定字段赋值:insert into 表名(字段1,字段2) values('字段1的值',"字段2的值");
正文乱码:set names gbk;
切换编码格式 - 修改:
update 表名 set 字段名=新的字段值;
修改表中数据:update 表名 set 字段=新值,… where 条件;
例如: update 表名 set name=‘Mary’ where id=1; - 删除:
delete from 表名;
(删除表中所有数据)
删除表中数据:delete from 表名 where 表达式
查询:select * from 表名;
- 查询:
select * from 表名;
查询所有行:select <字段1,字段2,…> from < 表名 > where < 表达式 >
例如:查看表 MyClass 中所有数据:mysql> select * from MyClass;
按照某字段排序:select * from 表名 order by 字段名 desc;
前两行数据:select * from 表名 limit 0,2;
- 更改表名:
rename table 原表名 to 新表名;
例如:rename table 旧表名 to 新表名;
更新字段内容
update 表名 set 字段名 = 新内容
update 表名 set 字段名 = replace(字段名,‘旧内容’,‘新内容’);
–4.数据类型
命名规则
- 字段名必须以字母开头,尽量不要使用拼音
- 长度不能超过30个字符(不同数据库,不同版本会有不同)
- 不能使用SQL的保留字,如where,order,group
- 只能使用如下字符az、AZ、0~9、$ 等
- Oracle习惯全大写:USER_NAME,mysql习惯全小写:user_name
- 多个单词用下划线隔开,而非java语言的驼峰规则
字段类型:
1.INT[(M)] 型: 正常大小整数类型
2.DOUBLE[(M,D)] [ZEROFILL] 型: 正常大小(双精密)浮点数字类型
3.DATE 日期类型:支持的范围是1000-01-01到9999-12-31。MySQL以YYYY-MM-DD格式来显示DATE值,但是允许你使用字符串或数字把值赋给DATE列
4.CHAR(M) 型:定长字符串类型,当存储时,总是是用空格填满右边到指定的长度
5.BLOB TEXT类型,最大长度为65535(2^16-1)个字符。
6.VARCHAR型:变长字符串类型
字段约束:
主键约束
主键约束:如果为一个列添加了主键约束,那么这个列就是主键,主键的特点是唯一且不能为空。通常情况下,每张表都会有主键。
添加主键约束,例如将id设置为主键:
- 主键自增策略** **当主键为数值类型时,为了方便维护,可以设置主键自增策略(auto_increment),设置了主键自增策略后,数据库会在表中保存一个AUTO_INCREMENT变量值,初始值为1,当需要id值,不需要我们指定值,由数据库负责从AUTO_INCREMENT获取一个id值,作为主键值插入到表中。而且每次用完AUTO_INCREMENT值,都会自增1
. AUTO_INCREMENT=1
create table 表名(id int primary key auto_increment);
非空约束
非空约束:如果为一个列添加了非空约束,那么这个列的值就不能为空,但可以重复。
添加非空约束,例如为password添加非空约束:
create 表名 user(
id int primary key auto_increment,
password varchar(50) not null
);
唯一约束
唯一约束:如果为一个列添加了唯一约束,那么这个列的值就必须是唯一的(即不能重复),但可以为空。
添加唯一约束,例如为username添加唯一约束及非空约束:
create table test(
id int primary key auto_increment,
username varchar(50) unique--唯一约束
);
–5.常用函数
lower
SELECT 'ABC',LOWER('ABC') from dept; --数据转小写
upper
select upper(dname) from dept --数据转大写
length
select length(dname) from dept --数据的长度
substr
SELECT dname,SUBSTR(dname,1,3) FROM dept; --截取[1,3]
concat
select dname,concat(dname,'123') X from dept --拼接数据
replace
select dname,replace(dname,'a','666') X from dept --把a字符替换成666
ifnull
select ifnull(comm,10) comm from dept2 #判断,如果comm是null,用10替换
round & ceil & floor
round四舍五入,ceil向上取整,floor向下取整
–直接四舍五入取整
select comm,round(comm) from emp
–四舍五入并保留一位小数
select comm,round(comm,1) from emp
–ceil向上取整,floor向下取整
select comm,ceil(comm) ,floor(comm) from emp
uuid
SELECT UUID()
返回uuid:a08528ca-741c-11ea-a9a1-005056c00001
now
select now() -- 年与日 时分秒
select curdate() --年与日
select curtime() --时分秒
year & month & day
–hour()时 minute()分 second()秒
select now(),hour(now()),minute(now()),second(now()) from emp ;
–year()年 month()月 day()日
select now(),year(now()),month(now()),day(now()) from emp ;
转义字符
'作为sql语句符号,内容中出现单撇就会乱套,进行转义即可
select 'ab'cd' -- 单引号是一个SQL语句的特殊字符
select 'ab\'cd' --数据中有单引号时,用一个\转义变成普通字符