Java学习笔记 --- MySQL-常用数据类型

 一、Mysql常用数据类型

Java学习笔记 --- MySQL-常用数据类型_第1张图片

二、数值型(整数)的基本使用

使用规范:在能够满足需求的情况下, 尽量选择占用空间小的

Java学习笔记 --- MySQL-常用数据类型_第2张图片

# 演示整形的使用
# 使用tinyint来演示范围 有符号 -128 ~ 127  如果没有符号 0-255
# 1. 如果没有指定 unsigned,则TINYINT就是有符合
# 2. 如果指定 unsigned,则TINYINT就是无符合 0-255

CREATE TABLE t1 (
	id  TINYINT);
CREATE TABLE t2 (
	id  TINYINT UNSIGNED);	
	
INSERT INTO t1 VALUES (-128); # 这是非常简单的添加语句

INSERT INTO t2 VALUES (255);

SELECT * FROM t2

三、如何定义一个无符号的整数

create table t10 (id tinyint); 默认是有符号的

create table t10 (id tinyint unsigned); 无符号的

四、数值型(bit)的使用

1、基本使用

mysql > create table t2(num bit(8));

mysql > insert into t2(1, 3);

mysql > insert into t2 values(2, 65);

2、细节说明

      bit 字段显示时,按照位的方式显示

      查询的时候仍然可以用使用添加的数值

      如果一个值只有 0,1 可以考虑使用 bit(1),可以节约空间

      位类型。M指定位数,默认值1,范围1-64

      实际开发中使用不多

# 演示 bit 类型使用
# 1. bit(m) m 在 1-64
# 2. 添加数据 范围 按照你给的位数来确定,比如 m=8 表示一个字节,0-255
# 3. 显示按照bit
# 4. 查询时,仍然可以按照数来查询

CREATE TABLE t3 (num BIT(8));
INSERT INTO t3 VALUES (255);
SELECT * FROM t3
SELECT * FROM t3 WHERE num = 1

五、数值型(小数)的基本使用

1、FLOAT/DOUBLE(UNSIGNED)

      Float 单精度,Double 双精度

2、DECIMAL[M, D](UNSIGNED)

      可以支持更加精确的小位数。M是小数位数(精度)的总数,D是小数点(标度)后面的位数

      如果D是0,则值没有小数点或分数部分。M最大65。D最大是30。如果D被省略,默认是0。如果M被省略,默认是10

      建议:如果希望小数的精度高,推荐使用decimal

# 演示decimal类型、float、double 使用
#创建表
CREATE TABLE t4 (
	num1 FLOAT,
	num2 DOUBLE,
	num3 DECIMAL(30, 20) );
# 添加数据
INSERT INTO t4 VALUES(88.12345678912345, 88.12345678912345, 88.12345678912345) 
SELECT * FROM t4

#DECIMAL 可以存放很大的数
CREATE TABLE t5(
	num1 DECIMAL(65));
INSERT INTO t5 VALUES(999999999999999999999999999999999999999999999999999); 
SELECT * FROM t5

#BIGINT则无法存放特别大的数
CREATE TABLE t6(
	num1 BIGINT UNSIGNED);
INSERT INTO t6 VALUES(999999999999999999999999999999999999999999999999999);# 添加失败
SELECT * FROM t6

六、字符串的基本使用

CHAR(size):固定长度字符串,最大255字符

VARCHAR(size):可变长度字符串,最大65532字节

(utf8编码最大21844字符,1-3个字节用于记录大小)

# 演示字符串类型使用 char varchar
-- CHAR(size):固定长度字符串,最大255字符
-- VARCHAR(size):可变长度字符串,最大65532字节 (utf8编码最大21844字符,1-3个字节用于记录大小)
-- 如果表的编码是 utf8 varchar(size) size = (65535-3) / 3 = 21844
-- 如果表的编码是 gbk varchar(size) size = (65535-3) / 2 = 32766

CREATE TABLE t6(
	`name` CHAR(255));
CREATE TABLE t7(
	`name` VARCHAR(21844));
CREATE TABLE t8(
	`name` VARCHAR(32766))CHARSET gbk;

七、字符串使用细节

1、细节1:

      char(4):这个4表示字符数(最大255),不是字节数,不管是中文还是字母都是放四个,按字符计算

      varchar(4):这个4表示字符数,不管是字母还是中文都以定义好的表的编码来存放数据

      不管是中文还是英文字母,都是最多存放4个,是按照字符来存放的

2、细节2:

      char(4) 是定长(固定的大小),就是说,即使你插入'aa',也会占用分配的4个字符空间

      varchar(4) 是变长,就是说,如果你插入了'aa',实际占用空间大小并不是4个字符,而是按照实际占用空间来分配

    (说明:varchar本身还需要占用1-3个字节来记录存放内容长度) L(实际数据大小) + (1-3)字节 

3、细节3:

      什么时候使用 char,什么时候使用varchar

      (1)如果数据是定长,推荐使用char,比如md5的密码,邮编,手机号,身份证号等

      (2)如果一个字段的长度是不确定的,我们使用varchar,比如留言,文章

      查询速度:char > varchar

4、细节4:

      在存放文本时,也可以使用Text数据类型,可以将TEXT列视为VARCHAR列,注意Text不能有默认值,大小0-2^16字节,如果希望存放更多的字符,可以选择 MEDIUMTEXT 0-2^24 或者 LONGTEXT(0~2^32)

# 演示字符串类型的使用细节
# char(4) 和 varchar(4) 这个4表示的是字符,而不是字节,不区分字符是汉字还是字母

CREATE TABLE t9(
	`name` CHAR(4));
INSERT INTO t9 VALUES('abcd');
SELECT * FROM t9;

CREATE TABLE t10(
	`name` VARCHAR(4));
INSERT INTO t10 VALUES ('你好你好');
INSERT INTO t10 VALUES ('你好aa');
SELECT * FROM t10

# 如果varchar不够用,可以考虑使用 mediumtext 或 longtext,
# 如果想简单点,可以直接使用 text
CREATE TABLE t11(
	content1 TEXT, contnet2 MEDIUMTEXT, nontent3 LONGTEXT );
INSERT INTO t11 VALUES('啊啊啊啊啊', '你好你好你好aa100', '红红火火~~')
SELECT * FROM t11

八、日期类型的基本使用

CREATE TABLE birthday (

        t1 DATE,

        t2 DATETIME,

        t3 TIMESTAMP 

        NOT NULL DEFAULT CURRENT_TIMESTAMP

        ON UPDATE CURRENT_TIMESTAMP 

);

细节说明:TimeStamp在Insert和update时,会自动更新

# 演示时间相关的类型
# 创建一张表,date,datetime,timestamp
CREATE TABLE t12 (
	birthday DATE, -- 生日
	job_time DATETIME, -- 记录年月日 时分秒
	login_time TIMESTAMP -- 登录时间,如果希望login_time列自动更新,需要配置
	NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ;
INSERT INTO t12(birthday, job_time) VALUES ('2022-11-11', '2022-11-11 22:22:22')

SELECT * FROM t12

# 如果我们更新了 t12 表的某条记录,login_time列会自动以当前时间更新

九、创建表练习 

# 创建表的练习
-- 字段属性
-- Id 	       整形
-- name        字符型
-- sex 	       字符型
-- brithday    日期型(date)
-- entry_date  日期型 (date)
-- job 	       字符型
-- Salary      小数型
-- resume      文本型

CREATE TABLE emp (
	id INT,
	`name` VARCHAR(32),
	sex CHAR(1),
	birthday DATE,
	entry_date DATETIME,
	job VARCHAR(32),
	salary DOUBLE,
	`resume` TEXT
) CHARSET utf8 COLLATE utf8_bin ENGINE INNODB;

INSERT INTO emp VALUES(1, '张三',  '男', '2022-12-16', '2023-3-30 22:22:22', '***', 2222, '***');

SELECT * FROM emp

十、修改表练习

# 修改表的练习

-- 员工表 emp 的上增加一个 image 列,varchar 类型(要求在 resume 后面)
ALTER TABLE emp 
	ADD image VARCHAR(32) NOT NULL DEFAULT ' ' 
	AFTER RESUME;
-- 修改 job 列,使其长度为 60
ALTER TABLE emp 
	MODIFY job VARCHAR(60) NOT NULL DEFAULT ' ';
-- 删除 sex 列
ALTER TABLE emp 
	DROP sex;
-- 表名改为 employee
RENAME TABLE emp TO employee;
-- 修改表的字符集为 utf8
ALTER TABLE employee 
	CHARACTER SET utf8;
-- 列名 name 修改为 user_name
ALTER TABLE employee 
	CHANGE `name` user_name VARCHAR(32);
	
DESC employee -- 显示表的结构,可以查看表的所有列

你可能感兴趣的:(MySql,mysql,java,学习)