MySQL–Day02
第一节:MySQL中数据类型及约束
本节目标
- 掌握MySQL中数据类型及应用场景
- 掌握MySQL中高频数据类型的定义方式
- 掌握MySQL中常见约束的含义及应用场景
- 理解主键的含义及定义方式
- 掌握数据库表的定义语法
- 掌握对表结构修改语句的使用
1.1、MySQL中的数据类型
MySQL数据类型分为三类:数值类型,字符串,时间类型
1.整数类型
作用:用于存储整数
关键字 | 范围 | 空间(字节) |
---|---|---|
tinyint–极小整数 | 无符号:0-255 有符号:-128-127 | 1 |
smallint–小整数 | 2 | |
mediumint–中型整数 | 3 | |
int-整数 | 4 | |
BIGINT-大整型 | 8 |
注意:具体在实际开发中用哪一个需要根据你存储的数据来选择,我们使用最多的是INT。
怎么定义:如:num int(4)
这个数字的含义是什么?表示该数字的宽度,如果你填的数据宽度小于指定的宽度,同时又指定了填充0,那么系统就会默认直接补充0,以满足指定的宽度。
2.浮点类型
作用:用于存储小数
注意:存储时也是不精确的,如果需要精确的存储数据decimal(跟Java中BigDecimal)
名称 | 范围 | 空间(字节) |
---|---|---|
float | 表示精度范围7 | 4 |
double | 15 | 8 |
decimal | 表示精确的数据 |
怎么定义:
字段名 浮点类型名称(m,n)
m:该数据最多能存储几个位
n:表示该数据的小数点后面的位数
如:num float(5,2)—这个num最多能存5个数字 5.1 5.1111111(存不下)
这个num最多能有2个小数
3.时间类型
作用:用于存储和时间相关的数据,如:日期,时间,时间戳
名称 | 范围 | 存储的格式 |
---|---|---|
date | 1000-01-01–9999-12-31 | YYYY-MM–DD |
time | HH:MM:SS | |
datetime | YYYY-MM-DD HH:MM:SS | |
timestamp | 从1970-01-01–当前时间的毫秒数 2037 | YYYY-MM-DD HH:MM:SS(具体的时间点) |
注意:实际开发中,存储时间还可以通过存储数值(1970-1-1–当前时间的毫秒数)
4.文本类型
作用:存储文本,字符串,(长字符串)
名称 | 字节数 | 说明 |
---|---|---|
char | 0-256字节 | 定长的字符串 |
varchar | 0-65535 | 可变长的字符串 |
text | 用于存文本 | |
longtext | 用一个存储大型的文本 |
说明:char和varchar的区别:
char是定长字符串,一旦某个列定义为char,如果你存储的数据小于256,那系统会自动的添加占位符,占位到256。
varchar是可变长度的数据类型,系统会根据你存储的数据动态的分配空间,由于系统每次存储数据的时候会计算长度,导致效率比char稍微低一些。
5.其他数据类型
blob
存储二进制类型–存储图片,音频,视频…
约束
什么是约束:对该列的数据做限制,目的是为了保证数据的完整性和有效性
如:数据库中存储身份证号–不允许重复
1、非空约束 NOT NULL
作用:该列数据不允许为null,该列数据必须有值
2、唯一约束 UNIQUE
作用:该列数据不允许重复出现,但是可以为null
3、主键约束 PRIMARY KEY
作用:主键的唯一标识某一行数据的 如:中国人信息–身份证号 某个学校的学生信息–学号 某个公司的员工–工号
注意:1.每一个表没有特殊要求必须有一个主键
2.主键不一定一个字段,可以是多个字段联合主键
4、自增约束 AUTO_INCREMENT
作用:每次添加数据的时候,可以不用手动给值,他会上一行的基础上加1。往往用于主键。
5、无符号 unsigned
作用:表示该列的数据只能存储整数
6、注释 COMMENT
7、默认值 DEFAULT
作用:没有手工给值,则系统会自动添加默认值
语法:DEFAULT ‘默认值’ ,DEFAULT NULL
注意:约束可以混用
8、建数据表
CREATE TABLE table_name IF NOT EXITES(
//指定每一列数据
列名 数据类型 [约束1] [约束2]… COMMENT ‘注释内容’,
列名 数据类型 [约束1] [约束2]… COMMENT ‘注释内容’ ,
列名 数据类型 [约束1] [约束2]… COMMENT ‘注释内容’
) DFAULT CHARSET=UTF-8 – 指定该表的编码
9、更新表结构
1、更改表名
ALTER TABLE 表名 RENAME AS 新名字
需求:将student表名更改为stu
ALTER TABLE student RENAME AS stu;
2.添加字段
ALTER TABLE 表名 ADD 新字段名 数据类型 [约束]
需求:将student表中新增一个age字段表示年龄
ALTER TABLE stu ADD age INT;
3.更改列的列名
ALTER TABLE 表名 CHANGE 旧字段 新字段 数据类型 约束
注意:将原来的旧字段删除然后添加了一个新的字段
需求:将sex字段更改为gender字段
ALTER TABLE stu CHANGE sex gender varchar(2);
4.更改字段 数据类型
ALTER TABLE 表名 MODIFY 字段名 数据类型 约束
需求:将gender字段更改为char类型
ALTER TABLE stu MODIFY gender CHAR(2);
5.删除字段
ALTER TALE 表名 DROP 字段名
需求:删除生日字段
ALTER TABLE stu DROP brith;
6.删除数据库
DROP TABLE [IF EXISTS] 表名
DROP TABLE IF EXISTS stu;
7.查看某个数据库下的所有的表
SHOW TABLES;
8.查看表结构的详细信息
DESC 表名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7uZ0aPpc-1628326291709)(upload/image-20210803120704419.png)]
本节练习:
(1)创建一张学生表
需要记录学号(id),用户名(name),密码(pass),性别(sex),生日(birth),地址(adress),邮箱(email)
其中学号做为主键且自增,用户名不能为空,默认为root,密码不能为空,默认为123456,性别
不能为空,默认为男 ,生日,地址和邮箱默认为null
CREATE TABLE IF NOT EXISTS student(
id INT AUTO_INCREMENT COMMENT '学号',
name VARCHAR(10) NOT NULL DEFAULT 'root' COMMENT '用户给名',
pass VARCHAR(10) NOT NULL DEFAULT '123456' COMMENT '密码',
sex VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
brith DATE DEFAULT NULL COMMENT '生日',
email varchar(15) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY(id)
);
(2)将sex字段改为gender并删除生日字段
(3)新增一字段age表示年龄
第二节:DML 数据操作语言
本节目标
- 掌握想数据库表中添加单个数据及批量添加数据
- 掌握根据条件修改 数据
- 掌握根据条件删除制定数据
- 掌握清空数据表的2中方式并理解二者区别
2.1、数据的添加
INSERT INTO 表名 ([字段名1],[字段名2],…)VALUES ([值1],[值2]…)
-- 数据库中添加一个学生 用户名为:tom 密码:1q2w3e
INSERT INTO student (name,pass) VALUES ('TOM','1q2w3e');
INSERT INTO 表名 VALUES(值1,值2…)
注意:如果不想手动设置,则应该通过DEFALUT进行占位
INSERT INTO student VALUES(DEFAULT,'张三','123456',DEFAULT,DEFAULT,'321321@qq.com');
批量添加:
INSERT INTO 表名 (字段1,字段2…)VALUES(值1,值2…),(值1,值2…),(值1,值2…);
INSERT INTO student VALUES
(DEFAULT,'李四','123456',DEFAULT,DEFAULT,'lisi@qq.com'),
(DEFAULT,'王五','123456',DEFAULT,DEFAULT,'wangwu@qq.com'),
(DEFAULT,'赵六','123456',DEFAULT,DEFAULT,'zhaoliu@qq.com');
注意事项:
1.每个字段或每个值之间需要用逗号进行分割
2.如果需要插入多条数据则只需要写多组,且每一组之间通过逗号进行分隔
3.我们可以不用写字段名,但是我们需要保障给的值应该个字段一一对应,即使不想手动设置值需要用DEFALUT进行占位。
2.2、修改数据
UPDATE 表名 SET 字段名1=新值1,字段名2=新值2 [WHERE 条件]
UPDATE student SET sex = '女';-- 会将数据表中的所有的该字段全部修改-不想看到的
条件的写法:
符号 | 写法 | 含义 |
---|---|---|
> | a>b | 如果a比b大则结果为true |
>= | ||
< | ||
<= | ||
= | ||
!= | 不等于 | |
between and | between 3 and 5 | 在3到5的闭合区间 |
and | 类似于&& | |
OR | 类似于|| |
需求:将李四的姓名改为女
UPDATE student SET sex = '男' WHERE id=3;
分析:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hjPV3bjS-1628326291711)(upload/image-20210803145259218.png)]
需求:将ID为1-3的性别改为中性
UPDATE student SET sex = '中' WHERE id BETWEEN 1 AND 3;
</