[MySQL] 零基础学MySQL 03

本博客是【韩顺平讲MySQL】零基础一周学会MySQL -sql mysql教程 mysql视频 mysql入门视频的学习笔记

文章目录

创建表

CREATE TABLE table_name
(
	field1 datatype,
	field2 datatype,
	field3 datatype
)charact set 字符集 collate 校对规则 engine 引擎

field:指定列名
datatype:指定列类型(字段类型)
character set:如不指定则为所在数据库的字符集
collate:如不指定则为所在数据库的校对规则
engine:引擎/存储引擎(后面再学习)

#指令创建表
CREATE TABLE `user` (
	id INT,
	`name` VARCHAR(255),
	`password` VARCHAR(255),
	birthday DATE)
	CHARACTER SET utf8 COLLATE utf8_bin ENGINE INNODB

效果图
[MySQL] 零基础学MySQL 03

列类型

列类型有哪些

MySQL列类型/数据类型
[MySQL] 零基础学MySQL 03

整形
类型 字节 最小值(带符号的/无符号的) 最大值(带符号的/无符号的)
TINYINT 1 -128/0 127/255
SMALLINT 2 -32768/0 32767/65535
MEDIUMINT 3 -8388608/0 8388607/16777215
INT 4 -2147483648/0 2147483647/4294967295
BIGINT 8 -9223372036854775808/0 9223372036854775807/18446744073709551615

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

如何定义一个无符号整数

CREATE TABLE t10(id tinyint)#默认是有符号的
CREATE TABLE t11(id tinyint unsigned)#无符号的

#使用tinyint来演示范围 有符号 -128~127 无符号 0~255
#表的字符集、校验规则和存储引擎使用默认的
#如果没有指定unsigned,则tinyint就是有符号的
#
CREATE TABLE t4 (
	id TINYINT UNSIGNED);
INSERT INTO t4 VALUES(255);#这是一个非常简单的添加语句
SELECT * FROM t4

[MySQL] 零基础学MySQL 03

bit
#演示bit类型使用
#1.bit(m) m在1-64
#2.添加数据 范围是按照给定的位数确定的
#3.按照位显示
CREATE TABLE t06(num BIT(8));
INSERT INTO t06 VALUES(1);
INSERT INTO t06 VALUES(3);
INSERT INTO t06 VALUES(7);
SELECT * FROM t06;

[MySQL] 零基础学MySQL 03

#4.查询时 仍然可以按照数字查询
SELECT * FROM t06 WHERE num=3

[MySQL] 零基础学MySQL 03

小数类型

小数的基本使用

  1. FLOAT/DOUBLE [UNSIGNED] Float单精度 Double双精度
  2. DECIMAL [M,D] [UNSIGNED] 可以支持更加精确的小数位。M是小数位数(精度)的总数,D是小数点后面的位数(标度)
  3. 如果D是0,则值没有小数点或分数部分。M最大65,D最大是30。如果D被省略,默认是0。如果M被省略,默认是10
  4. 如果希望小数的精度高,推荐使用decimal
#float\double\decimal
CREATE TABLE t07(
	num1 FLOAT,
	num2 DOUBLE,
	num3 DECIMAL(30,20));
#添加数据
INSERT INTO t07 VALUES(88.12345678912345,88.12345678912345,88.12345678912345);
SELECT * FROM t07;

[MySQL] 零基础学MySQL 03

字符串
  • CHAR(size) 固定长度字符串 最大255字符
  • VARCHAR(size)0~65535(字节)可变长度字符串 最大65532字节[1-3个字节用于记录大小 utf8编码最大21844(=65532/3)字符]

[MySQL] 零基础学MySQL 03

#演示字符串类型使用 char varchar
#注释的快捷键 ctrl+shift+c 取消注释ctrl+shift+r
#如果表的编码是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(21844));

[MySQL] 零基础学MySQL 03
字符串使用细节

  • char(4) 这个4表示字符数(最大255),不是字节数,不管中文还是字母都是放四个,按字符计算
  • varchar(4) 这个4表示字符数,不管是字母还是中文都以定义好的表的编码来存放数据
#演示字符串类型的使用细节
CREATE TABLE t11(
	`name` CHAR(4));
INSERT INTO t11 VALUES('abcd');
INSERT INTO t11 VALUES('生瓜蛋子');
SELECT * FROM t11;

CREATE TABLE t12(
	`name` VARCHAR(4));
INSERT INTO t12 VALUES('生瓜蛋子');
SELECT * FROM t12;

  • char(4) 是定长(固定的大小),就是说即使你插入’aa’,也会占用分配的4个字符的空间,也就是说浪费了两个字符的空间
  • varchar(4)是变长(变化的大小),就是说如果你插入’aa’,实际占用空间大小并不是4个字符,而是按照实际占用空间来分配(varchar本身还需要占用1-3个字节来记录存放内容长度) L(实际数据大小)+(1-3)字节

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

  • 如果数据是定长,推荐使用char,比如md5加密的密码、邮编、手机号、身份证号等
  • 如果一个字段的长度是不确定,我们使用varchar,比如留言、文章

查询速度:char>varchar

在存放文本时,也可以使用Text数据类型,可以将TEXT列视为VARCHAR列,注意TEXT不能有默认

值,大小0~2^16字节。如果希望存放更多字符,可以选择MEDIUMTEXT 0~2^24或者LONGTEXT 0~2^32。

#如果varchar不够用,可以使用text\mediumtext\longtext
CREATE TABLE t13(
	content TEXT,content2 MEDIUMTEXT,content3 LONGTEXT);
INSERT INTO t13 VALUES('呼啸山庄','呼啸山庄100','呼啸山庄10086');
SELECT * FROM t13;

[MySQL] 零基础学MySQL 03

日期类型

日期类型的基本使用

CREATE TABLE birthday6(
	t1 DATE,t2 DATETIME,t3 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);

#演示时间相关的类型
CREATE TABLE t15(
	birthday DATE,#记录年月日
	job_time DATETIME,#记录年月日时分秒
	login_time TIMESTAMP 
		NOT NULL DEFAULT CURRENT_TIMESTAMP 
		ON UPDATE CURRENT_TIMESTAMP);#登录时间 如果希望log_time列自动更新,需要配置
INSERT INTO t15(birthday,job_time)
	VALUES('2022-11-11','2022-11-11 10:10:10');
SELECT * FROM t15;

[MySQL] 零基础学MySQL 03
如果我们更新了t15表的某条记录,login_time列会自动地以当前时间进行更新。

练习

创建一个员工表emp,选用适当的数据类型,保存到createtable.sql

字段 属性
id 整形
name 字符型
sex 字符型
birthday 日期型(date)
entry_date 日期型(datetime)
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(100,'宋振涛','男','1977-11-11','2000-09-09 10:01:23','穿开裆裤的',1000,'脾气太不好,容易吃大亏');
SELECT * FROM emp;

[MySQL] 零基础学MySQL 03

上一篇:系统无法识别移动硬盘的解决过程


下一篇:w3cschool sql语句学习