MySQL从入门到精通(第一篇):MySQL的基本语法及其设计,结合多篇文章

news2024/11/15 7:52:18

MySQL目录

  • 一、数据库入门
    • 1. 数据管理技术的三个阶段
    • 2. 关系型数据库与非关系型数据库
    • 3. 四大非关系型数据库
      • a. 基于列的数据库(column-oriented)
      • b. 键值对存储(Key-Value Stores)
      • c. 文档存储(Document Stores)
      • d. 图形数据库(Graph Database)
  • 二、SQL语句学习
    • 1. DCL数据控制语言
      • 1.1 创建用户
      • 1.2 修改用户名
      • 1.3 修改密码
      • 1.4 删除用户
      • 1.5 授权
      • 1.6 查看权限
      • 1.7 回收权限
    • 2. DDL数据定义语言
      • 2.1 操作数据库
      • 2.2 操作数据表
      • 2.3 操作数据
    • 3. DQL数据查询语言
      • 3.1 基本语法
      • 3.2 条件查询
      • 3.3 排序查询
      • 3.4 聚合函数
      • 3.5 分组查询
      • 3.6 分页查询
    • 4. 约束
      • 4.1 非空约束
      • 4.2 唯一约束
      • 4.3 主键约束
      • 4.4 自动增长约束
      • 4.5 外键约束
  • 三、候选码、主码、主属性
  • 四、函数依赖、部分函数依赖、完全函数依赖、传递函数依赖、多值依赖
    • 1. 函数依赖
    • 2. 完全依赖
    • 3. 部分函数依赖
    • 4. 传递函数依赖
    • 5. 多值依赖
  • 五、数据库之六大范式
    • 1. 第一范式1NF(数据项唯一)
    • 2. 第二范式2NF(必须有组件)
    • 3. 第三范式3NF(没有传递依赖和部分函数依赖)
    • 4. BC范式BCBF(非主属性不能做决定)
    • 5. 第四范式4NF(消除多值依赖)
    • 6. 第五范式5NF
  • 六、数据类型
    • 1. MySQL整数类型
    • 2. 小数类型
    • 3. 日期和时间类型
      • a. YEAR类型
      • b. TIME类型
      • c. DATE类型
      • d. DATETIME类型
      • e. TIMESTAMP类型
    • 4. 字符串类型
  • 七、java向MySQL插入当前时间的几种方式
    • 方式一
    • 方式二

参考文章:数据库系统学习
参考文章:非关系型数据库讲解
参考文章:mysql学习(详细)
参考文章:函数依赖
参考文章1:范式
参考文章2:范式

一、数据库入门

1. 数据管理技术的三个阶段

  • 人工管理阶段:在计算机出现之前,人们主要利用纸张和计算工具(如算盘和计算尺)来进行数据的记录和计算,依靠大脑来管理和利用数据。
  • 文件系统阶段:将数据存储在计算机的磁盘上。这些数据都以文件的形式存储,然后通过文件系统来管理这些文件。
    在这里插入图片描述
  • 数据库系统阶段:相对于文件系统来说,数据库系统实现了数据结构化。在文件系统中,独立文件内部的数据一般是有结构的,但文件之间不存在联系,因此整体来说是没有结构的。 数据库系统虽然也常常分成许多单独的数据文件,但是它更注意同一数据库中各数据文件之间的相互联系。
    在这里插入图片描述

2. 关系型数据库与非关系型数据库

  • 关系型数据库是由多张能互相连接的表组成的数据库。
  • 非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定。
  • 相信大家对关系型数据库已经非常了解,下面将以四大非关系型数据库讲解,来让我们看看两者区别

3. 四大非关系型数据库

简述:目前对于非关系型数据库主要有四种数据存储类型:键值对存储(key-value),文档存储(document store),基于列的数据库(column-oriented),还有就是图形数据库(graph database)。每一种都会解决相应的问题,这些问题是关系型数据库所不能解决的。而在实际应用中都会将这几种情况结合起来实现相应的功能。


在开始介绍NoSQL数据库之前,我们先来回顾一下关系型数据库,这样我们可以对非关系数据库和关系型数据库做一个深入的比较。

例如:如果你想存储一个人的信息和这个人的爱好这样的数据,你可以创建两个表:一个用来存储这个人的信息,另一个表用来存储这个人的爱好。正如你在图一中看到的,你必须有一张额外的映射表,这张表将人的信息表和爱好表建立其对应的关系。这是因为他们的关系是多对多的关系,一个人可以有多个爱好,并且多个人可能会有相同的爱好。
在这里插入图片描述

a. 基于列的数据库(column-oriented)

  1. 这里你就需要注意了,这种请款下你已经有一点违反关系型数据库严格遵循的标准化了,因为爱好是有重复的。
    在这里插入图片描述
  2. 在基于行的数据库中进行查找的时候,每次都会对每一行进行遍历,不管某一列数据是否是你需要的都会进行遍历。假如你只需要生日是九月的人的数据,基于行的数据库会对这张表从上到下从左至右遍历一遍,正像下图看到的那样,最后再返回你需要的那些数据。对特定列的数据进行索引能有效的提高查找速度,但是索引每一列同样会带来额外的负载,并且数据库同样也是会遍历所有的列来取得要查找的数据。基于列的数据库会将每一列分开单独存放,当查找一个数量较小的列的时候其查找速度是很快的。
    在这里插入图片描述
    在这里插入图片描述
  3. 说了这么多,那应该在什么时候使用基于行的数据库,在什么时候使用基于列的数据库呢?在基于列的数据库中要想增加一列新的数据是很容易的,因为现有的那些列是不会受新增列的影响的。但是要想增加一整条记录就需要适应所有的表,防止各个表的数据之间对应关系出现错误。因此这使得基于行的数据库在事务处理的时候要优胜于基于列的数据库,因为它很好的实现了数据的实时更新。

b. 键值对存储(Key-Value Stores)

键值对中存储的数据的类型是不受限制的,可以是一个字符串,也可以是一个数字,甚至是由一系列的键值对封装成的对象等
在这里插入图片描述

c. 文档存储(Document Stores)

文档存储是基于键值对存储的,其结构较之于键值对存储更为复杂,可以说在键值对的基础上更深入了一步。
在这里插入图片描述

d. 图形数据库(Graph Database)

现在剩下的是最后一个NoSQL数据库存储类型,也是最复杂的一个,主要使用一种高效的方式来存储各个实体之间的关系。当数据之间是紧密联系的,例如社会关系、科学论文的引文抑或是资本资产定价模型等等,使用图形数据库时最好的选择。图形或者网络数据有两部分组成:

  • Node-:实体本身,在一个社会关系中可以认为是一个人。
  • Edge-:实体之间的关系。这个关系可以用一条线来表示,这条线有它自己的属性。这条线可以有方向,箭头可以表明谁是谁的上级。

如果给予足够的关系和实体类型,图形会变得非常的复杂,其发杂程度简直难以置信。
在这里插入图片描述

二、SQL语句学习

  1. DDL(Data Definition Language)数据定义语言
    用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter 等
  2. DML(Data Manipulation Language)数据操作语言
    用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等
  3. DQL(Data Query Language)数据查询语言
    用来查询数据库中表的记录(数据)。关键字:select, where 等
  4. DCL(Data Control Language)数据控制语言(了解)
    用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE 等
  5. TCL(Transition Language) :事务控制语言,用来管理事务

1. DCL数据控制语言

1.1 创建用户

  • ’alian’@'localhost’ :表示只允许本机登录
  • ’alian’@’%’ :表示任意地址登录
  • ’alian’@'192.168.0.100’ :表示只允许ip为192.168.0.100的地址登录
  • ’alian’@‘192.168..’ :表示只允许ip为192.168网段的地址登录
# 格式
create user '用户名'@'IP地址' identified WITH mysql_native_password by '密码';
flush privileges;

# 实例
CREATE USER 'alian'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;

1.2 修改用户名

rename user '用户名'@'IP地址' to '新用户名'@'IP地址';

1.3 修改密码

#切换到mysql库
use mysql;
#更新密码
UPDATE user SET password=password('新密码') WHERE user='用户名' AND host='IP地址';
#刷新权限
FLUSH PRIVILEGES;

或者

ALTER USER '用户名'@'IP地址' IDENTIFIED WITH mysql_native_password BY '新密码';
flush privileges;

或者

#普通用户登录后
SET PASSWORD=password('新密码');
FLUSH PRIVILEGES;

1.4 删除用户

#注意这里的IP地址,一个用户可能会有多个
drop user '用户名'@'IP地址';
#比如
drop user 'Alian'@'192.168.0.100';

1.5 授权

grant 权限1, 权限2, 权限3,,权限n on 数据库名.表名 to 用户名@地址;

数据库名.表名

  • . 表示任意库的任意表(不建议)
  • mysql.* 表示mysql库的任意表
  • mysql.user 表示mysql库的user表

用户名@地址

  • ’alian’@'localhost’ :表示只允许本机登录
  • ’alian’@’%’ :表示任意地址登录
  • ’alian’@'192.168.0.100’ :表示只允许ip为192.168.0.100的地址登录
  • ’alian’@‘192.168..’ :表示只允许ip为192.168网段的地址登录

实例

#把数据库的所有库的所有权限都给alian,并且是任意ip地址都可以操作
grant all privileges on *.* to 'alian'@'%';
flush privileges;

#把mysql数据库的所有权限都给alian,并且是任意ip地址都可以操作
grant all privileges on mysql.* to 'alian'@'%';
flush privileges;

#把mysql数据库的user表的所有权限都给alian,并且是只能通过192.138.0.10才可以操作
grant all privileges on mysql.user to 'alian'@'192.138.0.10';
flush privileges;

#把mysql数据库的user表的(查询,插入,更新,删除)的权限都给alian,并且是任意ip地址都可以操作
grant SELECT, INSERT, UPDATE, DELETE on mysql.user to 'alian'@'%';
flush privileges;

1.6 查看权限

show grants for 'alian'@'%';

1.7 回收权限

#格式
revoke 权限1, 权限2…权限n on 数据库名.表名 from 用户名@地址;

#实例:回收用户的更新和删除mysql(默认的库)数据库的权限
revoke update,delete on mysql.user from 'alian'@'%';

2. DDL数据定义语言

2.1 操作数据库

创建

	# 创建数据库,判断不存在,再创建:
		 create database if not exists 数据库名称;
	# 创建数据库,并指定字符集
		 create database 数据库名称 character set 字符集名;

查询

	* 查询所有数据库的名称:
		 show databases;
	* 查询某个数据库的字符集:查询某个数据库的创建语句
		 show create database 数据库名称;

修改

	* 修改数据库的字符集
		 alter database 数据库名称 character set 字符集名称;

删除

	* 删除数据库
		 drop database 数据库名称;
	* 判断数据库存在,存在再删除
		 drop database if exists 数据库名称;

2.2 操作数据表

创建

create table 表名(
	列名1 数据类型1,
	列名2 数据类型2,
	....
	列名n 数据类型n
);

# 数据库类型
	1. int:整数类型		
	2. double:小数类型
	3. date:日期,只包含年月日,yyyy-MM-dd
	4. datetime:日期,包含年月日时分秒	 yyyy-MM-dd HH:mm:ss
	5. timestamp:时间错类型	包含年月日时分秒	 yyyy-MM-dd HH:mm:ss	
	6. varchar:字符串,* zhangsan 8个字符  张三 2个字符

查询

	* 查询某个数据库中所有的表名称
		 show tables;
	* 查询表结构
		 desc 表名;

修改

	1. 修改表名
		alter table 表名 rename to 新的表名;
	2. 修改表的字符集
		alter table 表名 character set 字符集名称;
	3. 添加一列
		alter table 表名 add 列名 数据类型;
	4. 修改列名称 类型
		alter table 表名 change 列名 新列别 新数据类型;
		alter table 表名 modify 列名 新数据类型;
	5. 删除列
		alter table 表名 drop 列名;

删除

	* drop table 表名;
	* drop table  if exists 表名 ;

2.3 操作数据

添加

insert into 表名(列名1,列名2,…列名n) values(1,2,…值n);

删除

delete from 表名 [where 条件]

修改

update 表名 set 列名1 =1, 列名2 =2,[where 条件];

3. DQL数据查询语言

3.1 基本语法

select
	字段列表
from
	表名列表
where
	条件列表
group by
	分组字段
having
	分组之后的条件
order by 
	排序
limit
	分页限定

3.2 条件查询

			-- 查询年龄大于20岁
			SELECT * FROM student WHERE age > 20;
			
			SELECT * FROM student WHERE age >= 20;
			
			-- 查询年龄等于20岁
			SELECT * FROM student WHERE age = 20;
			
			-- 查询年龄不等于20岁
			SELECT * FROM student WHERE age != 20;
			SELECT * FROM student WHERE age <> 20;
			
			-- 查询年龄大于等于20 小于等于30
			SELECT * FROM student WHERE age >= 20 &&  age <=30;
			SELECT * FROM student WHERE age >= 20 AND  age <=30;
			SELECT * FROM student WHERE age BETWEEN 20 AND 30;
			
			-- 查询年龄22岁,18岁,25岁的信息
			SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
			SELECT * FROM student WHERE age IN (22,18,25);
			
			-- 查询英语成绩为null
 			SELECT * FROM student WHERE english = NULL; -- 不对的。null值不能使用 = (!=) 判断
			
			SELECT * FROM student WHERE english IS NULL;
			
			-- 查询英语成绩不为null
			SELECT * FROM student WHERE english  IS NOT NULL;
			-- 查询姓马的有哪些? like
			SELECT * FROM student WHERE NAME LIKE '马%';
			-- 查询姓名第二个字是化的人
			SELECT * FROM student WHERE NAME LIKE "_化%";
			
			-- 查询姓名是3个字的人
			SELECT * FROM student WHERE NAME LIKE '___';
			
			-- 查询姓名中包含德的人
			SELECT * FROM student WHERE NAME LIKE '%德%';

3.3 排序查询

#查询员工信息, 要求工资从低到高排序(ASC可省略)
SELECT * FROM 表名 ORDER BY salary ASC;

#查询员工信息, 要求工资从高到低排序
SELECT * FROM 表名 ORDER BY salary DESC;

3.4 聚合函数

聚合函数的计算,排序null值

COUNT()函数和GROUP BY关键字一起来计算不同分组中的记录总数
select o_num count(f_id) from orderitems group by o_num;

#SUM()可以与GROUP BY一起使用,来计算每个分组的总和
select o_num,sum(quantity) as items_total from orderitems group by o_num;

#AVG()可以与GROUP BY一起使用,来计算每个分组的平均值
select s_id,AVG(f_price) as avg_price from fruits group by s_id;

#MAX()也可以和GROUP BY关键字一起使用,求每个分组中的最大值。
select s_id,max(f_price) as max_price from fruits group by s_id;

#MIN()也可以和GROUP BY关键字一起使用,求出每个分组中的最小值。
select s_id,min(f_price) as min_price from fruits group by s_id;

3.5 分组查询

  • where 在分组之前进行限定,如果不满足条件,则不参与分组。
  • having在分组之后进行限定,如果不满足结果,则不会被查询出来
  • where 后不可以跟聚合函数
  • having可以进行聚合函数的判断。
-- 按照性别分组。分别查询男、女同学的平均分
	SELECT sex , AVG(math) FROM student GROUP BY sex;
	
	-- 按照性别分组。分别查询男、女同学的平均分,人数
	SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex;
	
	--  按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组
	SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex;
	
	--  按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后。人数要大于2个人
	SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;
	
	SELECT sex , AVG(math),COUNT(id) 人数 FROM student WHERE math > 70 GROUP BY sex HAVING 人数 > 2;

3.6 分页查询

# 语法:limit 开始的索引,每页查询的条数;
SELECT * FROM student LIMIT 0,3;

4. 约束

主键约束:primary key
非空约束:not null
唯一约束:unique
外键约束:foreign key
默认值 :Default


4.1 非空约束

# 创建表时,添加非空约束
CREATE TABLE stu(
	id INT,
	NAME VARCHAR(20) NOT NULL -- name为非空
);

# 创建表后,添加非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;

# 删除name的非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20);

4.2 唯一约束

# 创建表时,添加唯一约束
CREATE TABLE stu(
	id INT,
	phone_number VARCHAR(20) UNIQUE -- 添加了唯一约束

);

# 在创建表后,添加唯一约束
ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;

# 删除唯一约束
ALTER TABLE stu DROP INDEX phone_number;

4.3 主键约束

# 创建表时,添加主键约束
create table stu(
	id int primary key,-- 给id添加主键约束
	name varchar(20)
);

# 创建完表后,添加主键
ALTER TABLE stu MODIFY id INT PRIMARY KEY;

# 删除主键:错误 alter table stu modify id int ;
ALTER TABLE stu DROP PRIMARY KEY;

4.4 自动增长约束

# 创建表时,添加自动增长约束
create table stu(
	id int primary key auto_increment,-- 给id添加主键约束
	name varchar(20)
	);

# 创建表后,添加自动增长约束
ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;

# 删除自动增长
ALTER TABLE stu MODIFY id INT;

4.5 外键约束

下面语句执行成功之后,在表 tb_emp6 上添加了名称为 fk_emp_dept1 的外键约束,外键名称为 deptId,其依赖于表 tb_dept1 的主键 id。

mysql> CREATE TABLE tb_dept1
    -> (
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(22) NOT NULL,
    -> location VARCHAR(50)
    -> );
mysql> CREATE TABLE tb_emp6
    -> (
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(25),
    -> deptId INT(11),
    -> salary FLOAT,
    -> CONSTRAINT fk_emp_dept1
    -> FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
    -> );

在修改表时添加外键约束

mysql> ALTER TABLE tb_emp2
    -> ADD CONSTRAINT fk_tb_dept1
    -> FOREIGN KEY(deptId)
    -> REFERENCES tb_dept1(id);

删除外键约束

mysql> ALTER TABLE tb_emp2
    -> DROP FOREIGN KEY fk_tb_dept1;

三、候选码、主码、主属性

  • 候选码: 若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码。
  • 主码: 若一个关系中有多个候选码,则选定其中一个为主码。
  • 主属性: 所有候选码的属性称为主属性。不包含在任何候选码中的属性称为非主属性或非码属性。

四、函数依赖、部分函数依赖、完全函数依赖、传递函数依赖、多值依赖

1. 函数依赖

有一个关系模式S(Sno,Sname,Sage):如果知道了一个学生的学号Sno,那我就能确定他的姓名Sname和年龄Sage。在这里插入图片描述

2. 完全依赖

如果我想知道某位学生的某一门课的成绩Grade,那我必须得同时知道他的学号Sno和课程号Cno。
但如果我只知道一部分信息,比如他的Sno或者Cno可以吗?答案是不行的!此时称Y[Grade]完全依赖于X[Sno,Cno]。
在这里插入图片描述

3. 部分函数依赖

如果我想知道某位学生的姓名Sname,那我知道他的学号Sno就可以了。也就是说Y[Sname]只函数依赖于X[Sno,Cno]中的子集x[Sno],此时称Y部分函数依赖于X。
在这里插入图片描述

4. 传递函数依赖

有一个关系模式S(Sno,Sdept,Mname)
如果我知道了一个学生的学号Sno,那我就能知道他所在的系Sdept。(因为理论上一个学生只属于一个系)
如果我知道了某一个系Sdept,那么我就能知道这个系的系主任的姓名Mname。(一个系只有一个正的系主任,别杠,你赢了。)
也就是说,我知道了一个学生的学号Sno,其实我就知道了他所在系的系主任的姓名Mname。但这个过程中,他们是不存在直接函数依赖的,我需要通过系名称Sdept作为一个桥梁去把二者联系起来的。
在这里插入图片描述

5. 多值依赖

定义: 一个关系,至少存在三个属性(A、B、C),才能存在这种关系。对于每一个A值,有一组确定的B值和C值,并且这组B的值独立于这组C的值。
实例: 比如我们建立课程教师和教材的模型,我们规定,每门课程有对应的一组教师,每门课程也有对应的一组教材,一门课程使用的教程和教师没有关系。

五、数据库之六大范式

在这里插入图片描述

1. 第一范式1NF(数据项唯一)

定义: 所有属性都不可再分,即数据项不可分
理解: 第一范式强调数据表的原子性,是其他范式的基础
在这里插入图片描述
上表将商品这一数据项又划分为名称和数量两个数据项,故不符合第一范式关系。改正之后如下图所示:
在这里插入图片描述

2. 第二范式2NF(必须有组件)

概念: 若某关系R属于第一范式,且每一个非主属性完全函数依赖于任何一个候选码,则关系R属于第二范式。
理解 : 第二范式是指每个表必须有一个(有且仅有一个)数据项作为关键字或主键(primary key),其他数据项与关键字或者主键一一对应,即其他数据项完全依赖于关键字或主键。由此可知单主属性的关系均属于第二范式。

3. 第三范式3NF(没有传递依赖和部分函数依赖)

概念: 非主属性既不传递依赖于码,也不部分依赖于码。
理解 :第三范式要求在满足第二范式的基础上,任何非主属性不依赖于其他非主属性,即在第二范式的基础上,消除了传递依赖。

4. BC范式BCBF(非主属性不能做决定)

理解: 根据定义我们可以得到结论,一个满足BC范式的关系模式有:

  1. 所有非主属性对每一个码都是完全函数依赖;
  2. 所有主属性对每一个不包含它的码也是完全函数依赖;
  3. 没有任何属性完全函数依赖于非码的任何一组属性。

实例: 比如我们有一个学生导师表,其中包含字段:学生ID,专业,导师,专业GPA,这其中学生ID和专业是联合主键。
在这里插入图片描述
这个表的设计满足三范式,有主键,不存在主键的部分依赖,不存在非主键的传递依赖。但是这里存在另一个依赖关系,“专业”函数依赖于“导师”,也就是说每个导师只做一个专业方面的导师,只要知道了是哪个导师,我们自然就知道是哪个专业的了。

所以这个表的部分主键依赖于非主键部分,那么我们可以进行以下的调整,拆分成2个表:
在这里插入图片描述

5. 第四范式4NF(消除多值依赖)

实例: 这样我们首先肯定有三个实体表,分别表示课程,教师和教材。现在我们要建立这三个对象的关系,于是我们建立的关系表,定义如下:
在这里插入图片描述
这个表除了主键,就没有其他字段了,所以肯定满足BC范式,但是却存在多值依赖导致的异常。

假如我们下学期想采用一本新的英版高数教材,但是还没确定具体哪个老师来教,那么我们就无法在这个表中维护Course高数和Book英版高数教材的的关系。

解决办法是我们把这个多值依赖的表拆解成2个表,分别建立关系。这是我们拆分后的表:
在这里插入图片描述

6. 第五范式5NF

除了第四范式外,我们还有更高级的第五范式和域键范式(DKNF),第五范式处理的是无损连接问题,这个范式基本没有实际意义,因为无损连接很少出现,而且难以察觉。而域键范式试图定义一个终极范式,该范式考虑所有的依赖和约束类型,但是实用价值也是最小的,只存在理论研究中。

六、数据类型

参考文章:数据类型

1. MySQL整数类型

在这里插入图片描述

2. 小数类型

在这里插入图片描述

3. 日期和时间类型

在这里插入图片描述

a. YEAR类型

YEAR 类型是一个单字节类型,用于表示年,在存储时只需要 1 个字节。可以使用各种格式指定 YEAR,如下所示:
以 4 位字符串或者 4 位数字格式表示的 YEAR,范围为 ‘1901’~’2155’。输入格式为 ‘YYYY’ 或者 YYYY,例如,输入 ‘2010’ 或 2010,插入数据库的值均为 2010。
以 2 位字符串格式表示的 YEAR,范围为 ‘00’ 到 ‘99’。‘00’~’69’ 和 ‘70’~’99’ 范围的值分别被转换为 2000~2069 和 1970~1999 范围的 YEAR 值。‘0’ 与 ‘00’ 的作用相同。插入超过取值范围的值将被转换为 2000。
以 2 位数字表示的 YEAR,范围为 1~99。1~99 和 70~99 范围的值分别被转换为 2001~2069 和 1970~1999 范围的 YEAR 值。注意,在这里 0 值将被转换为 0000,而不是 2000。

提示:两位整数范围与两位字符串范围稍有不同。例如,插入 3000 年,读者可能会使用数字格式的 0 表示 YEAR,实际上,插入数据库的值为 0000,而不是所希望的 3000。只有使用字符串格式的 ‘0’ 或 ‘00’,才可以被正确解释为 3000,非法 YEAR值将被转换为 0000。

b. TIME类型

可以使用各种格式指定 TIME 值,如下所示。
‘D HH:MM:SS’ 格式的字符串。还可以使用这些“非严格”的语法:‘HH:MM:SS’、‘HH:MM’、‘D HH’ 或 ‘SS’。这里的 D 表示日,可以取 0~34 之间的值。在插入数据库时,D 被转换为小时保存,格式为 “D*24+HH”。
‘HHMMSS’ 格式、没有间隔符的字符串或者 HHMMSS 格式的数值,假定是有意义的时间。例如,‘101112’ 被理解为’10:11:12’,但是 ‘106112’ 是不合法的(它有一个没有意义的分钟部分),在存储时将变为 00:00:00。

提示:为 TIME 列分配简写值时应注意:如果没有冒号,MySQL 解释值时,假定最右边的两位表示秒。(MySQL 解释 TIME 值为过去的时间而不是当前的时间)。例如,读者可能认为 ‘1112’ 和 1112 表示 11:12:00(即 11 点过 12 分钟),但MySQL 将它们解释为 00:11:12(即 11 分 12 秒)。同样 ‘12’ 和 12 被解释为00:00:12。相反,TIME 值中如果使用冒号则肯定被看作当天的时间,也就是说,‘11:12’ 表示 11:12:00,而不是 00:11:12。

c. DATE类型

在给 DATE 类型的字段赋值时,可以使用字符串类型或者数字类型的数据插入,只要符合 DATE 的日期格式即可。如下所示:
以 ‘YYYY-MM-DD’ 或者 ‘YYYYMMDD’ 字符中格式表示的日期,取值范围为 ‘1000-01-01’~’9999-12-3’。例如,输入 ‘2015-12-31’ 或者 ‘20151231’,插入数据库的日期为2015-12-31。
以 ‘YY-MM-DD’ 或者 ‘YYMMDD’ 字符串格式表示日期,在这里YY表示两位的年值。MySQL 解释两位年值的规则:‘00~69’ 范围的年值转换为 ‘20002069’,'7099’ 范围的年值转换为 ‘1970~1999’。例如,输入 ‘15-12-31’,插入数据库的日期为 2015-12-31;输入 ‘991231’,插入数据库的日期为 1999-12-31。
以 YYMMDD 数字格式表示的日期,与前面相似,00~69 范围的年值转换为 2000~2069,80~99 范围的年值转换为 1980~1999。例如,输入 151231,插入数据库的日期为 2015-12-31,输入 991231,插入数据库的日期为 1999-12-31。
使用 CURRENT_DATE 或者 NOW(),插入当前系统日期。

提示:MySQL 允许“不严格”语法:任何标点符号都可以用作日期部分之间的间隔符。例如,‘98-11-31’、‘98.11.31’、‘98/11/31’和’98@11@31’ 是等价的,这些值也可以正确地插入数据库。

d. DATETIME类型

如下所示。
以 ‘YYYY-MM-DD HH:MM:SS’ 或者 ‘YYYYMMDDHHMMSS’ 字符串格式表示的日期,取值范围为 ‘1000-01-01 00:00:00’~’9999-12-3 23:59:59’。例如,输入 ‘2014-12-31 05:05:05’ 或者 '20141231050505’,插入数据库的 DATETIME 值都为 2014-12-31 05:05:05。
以 ‘YY-MM-DD HH:MM:SS’ 或者 ‘YYMMDDHHMMSS’ 字符串格式表示的日期,在这里 YY 表示两位的年值。与前面相同,‘00~79’ 范围的年值转换为 ‘2000~2079’,‘80~99’ 范围的年值转换为 ‘1980~1999’。例如,输入 ‘14-12-31 05:05:05’,插入数据库的 DATETIME 为 2014-12-31 05:05:05;输入 141231050505,插入数据库的 DATETIME 为 2014-12-31 05:05:05。
以 YYYYMMDDHHMMSS 或者 YYMMDDHHMMSS 数字格式表示的日期和时间。例如,输入 20141231050505,插入数据库的 DATETIME 为 2014-12-31 05:05:05;输入 140505050505,插入数据库的 DATETIME 为 2014-12-31 05:05:05。

提示:MySQL 允许“不严格”语法:任何标点符号都可用作日期部分或时间部分之间的间隔符。例如,‘98-12-31 11:30:45’、‘98.12.31 11+30+35’、‘98/12/31 113045’ 和 ‘98@12@31 113045’ 是等价的,这些值都可以正确地插入数据库。

e. TIMESTAMP类型

TIMESTAMP 的显示格式与 DATETIME 相同,显示宽度固定在 19 个字符,日期格式为 YYYY-MM-DD HH:MM:SS,在存储时需要 4 个字节。但是 TIMESTAMP 列的取值范围小于 DATETIME 的取值范围,为 '1970-01-01 00:00:01’UTC~’2038-01-19 03:14:07’UTC。在插入数据时,要保证在合法的取值范围内。

TIMESTAMP 也有一个 DATETIME 不具备的属性。默认情况下,当插入一条记录但并没有指定 TIMESTAMP 这个列值时,MySQL 会把 TIMESTAMP 列设为当前的时间。因此当需要插入记录和当前时间时,使用 TIMESTAMP 是方便的,另外 TIMESTAMP 在空间上比 DATETIME 更有效。

提示:协调世界时(英:Coordinated Universal Time,法:Temps Universel Coordonné)又称为世界统一时间、世界标准时间、国际协调时间。英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称 UTC。

TIMESTAMP 与 DATETIME 除了存储字节和支持的范围不同外,还有一个最大的区别是:
DATETIME 在存储日期数据时,按实际输入的格式存储,即输入什么就存储什么,与时区无关;
而 TIMESTAMP 值的存储是以 UTC(世界标准时间)格式保存的,存储时对当前时区进行转换,检索时再转换回当前时区。即查询时,根据当前时区的不同,显示的时间值是不同的。

提示:如果为一个 DATETIME 或 TIMESTAMP 对象分配一个 DATE 值,结果值的时间部分被设置为 ‘00:00:00’,因此 DATE 值未包含时间信息。如果为一个 DATE 对象分配一个 DATETIME 或 TIMESTAMP 值,结果值的时间部分被删除,因此DATE 值未包含时间信息。

4. 字符串类型

在这里插入图片描述

七、java向MySQL插入当前时间的几种方式

方式一

        Date date = new Date();//获得系统时间.
        SimpleDateFormat sdf =   new SimpleDateFormat( " yyyy-MM-dd HH:mm:ss " );
        String nowTime = sdf.format(date);
        Date time = sdf.parse( nowTime );

方式二

		Date date = new Date();
		//得到一个timestamp格式的时间,存入mysql中的时间格式为"yyyy-MM-dd HH:mm:ss"
		Timestamp timestamp = new Timestamp(date.getTime());

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/188351.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【日志首次上报积分最多】

题目描述 【日志首次上报最多积分】 日志采集是运维系统的的核心组件。日志是按行生成&#xff0c;每行记做一条&#xff0c;由采集系统分批上报。 如果上报太频繁&#xff0c;会对服务端造成压力;如果上报太晚&#xff0c;会降低用户的体验&#xff1b; 如果一次上报的条数…

【flyway入门及使用】解决生产环境sql更新遗漏

flyway入门及使用 一、简单介绍 flyway开源的数据库版本管理工具 二、为什么要使用flyway 1.自己写的sql没有在全部环境执行 2.别人写的sql没有在全部环境执行 3.有人修改了已经执行过的SQL&#xff0c;期望再次执行 4.需要新增环境做数据迁移 三、flyway是如何工作 1…

雷达流量计的安装方法与应用方向介绍

1、设备介绍 雷达流量计是一种采用微波技术的水位流速探测仪器&#xff0c;结合了成熟的雷达水位计和雷达流速仪的测量技术&#xff0c;主要应用于江河、水库闸口、地下水道管网、灌溉渠道等明渠水位流速测量。该产品可有效地监控水位流速流量变化状态&#xff0c;为监测单位提…

【ThreeJs 初学习】随机三角形的实现方案

随机三角形的实现方案 根据官网的文档整理出一份API文档, 地址是&#xff1a;ThreeJs 官网文档&#xff0c;其目的还是为了方便查阅 下列代码源码地址 上述的截图 就是大致的实现效果。 实现内容 首先我们需要对法向量 以及如何完成一个面有一定的了解&#xff0c;具体了解的内…

Opencv-DNN模块之官方指导:利用DNN模块实现深度学习应用:分类、分割、检测、跟踪等

本文根据 Deep Learning with OpenCV DNN Module: A Definitive Guide 中相关内容进行翻译整理而得&#xff0c;用于今后的学习和工程。 00 前  言 ---   机器视觉研究领域从上个世纪六十年后期就已创立。图像分类和物体检测是计算机视觉领域中的一些最古老的的问题&#x…

CSS - 实现Loading加载动画

Loading加载动画 用CSS都用实现一个loading的加载动画 通过控制 item-loader-container 来实现显示及隐藏 <div class"item-loader-container" id"item-loader-container"><div class"la-ball-running-dots la-2x"><div></…

TVS二极管6.6SMDJ58A/6.6SMDJ58CA参数,有什么区别?

提及6600W高功率TVS二极管&#xff0c;电子工程师们更多想到的可能是DO-218AB封装SM8S系列汽车级瞬态抑制TVS二极管&#xff0c;关于SM8S系列TVS管这方面的知识&#xff0c;之前科普过好多次了。接下来&#xff0c;TVS保护管厂家东沃电子要科普的是另一款6600W的二极管6.6SMDJ系…

最优化问题

一&#xff0c;最优化问题 http://faculty.bicmr.pku.edu.cn/~wenzw/optbook/opt1.pdf 最优化问题&#xff08;也称优化问题&#xff09;泛指定量决策问题&#xff0c;主要关心如何对有限 资源进行有效分配和控制&#xff0c;并达到某种意义上的最优。 最优化问题一般可以描…

算法之美~递归

递归求解问题的分解过程&#xff0c;去的过程叫“递”&#xff0c;回来的过程叫“归”。eg.电影院第几排&#xff1f;f(n) f(n-1) 1 其中,f(1) 1根据递推公式&#xff0c;实现递归代码public int f(int n) {if (n 1) return 1;return f(n-1) 1; }递归需要满足的三个条件一…

2023年谷歌搜索排名规则揭秘,Google排名机制

本文主要分享关于2023年谷歌排名算法的一些机制以及如何操盘才能更好的获取谷歌的自然排名。 本文由光算创作&#xff0c;有可能会被修改和剽窃&#xff0c;我们佛系对待这种行为吧。 要把谷歌排名做起来&#xff0c;你得了解谷歌的排名算法。 Google排名机制是怎么样的&…

调试日志:安卓设备之NFC

adb 查看GPIO 引脚状态 adb shell cd /sys/class/gpio ls cat /sys/kernel/debug/gpio 参考链接 msm8953对应GPIOs 0-141&#xff0c;对应的GPIO Base Addr是从0开始 adb查看GPIOgpio stm8 管脚 配置工具_MSM8953 GPIO口配置说明_zhengjw666的博客-CSDN博客 查看中断 c…

CVE-2022-22972 VMware Workspace ONE Access 身份认证绕过漏洞分析

漏洞描述 5 月 18 日&#xff0c;VMware 发布了一份公告 ( VMSA-2022-0014 )&#xff0c;以解决多个 VMware 产品中的两个漏洞&#xff0c;其中包括CVE-2022-22972&#xff0c;该漏洞在身份认证处理时存在一定缺陷。远程攻击者可通过伪造相关请求信息来绕过身份验证&#xff0…

P2121 拆地毯

# 拆地毯 ## 题目背景 还记得 NOIP 2011 提高组 Day1 中的铺地毯吗&#xff1f;时光飞逝&#xff0c;光阴荏苒&#xff0c;三年过去了。组织者精心准备的颁奖典礼早已结束&#xff0c;留下的则是被人们踩过的地毯。请你来解决类似于铺地毯的另一个问题。 ## 题目描述 ## 输入格…

Spring Boot 2 个人App后端实践(1)

App使用Flutter&#xff0c;数据库考虑到要存储的对象并不规整选择使用MongoDB&#xff0c;尝试为自己的App搭建一个简易的后端。 1.通过IDEA脚手架创建项目 New Project->Spring Initializr->Next&#xff0c;输入相关信息并选择Java版本1.8&#xff0c;->Next选择依…

ANTLR4入门学习(一)

ANTLR4入门学习&#xff08;一&#xff09;一、安装Antlr1.1 环境1.2 安装命令1.3 校验安装1.4 自定义脚本二、简单使用2.1 加入Hello parrt语法文件2.2 加入调试工具TestRig2.3 开始调试-tokens选项&#xff0c;会打印出全部的词法符号的列表-tree会打印出LISP风格文本格式的语…

ICG试剂 ICG-PEG-NHS_ICG-PEG-SE_吲哚菁青-聚乙二醇-活性酯

【中文名称】吲哚菁青-聚乙二醇-活性酯&#xff0c;吲哚菁绿琥珀酰亚胺脂【英文名称】 ICG-PEG-NHS&#xff0c;ICG-PEG-SE&#xff0c;ICG-PEG-NHS ester【光谱图】【CAS号】N/A【分子量】400、600、1000、2000、3400、5000、10000、20000【纯度标准】95%【包装规格】5mg&…

Java 删除链表中的节点

删除链表中的节点中等有一个单链表的 head&#xff0c;我们想删除它其中的一个节点 node。给你一个需要删除的节点 node 。你将 无法访问 第一个节点 head。链表的所有值都是 唯一的&#xff0c;并且保证给定的节点 node 不是链表中的最后一个节点。删除给定的节点。注意&#…

50.Isaac教程--基于Elbrus立体视觉 VSLAM 的定位

基于Elbrus立体视觉 VSLAM 的定位 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录基于Elbrus立体视觉 VSLAM 的定位架构嵌入式高保真嵌入式降噪惯性测量单元 (IMU) 集成SLAM 与纯视觉里程计使用立体相机示例应用程序源代码在 x86_64 主机…

代码随想录算法训练营第十四天 | 层序遍历 10,226.翻转二叉树,101.对称二叉树 2

一、参考资料层序遍历 10题目链接/文章讲解/视频讲解&#xff1a;https://programmercarl.com/0102.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E5%B1%82%E5%BA%8F%E9%81%8D%E5%8E%86.html翻转二叉树 &#xff08;优先掌握递归&#xff09;题目链接/文章讲解/视频讲解&#xff1a;h…

项目看板开发经验分享(三)——电子车间能源监控看板(渐变色环形进度条、按钮控制展示折线图项、看板表格设计与单击双击事件)

系列完结篇&#xff0c;直奔主题 电子车间能源监控看板展示视频1、渐变色环形进度条 在进度条下方直接加svg实现&#xff0c;中间的字体则先隐藏环形进度条默认的文字:show-text"false"&#xff0c;再用绝对定位来写进去 <div class"ball_bg"><el…