数据库开发
在web开发中,一般将web应用程序分为三层
Controller
Service
Dao
数据存储
可以使用XML,但XML不便管理和维护,操作难度大.
在真实的企业开发中,都会采用数据库来存储和管理数据.
即Dao层直接访问数据库
什么是数据库
DataBase,数据存储和管理的仓库
操作数据库和数据库中的数据->数据库管理系统
DataBase Management System(DBMS)
操作和管理数据库的大型软件,可以直接操作和管理数据库.
需要通过SQL(Structured Query Language)语言
MySQL概述
连接
mysql -u用户名 -p密码 [-h数据库服务器的IP地址 -p端口号]
-h 默认为本地127.0.0.1的mysql服务器
-P参数不加,默认连接端口号为3306
数据模型
关系型数据库(RDBMS)
建立在关系数据模型上,由多张相互连接的二维表组成的数据库
二维表:即行和列组成的表
基于二维表存储数据的数据库就是关系型数据库
表存储数据,格式统一,便于维护
SQL语言操作,标准统一,方便查询
反之就是非关系型数据库
redis
使用键值对存储数据
数据模型
MySQL是关系型数据库
客户端->sql->DBMS->数据库->表
一个数据库服务器中可以创建多个数据库,数据库可以包含多张表,而表中又可以包含多行记录.
SQL介绍
Structured Query Language结构化查询语言
SQL通用语法
可以单行或者多行书写,以分号结尾
可以使用空格/缩进来增强语句的可读性
语句关键字不区分大小写
--单行注释
#单行注释
/*多行注释*/
SQL语句分类
DDL(Data Definition Language)
数据定义语言,用于定义数据库对象(数据库,表,字段)
DML(Data Manipulation Language)
数据操作语言,用来对数据库表中的数据进行增删改
DQL(Data Query Language)
数据查询语言,用来查询数据库中表的记录
DCL(Data Control Language)
数据控制语言,用来创建数据库用户,控制数据库的访问权限.
项目开发流程
需求文档->
设计->数据库
操作->Java程序
优化->优化操作
数据库的设计
1,根据页面原型和需求文档进行需求分析,然后进行项目设计和数据库设计
2,根据页面原型和需求文档,分析需求,实现业务功能,最终通过java程序完成数据的增删改查操作.
3,通过索引,sql优化,分库优化等操作实现数据库优化
DDL语句
database可以换成schema
show databases;
//查询所有数据库
select database;
//查询当前数据库
create database[if not exists]数据库名
//创建数据库
use 数据库名
//切换数据库
//操作表时需要先切换到对应的数据库
drop database[if exists] 数据库名
//删除不存在的数据库会报错
建表
id,创建时间,修改时间需要在所有表中添加作为隐藏字段
create table 表名(
字段 字段类型[约束] [comment 字段注释]
id int comment 'ID'
)[表注释]
约束
作用于表中字段上的规则,用于限制存储在表中的数据
保证数据库中数据的正确,有效和完整性
可以在表的创建或者修改时添加约束
NOT NULL
//非空约束
UNIQUE
//唯一约束
PRIMARY KEY
//主键约束(唯一非空)
DEFAULT
//默认约束(未指定值就使用默认值)
FOREIGN KEY
//外键约束(用来让两张表的数据之间建立联系)
AUTO_INCREMENT
//自增约束(一个正数序列从1开始自增)配合主键使用
查询
show tables
//查询当前数据库所有表
desc 表名
//查看指定表结构
show create table 表名
//查询指定表的建表语句
修改
alter table 表名 add 字段名 类型(长度) [comment注释] [约束]
alter table emp add qq varchar(11) comment 'QQ号'
alter table 表名 modify 字段名 新数据类型(长度)
alter table emp modify qq varchar(13)
alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释][约束]
alter table emp change qq qq_num varchar(13) comment 'QQ'
rename table 表名 to 表名
删除
alter table 表名 drop 字段名
alter table emp drop qq_num
drop table [if exists]表名
truncate table 表名 #删除指定表并重新创建表
delete from emp;#删除表的内容(不会删除表结构)
数据类型
数值类型
分为有符号数(SIGNED)和无符号数(UNSIGNED)
TINYINT -128-127
SMALLINT -32768-32767
MEDIUMINT
INT/INTEGER
BIGINT
FLOAT
DOUBLE
DECIMAL
字符串类型
CHAR #定长字符串 0-255bytes
VARCHAR #变长字符串 0-65535bytes
TINYBOLB #二进制短文本
TINYTEXT #短文本
BLOB #二进制较短文本
TEXT #较短文本
MEDIUMBLOB #二进制中等长度文本数据
MEDIUMTEXT #中等长度文本数据
LONGBLOB #二进制极大文本数据
LONGTEXT #极大文本数据
日期时间类型
DATE #YYYY-MM-DD 日期
TIME #HH:MM:SS 时间值或持续时间
YEAR #YYYY 年份值
DATETIME #YYYY-MM-DD HH:MM:SS 日期时间
TIMESTAMP #YYYY-MM-DD HH:MM:SS 混合时间戳
DML语句
增(insert)
字段顺序应与值顺序一一对应
insert into 表名(字段名1,字段名2..) values(值1,值2...)
Insert into 表名 values(值1,值2....)
#给全部字段添加数据
Insert into 表名 (字段名1,字段名2..) values(值1,值2....),(值1,值2....),(值1,值2....);
#批量指定添加数据
Insert into 表名 values(值1,值2....),(值1,值2....),(值1,值2....);
#批量添加数据
修改(update)
如果没有条件会修改整张表的全部语句
一般修改时需要同时修改公共字段update_time为当前时间
update 表名 set 字段名 = 值,字段名 = 值..[where 条件]
update emp set username = 'itheima1' where id = 1;
删除(delete)
delete from 表名 [where 条件];