本博客是【韩顺平讲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列类型/数据类型
整形
类型 | 字节 | 最小值(带符号的/无符号的) | 最大值(带符号的/无符号的) |
---|---|---|---|
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
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;
#4.查询时 仍然可以按照数字查询
SELECT * FROM t06 WHERE num=3
小数类型
小数的基本使用
- FLOAT/DOUBLE [UNSIGNED] Float单精度 Double双精度
- DECIMAL [M,D] [UNSIGNED] 可以支持更加精确的小数位。M是小数位数(精度)的总数,D是小数点后面的位数(标度)
- 如果D是0,则值没有小数点或分数部分。M最大65,D最大是30。如果D被省略,默认是0。如果M被省略,默认是10
- 如果希望小数的精度高,推荐使用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;
字符串
- CHAR(size) 固定长度字符串 最大255字符
- VARCHAR(size)0~65535(字节)可变长度字符串 最大65532字节[1-3个字节用于记录大小 utf8编码最大21844(=65532/3)字符]
#演示字符串类型使用 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));
字符串使用细节
- 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;
日期类型
日期类型的基本使用
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;
如果我们更新了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;