1 数值型(整数)的基本使用
说明,使用规范:在能够满足需求的情况下,尽量选择占用空间小的类型
#演示整型的是一个
#使用tinyint 来演示范围 有符号 -128 ~ 127 如果没有符号 0-255
#说明: 表的字符集,校验规则, 存储引擎,使用默认
#1. 如果没有指定 unsinged , 则TINYINT就是有符号
#2. 如果指定 unsinged , 则TINYINT就是无符号 0-255
CREATE TABLE t3 (
id TINYINT);
CREATE TABLE t4 (
id TINYINT UNSIGNED);
INSERT INTO t3 VALUES(127); #这是非常简单的添加语句
SELECT * FROM t3
INSERT INTO t4 VALUES(255);
SELECT * FROM t4;
2 如何定义一个无符号的整数
3 数值型(bit)的使用
#演示bit类型使用
#说明
#1. bit(m) m 在 1-64
#2. 添加数据 范围 按照你给的位数来确定,比如m = 8 表示一个字节 0~255
#3. 显示按照bit
#4. 查询时,仍然可以按照数来查询
CREATE TABLE t05 (num BIT(8));
INSERT INTO t05 VALUES(255);
SELECT * FROM t05;
SELECT * FROM t05 WHERE num = 1;
4 数值型(小数)的基本使用
- FLOAT/DOUBLE [UNSIGNED]
Float 单精度,Double 双精度 - DECIMAL [M,D] [UNSIGNED]
- 可以支持更加精确的小数位,M是小数位数(精度)的总数,D是小数点(标度)后面的位数。
- 如果D是0,则值没有小数点或分数部分。M最大65。D最大是30。如果D被省略,默认是0.如果M被省略,默认是10.
- 建议:如果希望小数精度高,推荐使用decimal
#演示decimal类型、float、double使用
#创建表
CREATE TABLE t06 (
num1 FLOAT,
num2 DOUBLE,
num3 DECIMAL(30,20));
#添加数据
INSERT INTO t06 VALUES(88.12345678912345, 88.12345678912345,88.12345678912345);
SELECT * FROM t06;
#decimal可以存放很大的数
CREATE TABLE t07 (
num DECIMAL(65));
INSERT INTO t07 VALUES(8999999933338388388383838838383009338388383838383838383);
SELECT * FROM t07;
CREATE TABLE t08(
num BIGINT UNSIGNED)
INSERT INTO t08 VALUES(8999999933338388388383838838383009338388383838383838383);
SELECT * FROM t08;
5 字符串的基本使用
#演示字符串类型使用char varchar
# DQLyog 注释的快捷键 shift+ctrl+c , 注销注释 shift+ctrl+r
-- CHAR(size)
-- 固定长度字符串 最大255 字符
-- VARCHAR(size) 0~65535字节
-- 可变长度字符串 最大65532字节 【utf8编码最大21844字符 1-3个字节用于记录大小】
-- 如果表的编码是 utf8 varchar(size) size = (65535-3) / 3 = 21844
-- 如果表的编码是 gbk varchar(size) size = (65535-3) / 2 = 32766
CREATE TABLE t09 (
`name` CHAR(255));
CREATE TABLE t10 (
`name` VARCHAR(32766)) CHARSET gbk;
DROP TABLE t10;
6 字符串使用细节
- 细节1:
- char(4) //这个 4 表示字符数(最大255),不是字节数,不管是中文还是字母都是方四个,按字符计算。
- varchar(4) //这个 4 表示字符数,不管是字母还是中文都以定义好的表的编码来存放数据。
- 细节2:
- char(4) 是定长(固定的大小),就是说,即使你插入 ‘aa’,也会占用分配的4个字符的空间。
- varchar(4) 是变长(变化大小),就是说,如果你插入了 ‘aa’,实际占用空间大小并不是4个字符,而是按照实际占用空间来分配(特别说明:varchar本身还需要占用 1~3 个字节来记录存放内容长度) L(实际数据大小)+ (1~3)字节
-
细节3:
什么时候使用 char,什么时候使用 varchar
① 如果数据是定长,推荐使用char,比如 md5 的密码,邮编,手机号,身份证号码等。char(32)
② 如果一个字段的长度是不确定的,我们使用 varchar,比如留言,文章
③ 查询速度:char > varchar -
细节4:
在存放文本时,也可以使用Text数据类型,可以将Text列视为varchar列,注意 Text 不能有默认值,大小 0~2^16 字节。
如果希望存放更多字符,可以选择 MEDIUMTEXT 0~2^24 或者 LONGTEXT 0~2^32
#演示字符串类型的使用细节
#char(4) 和 varchar(4) 这个4表示的是字符,而不是字节, 不区分字符是汉字还是字母
CREATE TABLE t11(
`name` CHAR(4));
INSERT INTO t11 VALUES('你好中国');
SELECT * FROM t11;
CREATE TABLE t12(
`name` VARCHAR(4));
INSERT INTO t12 VALUES('你好中国');
INSERT INTO t12 VALUES('ab北京');
SELECT * FROM t12;
#如果varchar 不够用,可以考试使用mediumtext 或者longtext,
#如果想简单点,可以使用直接使用text
CREATE TABLE t13( content TEXT, content2 MEDIUMTEXT , content3 LONGTEXT);
INSERT INTO t13 VALUES('韩顺平教育', '韩顺平教育100', '韩顺平教育1000~~');
SELECT * FROM t13;
7 日期类型的基本使用
#演示时间相关的类型
#创建一张表, date , datetime , timestamp
CREATE TABLE t14 (
birthday DATE , -- 生日
job_time DATETIME, -- 记录年月日 时分秒
login_time TIMESTAMP
NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP); -- 登录时间, 如果希望login_time列自动更新, 需要配置
SELECT * FROM t14;
INSERT INTO t14(birthday, job_time)
VALUES('2022-11-11','2022-11-11 10:10:10');
-- 如果我们更新 t14表的某条记录,login_time列会自动的以当前时间进行更新