零基础学MySQL(二)-- 表的创建,修改,删除


在这里插入图片描述


🎈一、创建表

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️⃣数值型整型默认有符号

类型大小有符号范围无符号范围
TINTINTUNSIGNED占1个字节有符号-128 ~ 127无符号0 ~ 255
SMALLINTUNSIGNED占2个字节有符号-2^15 ~ 2^15 - 1无符号0 ~ 2^16 - 1
MEDIUMINTUNSIGNED占3个字节有符号-2^23 ~ 2^23 - 1无符号0 ~ 2^24 - 1
INTUNSIGNED占4个字节有符号-2^31~ 2^31 - 1无符号0 ~ 2^32 - 1
BIGINTUNSIGNED占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️⃣数值型浮点型默认有符号

类型大小
FLOATUNSIGNED占4个字节
DOUBLEUNSIGNED占8个字节
DECIMAL【MD】UNSIGNED可变

DECIMAL【MD】UNSIGNED可以支持更加精确的小数位M是小数位数精度的总数D是小数点标度后面的位数。
如果D是0则值没有小数点部分。M最大为65D最大为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 字节
TEXT0 ~ 2^16 - 1 字节
MEDIUMTEXT0 ~ 2^24 - 1 字节
LONGTEXT0 ~ 2^32 - 1 字节
BLOB0 ~ 2^16 - 1 字节
MEDIUMBLOB0 ~ 2^24 - 1 字节
LONGBLOB0 ~ 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。
BLOBMEDIUMBLOBLONGBLOB是二进制文本数据类型使用较少。

#如果 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️⃣时间类型

类型格式描述
DATEYYYY-MM-DD年-月-日
TIMEHH:MM:SS时:分:秒
YEARYYYY
DATETIMEYYYY-MM-DD HH:MM:SS年-月-日 时:分:秒
TIMESTAMPYYYY-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 代表只有表存在才会删除该表表名不存在则不执行删除操作(如果不
加该项删除一张不存在的表执行将会报错)。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: mysql

“零基础学MySQL(二)-- 表的创建,修改,删除” 的相关文章