2021-08-23

数据库

数据库(DB DataBase)

概念:数据仓库,软件,安装在操作系统(window,linux,mac…)之上!SQL,可存储大量数据,500万!

作用:存出数据,管理数据

数据库分类

关系型数据库

  1. 数据库分类:Mysql, Oracle, Sql Server, DB2, SQLlite

  2. 通过表和表之间,行和列之间的关系进行数据的存储, 学员信息表,考勤表,… …

非关系型数据库 (NO SQL)

Redis, MongDB

非关系型数据库, 对象存储,通过对象的自身的属性来决定

DBMS(数据库管理系统)

数据库的管理软件,科学有效的管理我们的数据库,维护和获取数据:

连接数据库

命令行连接!

mysql -uroot -p#### -- 连接数据库
#必须要在MySQL安装位置bin目录下面,要不就把MySql环境比变量设置为相对路径

update mysql user set authentication_string=password('123456') where user='root' and Host = 'localhost'; -- 修改用户密码
flush privileges;  -- 刷新权限

--------------------------------- 
-- 所有结尾语句使用 ;结尾
show databases;  -- 查看所有的数据库

mysql> use school -- 切换数据库 use 数据库名
Database changed

show tables; -- 查看你数据库中的所有表
describe student; -- 显示数据库中所有的表的信息

create database westos;  -- 创建一个数据库

exit;  -- 退出连接
-- 单行注释(SQL 的本来注释)
/*
hello
dasdav
*/

数据库xxx语言 CRUD增删改查!

DDL 定义

DML 操作

DQL 查询

DCL 控制

操作数据库

操作数据库 > 操作数据库中的表 > 操作数据库中表的数据

不区分大小写

  1. 创建数据库
create database [if not exists] westos;
  1. 删除数据库
drop database [if not exists] westos;
  1. 使用数据库
use `school`; -- tab键的上面,如果你的表名或者字段名是一个特殊字符,就需要  ``
  1. 查看数据库
show database; -- 查看数据库

数据库的列类型

数值:

  1. tinyint 十分小的数据 1个字节
  2. smallint 较小的数据 2个字节
  3. mediumint 中等大小的数据 3个字节
  4. int 标准的整数 4个字节
  5. bigint 较大的字节 8个字节
  6. flaot 浮点数 4个字节
  7. double 浮点数 8个字节
  8. decimal 字符串形式的浮点数(用于商业金融)

字符串:

  1. char 字符串固定大小的 0~255
  2. varchar 可变字符串 0~065535 常用变量 String
  3. tinytext 微型文本 2^8 -1
  4. text 文本串 2^16 -1 保存大文本

时间日期:

java.util.Data

  1. date YYYY-MM-DD ,日期格式
  2. time HH: mm: ss 时间格
  3. datetime YYYY-MM-DD HH: mm: ss 最常用的时间格式
  4. timestamp 时间戳, 1970.1.1到现在的毫秒数! 也较为常用
  5. year 年份表示

null

  1. 没有值,未知
  2. 注意,不要使用NULL进行运算

数据库的字段属性

Unsigned:

  1. 无符号的整数
  2. 声明了该列不能声明为负数

zerofill

  1. 0填充的
  2. 不足的位数,使用0来填充, int(3), 5 … 005

自增

  1. 通常理解为自增,自动在上一条记录的基础上+1(默认)
  2. 通常用来设计唯一的主键 ~ index, 必须是整数类型
  3. 可以自定义设计主键自增的起始值和步长

非空NULL not NULL

  1. 假设设置为 not null ,如果不给它赋值,就会报错
  2. NULL ,如果不填写值,默认就是NULL

默认

  1. 设置默认的值
  2. sex, 默认值为男, 如果不指定该列的值,则会有默认的值

创建数据库

在这里插入图片描述

格式:

create table [if not exists] '表名'(
    '字段名' 列类型 [属性] [索引] [注释],
    '字段名' 列类型 [属性] [索引] [注释],
    ......
    '字段名' 列类型 [属性] [索引] [注释],
    primary key(`id`)

)[表类型][字符集设置][注释]

查看创建语句

show create database school; -- 查看创建数据库的语句
show create tables student;  -- 查看student数据表的定义语句
desc student -- 显示表的结构
-- 关于数据库引擎
/*
INNOOB 默认使用
MYISAM 早些年使用
*/
INNOOBMYISAM
事务支持不支持支持
数据行锁定不支持支持
外键约束不支持支持
全文索引支持不支持
表空间的大小较小较大,约为2倍

常规使用操作:

  1. MYISAM 节约空间,速度较快
  2. INNOOB 安全性高 事物的处理,多表多用户操作

MySql 引擎在物理文件上的区别

  1. InnoDB在数据库表中只有一个 *.frm文件,以及上级目录下面的 ibdata1文件
  2. MYISAM 对应文件

​ 。*.frm 表结构的定义文件

​ 。*.MYD 数据文件(data)

​ 。*.MYI 索引文件(index)

设置数据库的字符集编码

CHARSET=UTF8

不设置的话,会是mysql默认的字符集编码~ (不支持中文!)

MYSQL的默认编码是Latin1, 不支持中文

在my.ini中配置默认的编码

character-set-server=utf8

修改删除表

修改

在这里插入图片描述

删除

-- 删除表 (如果表存在再删除)
drop table if exists teacher;
#加上判断以免报错

MYSQL数据管理

外键

# ALTER TABLE 表名 ADD FOREIGN KEY [外键名字] (外键字段) REFERENCES 父表 (主键字段);

-- 已存在表增加外键
ALTER TABLE Products ADD FOREIGN KEY products_vendors_fk_1 (vend_id) REFERENCES Vendors (vend_id);

DML语言

原文链接:https://blog.csdn.net/qq_40925004/article/details/89920977

数据操作语言:

插入:insert

/*
语法:
insert into 表名(列名,...) values(值1,...);

*/
# 插入的值的类型要与列的类型一致或兼容
INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id)
VALUES(13,'唐艺昕','女','1990-4-23','1898888888',NULL,2);
#或者
INSERT INTO beauty
VALUES(13,'唐艺昕','女','1990-4-23','1898888888',NULL,2);
#多行插入
INSERT INTO beauty
VALUES(23,'唐艺昕1','女','1990-4-23','1898888888',NULL,2),
(24,'唐艺昕2','女','1990-4-23','1898888888',NULL,2),
(25,'唐艺昕3','女','1990-4-23','1898888888',NULL,2);

#方式二:
/*
语法:
insert into 表名
set 列名=值,列名=值,...
*/
INSERT INTO beauty
SET id=19,NAME='刘涛',phone='999';

修改:update

/*
语法:
update 表名
set 列=新值,列=新值,...
where 筛选条件;

语法:
sql92语法:
update 表1 别名,表2 别名
set 列=值,...
where 连接条件
and 筛选条件;

sql99语法:
update 表1 别名
inner|left|right join 表2 别名
on 连接条件
set 列=值,...
where 筛选条件;
*/

#案例 修改beauty表中姓唐的女神的电话为13899888899
UPDATE beauty SET phone = '13899888899'
WHERE NAME LIKE '唐%';

#案例 修改boys表中id好为2的名称为张飞,魅力值 10
UPDATE boys SET boyname='张飞',usercp=10
WHERE id=2;

#修改多表的记录
#案例 修改张无忌的女朋友的手机号为114
UPDATE boys bo
INNER JOIN beauty b ON bo.`id`=b.`boyfriend_id`
SET b.`phone`='119',bo.`userCP`=1000
WHERE bo.`boyName`='张无忌';

#案例 修改没有男朋友的女神的男朋友编号都为2号
UPDATE boys bo
RIGHT JOIN beauty b ON bo.`id`=b.`boyfriend_id`
SET b.`boyfriend_id`=2
WHERE bo.`id` IS NULL;

删除:delete

/*
单表的删除
delete from 表名 where 筛选条件

夺表删除
delete 表1的别名,表2的别名
from 表1 别名,表2 别名
where 连接条件
and 筛选条件;

delete 表1的别名,表2的别名
from 表1 别名
inner|left|right join 表2 别名 on 连接条件
where 筛选条件;
*/

#案例:删除手机号以9结尾的女神信息
DELETE FROM beauty WHERE phone LIKE '%9';

#案例:删除张无忌的女朋友的信息
DELETE b
FROM beauty b
INNER JOIN boys bo ON b.`boyfriend_id` = bo.`id`
WHERE bo.`boyName`='张无忌';

删除: truncate

#delete pk truncate
1.delete 可以加where 条件,truncate不能
2.truncate删除,效率高一丢丢
3.假如要删除的表中有自增长列,
如果用delete删除后,再插入数据,自增长列的值从断点开始,
而truncate删除后,再插入数据,自增长列的值从1开始。
4.truncate删除没有返回值,delete删除有返回值
5.truncate删除不能回滚,delete删除可以回滚.

#案例:将魅力值>100的男神信息删除
# 首先插入信息
INSERT INTO boys (boyname,usercp)
VALUES('张飞',100),('刘备',100),('关云长',100);

TRUNCATE TABLE boys;
原文链接:https://blog.csdn.net/qq_40925004/article/details/89920977

DELETE删除问题,重启数据库现象

  1. InnoDB 自增列会重1开始 (存在内存当中的, 断电及失去)
  2. MyISAM 继续从上一个自增量开始 (存在文件中,不会丢失)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Java 中的 LocalDateTime 类来处理时间。 首先,我们需要将给定的时间段转换为 LocalDateTime 对象: ```java LocalDateTime start = LocalDateTime.of(2020, 11, 20, 0, 0, 0); LocalDateTime end = LocalDateTime.of(2021, 10, 9, 23, 59, 59); ``` 这里将结束时间设置为 23:59:59 是因为我们想要包含该日期的所有时间。 接下来,我们可以使用一个循环来遍历时间段中的每一天,并获取该天的开始时间和结束时间: ```java LocalDateTime current = start; while (!current.isAfter(end)) { LocalDateTime dayStart = current.withHour(0).withMinute(0).withSecond(0).withNano(0); LocalDateTime dayEnd = current.withHour(23).withMinute(59).withSecond(59).withNano(999999999); System.out.println("Day " + current.toLocalDate() + " starts at " + dayStart + " and ends at " + dayEnd); current = current.plusDays(1); } ``` 这里,我们使用 `withHour`、`withMinute`、`withSecond` 和 `withNano` 方法来设置每天的开始时间和结束时间。然后,我们可以使用 `plusDays` 方法来增加 `current` 对象的日期,以便遍历整个时间段。 完整代码如下: ```java import java.time.LocalDateTime; public class Main { public static void main(String[] args) { LocalDateTime start = LocalDateTime.of(2020, 11, 20, 0, 0, 0); LocalDateTime end = LocalDateTime.of(2021, 10, 9, 23, 59, 59); LocalDateTime current = start; while (!current.isAfter(end)) { LocalDateTime dayStart = current.withHour(0).withMinute(0).withSecond(0).withNano(0); LocalDateTime dayEnd = current.withHour(23).withMinute(59).withSecond(59).withNano(999999999); System.out.println("Day " + current.toLocalDate() + " starts at " + dayStart + " and ends at " + dayEnd); current = current.plusDays(1); } } } ``` 输出结果如下: ``` Day 2020-11-20 starts at 2020-11-20T00:00 and ends at 2020-11-20T23:59:59.999999999 Day 2020-11-21 starts at 2020-11-21T00:00 and ends at 2020-11-21T23:59:59.999999999 Day 2020-11-22 starts at 2020-11-22T00:00 and ends at 2020-11-22T23:59:59.999999999 ... Day 2021-10-07 starts at 2021-10-07T00:00 and ends at 2021-10-07T23:59:59.999999999 Day 2021-10-08 starts at 2021-10-08T00:00 and ends at 2021-10-08T23:59:59.999999999 Day 2021-10-09 starts at 2021-10-09T00:00 and ends at 2021-10-09T23:59:59.999999999 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值