【JavaWeb学习Day09】
数据库
定义
1.数据库:DataBase(DB),是存储和管理数据的仓库。
2.数据库管理系统:DataBase Management System(DBMS),操纵和管理数据库的大型软件。
3.SQL:Structured Query Language,操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准。
一、MySQL概述
1.安装(省略)
MySQL连接:
mysql -u用户名 -p密码 -h要连接的mysql服务器的ip地址(默认127.0.0.1) -P端口号(默认3306)
2.数据模型
关系型数据库:建立在关系模型基础上,由多张相互连接的二维表组成的数据库
特点;
1.使用表存储数据,格式统一,便于维护。
2.使用SQL语言操作,标准统一,使用方便,可用于复杂查询。
二、SQL语句
1.SQL
sql:一门操作关系型数据库的编程语言,定义操作所有关系型数据库的统一标准。
分类:
2.DDL
-
查询数据库
-
查询所有数据库
show databases;
-
查询当前数据库
select database();
-
创建数据库
-
语法:
create database [ if not exists ] 数据库名 [default charset utf8mb4];
-- 数据库不存在,则创建该数据库;如果存在则不创建
create database if not exists itcast;
-
使用数据库
-
语法:
use 数据库名 ;
-
删除数据库
-
语法:
drop database [ if exists ] 数据库名 ;
-
如果删除一个不存在的数据库,将会报错。
-
可以加上参数 if exists ,如果数据库存在,再执行删除,否则不执行删除。
-
-
案例:删除itcast数据库
drop database if exists itcast; -- itcast数据库存在时删除
说明:上述语法中的database,也可以替换成 schema
-
如:create schema db01;
-
如:show schemas;
3.图形化工具
-
介绍
前面我们讲解了DDL中关于数据库操作的SQL语句,在我们编写这些SQL时,都是在命令行当中完成的。大家在练习的时候应该也感受到了,在命令行当中来敲这些SQL语句很不方便,主要的原因有以下 3 点:
-
没有任何代码提示。(全靠记忆,容易敲错字母造成执行报错)
-
操作繁琐,影响开发效率。(所有的功能操作都是通过SQL语句来完成的)
-
编写过的SQL代码无法保存。
在项目开发当中,通常为了提高开发效率,都会借助于现成的图形化管理工具来操作数据库。
目前MySQL主流的图形化界面工具有以下几种:
DataGrip是JetBrains旗下的一款数据库管理工具,是管理和开发MySQL、Oracle、PostgreSQL的理想解决方案。
官网: DataGrip:由 JetBrains 开发的数据库和 SQL 跨平台 IDE
DDL-表结构-创建
创建表的语法:
-- 创建表
create table user(
id int comment 'ID,唯一标识',
username varchar(50) comment '用户名',
name varchar(10) comment '姓名',
age int comment '年龄',
gender char(1) comment '性别'
) comment '用户信息表';
SHOW VARIABLES LIKE 'character_set%';
约束:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
目的:保证数据库中数据的正确性、有效性和完整性。
create table user(
id int primary key auto_increment comment 'ID,唯一标识',-- 主键约束 anto_increment
username varchar(50) not null unique comment '用户名',-- 非空,唯一
name varchar(10) not null comment '姓名',-- 非空
age int comment '年龄',
gender char(1) default '男' comment '性别'-- 默认
) comment '用户信息表';
主键自增:auto_increment
-
每次插入新的行记录时,数据库自动生成id字段(主键)下的值
-
具有auto_increment的数据列是一个正数序列开始增长(从1开始自增)
数据类型:
1.数值类型:
类型 | 大小(byte) | 有符号(SIGNED)范围 | 无符号(UNSIGNED)范围 | 描述 | 备注 |
---|---|---|---|---|---|
tinyint | 1 | (-128,127) | (0,255) | 小整数值 | |
smallint | 2 | (-32768,32767) | (0,65535) | 大整数值 | |
mediumint | 3 | (-8388608,8388607) | (0,16777215) | 大整数值 | |
int | 4 | (-2147483648,2147483647) | (0,4294967295) | 大整数值 | |
bigint | 8 | (-2^63,2^63-1) | (0,2^64-1) | 极大整数值 | |
float | 4 | (-3.402823466 E+38,3.402823466351 E+38) | 0 和 (1.175494351 E-38,3.402823466 E+38) | 单精度浮点数值 | float(5,2):5表示整个数字长度,2 表示小数位个数 |
double | 8 | (-1.7976931348623157 E+308,1.7976931348623157 E+308) | 0 和 (2.2250738585072014 E-308,1.7976931348623157 E+308) | 双精度浮点数值 | double(5,2):5表示整个数字长度,2 表示小数位个数 |
decimal | 小数值(精度更高) | decimal(5,2):5表示整个数字长度,2 表示小数位个数 |
数值类型的选取原则: 在满足业务需求的前提下, 尽可能选择占用磁盘空间小的数据类型
2.字符串类型:
类型 | 大小 | 描述 |
---|---|---|
char | 0-255 bytes | 定长字符串 |
varchar | 0-65535 bytes | 变长字符串 |
tinyblob | 0-255 bytes | 不超过255个字符的二进制数据 |
tinytext | 0-255 bytes | 短文本字符串 |
blob | 0-65 535 bytes | 二进制形式的长文本数据 |
text | 0-65 535 bytes | 长文本数据 |
mediumblob | 0-16 777 215 bytes | 二进制形式的中等长度文本数据 |
mediumtext | 0-16 777 215 bytes | 中等长度文本数据 |
longblob | 0-4 294 967 295 bytes | 二进制形式的极大文本数据 |
longtext | 0-4 294 967 295 bytes | 极大文本数据 |
如果一个字段的长度是固定的,建议使用char;如:身份证、手机号
如果一个字段的长度不是固定的,建议使用varchar;如:用户名、姓名
3.日期时间类型:
类型 | 大小(byte) | 范围 | 格式 | 描述 |
---|---|---|---|---|
date | 3 | 1000-01-01 至 9999-12-31 | YYYY-MM-DD | 日期值 |
time | 3 | -838:59:59 至 838:59:59 | HH:MM:SS | 时间值或持续时间 |
year | 1 | 1901 至 2155 | YYYY | 年份值 |
datetime | 8 | 1000-01-01 00:00:00 至 9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
timestamp | 4 | 1970-01-01 00:00:01 至 2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值,时间戳 |
案例:根据页面原型,设计员工表
1.阅读并分析页面原型及需求
2.分析表中包含那些字段,以及字段的类型、约束
3.创建表结构
-- 案例:设计员工表 emp
-- 基础字段:id 主键:create_time 创建时间:update_time 修改时间
create table emp(
id int unsigned primary key auto_increment comment 'ID,主键',
username varchar(20) not null unique comment '用户名',
password varchar(32) default '123456' not null comment '密码',
name varchar(10) not null comment '姓名',
gender tinyint unsigned not null comment '性别,1 男:2 女',
phone char(11) not null comment '手机号',
job tinyint unsigned comment '职位,1 班主任,2 讲师,3 学工主管,4 教研主管,5 咨询师',
salary int unsigned comment '薪水',
entry_date date comment '入职日期',
image varchar(255) comment '头像',
create_time datetime comment '创建时间',
update_time datetime comment '修改时间'
) comment '员工表';
DDL-表结构-查询、修改、删除
-- 查询当前数据库所有表
show tables;
-- 查看表结构
desc emp;
-- 查询建表语句
show create table emp;
-- 字段:添加字段 qq varchar(13)
alter table emp add qq varchar(13) comment 'qq号码';
-- 字段:修改字段 qq varchar(15)
alter table emp modify qq varchar(15) comment 'qq号码';
-- 字段 修改字段名 qq -> qq_num varchar(15)
alter table emp change qq qq_num varchar(15) comment 'qq号码';
-- 字段:删除字段 qq_num
alter table emp drop column qq_num;
-- 修改表名
alter table emp rename employee;
-- 删除表
drop table employee;