
文章目录
- 🎈一、创建表
- 1️⃣基本语法
- 2️⃣入门案例
 
- 🎆二、MySQL常用数据类型
- 1️⃣数值型(整型)默认有符号
- 2️⃣数值型(bit)
- 3️⃣数值型(浮点型)默认有符号
- 4️⃣字符串的基本使用
- 5️⃣字符串使用细节
- 6️⃣时间类型
 
- 🎇三、修改与删除表
- 1️⃣添加列
- 2️⃣修改列
- 3️⃣删除列
- 4️⃣修改表名
- 5️⃣修改表的字符集
- 6️⃣修改列名
- 7️⃣查看表的结构
- 8️⃣删除表
 
 

🎈一、创建表
1️⃣基本语法
CREATE TABLE 表名 (
	列名 列类型, 
	列名 列类型, 
	列名 列类型, 
	列名 列类型)
	CHARACTER SET 字符集
	COLLATE 校对规则 
	ENGINE 存储引擎;
注意:创建表时,要根据需保存的数据创建相应的列,并根据数据的类型定义相应的列类型。
2️⃣入门案例
建立一个名为 nba_player 的球员信息表,包括姓名,出生日期,打球位置,身高,臂展,工资,所在球队,字符集为utf8,校对规则区分大小写,存储引擎为INNODB。
 
CREATE TABLE nba_player (
	`name` VARCHAR(255),
	birthday DATE,
	`position` VARCHAR(255),
	height INT,
	arm_span INT,
	sal DOUBLE,
	team VARCHAR(255))
	CHARACTER SET utf8 
	COLLATE utf8_bin 
	ENGINE INNODB; 
🎆二、MySQL常用数据类型
1️⃣数值型(整型)默认有符号
| 类型 | 大小 | 有符号范围 | 无符号范围 | 
|---|---|---|---|
| TINTINT(UNSIGNED) | 占1个字节 | 有符号:-128 ~ 127 | 无符号:0 ~ 255 | 
| SMALLINT(UNSIGNED) | 占2个字节 | 有符号:-2^15 ~ 2^15 - 1 | 无符号:0 ~ 2^16 - 1 | 
| MEDIUMINT(UNSIGNED) | 占3个字节 | 有符号:-2^23 ~ 2^23 - 1 | 无符号:0 ~ 2^24 - 1 | 
| INT(UNSIGNED) | 占4个字节 | 有符号:-2^31~ 2^31 - 1 | 无符号:0 ~ 2^32 - 1 | 
| BIGINT(UNSIGNED) | 占8个字节 | 有符号:-2^63~ 2^63 - 1 | 无符号:0 ~ 2^64 - 1 | 
-- 如果没有指定 UNSIGNED , 就是有符号
CREATE TABLE t3 (
	id TINYINT);
	
-- 如果指定 UNSIGNED , 就是无符号
CREATE TABLE t4 (
	id TINYINT UNSIGNED);
2️⃣数值型(bit)
-- BIT(m) m 在 1-64
CREATE TABLE t05 (num BIT(8));
-- 添加数据 范围 按照你给的位数来确定,比如 m = 8 表示一个字节 0~255
INSERT INTO t05 VALUES(255);
-- 显示按照 bit
SELECT * FROM t05;
-- 查询时,仍然可以按照数来查询
SELECT * FROM t05 WHERE num = 1;
3️⃣数值型(浮点型)默认有符号
| 类型 | 大小 | 
|---|---|
| FLOAT(UNSIGNED) | 占4个字节 | 
| DOUBLE(UNSIGNED) | 占8个字节 | 
| DECIMAL【M,D】(UNSIGNED) | 可变 | 
DECIMAL【M,D】(UNSIGNED)可以支持更加精确的小数位,M是小数位数(精度)的总数,D是小数点(标度)后面的位数。
 如果D是0,则值没有小数点部分。M最大为65,D最大为30,如果D省略,默认是0,如果M省略,默认是10。
#演示 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;
4️⃣字符串的基本使用
| 类型 | 大小 | 
|---|---|
| CHAR(size) 固定长度字符串 | 最大 255 字符 | 
| VARCHAR(size) 可变长度字符串 | 0 ~ 65535 字节 | 
| TEXT | 0 ~ 2^16 - 1 字节 | 
| MEDIUMTEXT | 0 ~ 2^24 - 1 字节 | 
| LONGTEXT | 0 ~ 2^32 - 1 字节 | 
| BLOB | 0 ~ 2^16 - 1 字节 | 
| MEDIUMBLOB | 0 ~ 2^24 - 1 字节 | 
| LONGBLOB | 0 ~ 2^32 - 1 字节 | 
VARCHAR(size),最大可以存放 65532 字节 【1-3 个字节用于记录大小】
 如果表的编码是 utf8,那么最大可以存 (65535-3) / 3 = 21844字符
 如果表的编码是 gbk ,那么最大可以存 (65535-3) / 2 = 32766字符
#演示字符串类型使用 char varchar
CREATE TABLE t09 (
	`name` CHAR(255));
	
CREATE TABLE t10 (
	`name` VARCHAR(32766)) 
	CHARSET gbk;
在存放文本时,也可以使用 TEXT 数据类型,可以将 TEXT 列视为 VARCHAR 列,注意 TEXT 没有默认值,如果不够用可以使用 MEDIUMTEXT 或 LONGTEXT。
 BLOB,MEDIUMBLOB,LONGBLOB是二进制文本数据类型,使用较少。
#如果 varchar 不够用,可以考试使用 mediumtext 或者 longtext
#如果想简单点,可以使用直接使用 text
CREATE TABLE t13( 
	content TEXT, 
	content2 MEDIUMTEXT , 
	content3 LONGTEXT);
5️⃣字符串使用细节
细节1:
CHAR(4),这个4表示字符数(最大255),不是字节数,不管是中文还是字母都是放4个按字符计算。
 VARCHAR(4),这个4表示字符数,不管是字母还是中文都以定义好的表的编码来存放数据。
 不管是中文还是英文字母,都是最多存放4个,是按照字符来存放的。
 对于占多少字节取决于编码。
| 编码类型 | 大小 | 
|---|---|
| GBK | 字母1字节,汉字2字节 | 
| UTF-8 | 字母1字节,汉字3字节 | 
| Unicode | 字母2字节,汉字2字节 | 
细节2:
CHAR(4)是定长(固定的大小),就是说,即使你插入’aa’ ,也会占用分配的4个字符的空间。
 VARCHAR(4)是变长(变化的大小),就是说,如果你插入了’aa’,实际占用空间大小是2个字符空间再加上1-3个字节,因为VARCHAR本身还需要占用1-3个字节来记录存放内容长度
细节3:
什么时候使用char,什么时候使用varchar
 1.如果数据是定长,推荐使用char,比如md5的密码,邮编,手机号,身份证号码等。
 2.如果一个字段的长度是不确定,我们使用varchar ,比如留言,文章。
 3.查询速度:char > varchar
6️⃣时间类型
| 类型 | 格式 | 描述 | 
|---|---|---|
| DATE | YYYY-MM-DD | 年-月-日 | 
| TIME | HH:MM:SS | 时:分:秒 | 
| YEAR | YYYY | 年 | 
| DATETIME | YYYY-MM-DD HH:MM:SS | 年-月-日 时:分:秒 | 
| TIMESTAMP | YYYY-MM-DD HH:MM:SS | 年-月-日 时:分:秒 | 
#演示时间相关的类型
#创建一张表, 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 列会自动的以当前时间进行更新
TIMESTAMP 在 INSERT 和 UPDATE 时,自动更新。
🎇三、修改与删除表
1️⃣添加列
基本语法:
ALTER TABLE 表名
	ADD 列名 列类型
练习:球员表 nba_player 上面添加一个 enter_nba_time 列,INT类型(要求在team后面)
ALTER TABLE nba_player
	ADD enter_nba_time INT NOT NULL DEFAULT 0
	AFTER team;
2️⃣修改列
基本语法:
ALTER TABLE 表名
	MODIFY 列名 列类型
练习:修改球员表的name列,使其长度为60。
ALTER TABLE nba_player
	MODIFY `name` VARCHAR(60) NOT NULL DEFAULT ''
3️⃣删除列
基本语法:
ALTER TABLE 表名
	DROP 列名 
练习:删除球员表 nba_player 上面的 enter_nba_time 列
ALTER TABLE nba_player 
	DROP enter_nba_time 
4️⃣修改表名
基本语法:
RENAME TABLE 表名 TO 新表名 
练习:球员表名改为 nba_players
RENAME TABLE nba_player TO nba_players
5️⃣修改表的字符集
基本语法:
ALTER TABLE 表名 CHARACTER SET 字符集名
练习:球员表的字符集改为utf8
ALTER TABLE nba_player CHARACTER SET utf8
6️⃣修改列名
基本语法:
ALTER TABLE 表名 
	CHANGE 原列名 列名
练习:将列名name修改为player_name
ALTER TABLE nba_player 
	CHANGE `name` player_name VARCHAR(64) NOT NULL DEFAUIT ''
7️⃣查看表的结构
基本语法:
DESC 表名 
8️⃣删除表
基本语法:
DROP TABLE [IF EXISTS] 表名; 
可选项 IF EXISTS 代表只有表存在才会删除该表,表名不存在,则不执行删除操作(如果不
 加该项,删除一张不存在的表,执行将会报错)。



















