文章目录
- 1. MySql数据类型
-
- 1.1 数值类型
- 1.2 字符串类型
- 1.3 日期类型
- 2.表记录的操作
-
- 2.1 字段约束
- 2.2 drop、delete、truncate之间的区别?
- 3. MySql常见的函数
- 4. 外键和表关系
-
- 4.1 外键介绍
- 4.2 添加外键
- 4.3 表关系
- 4.4 关联查询、外连接查询
1. MySql数据类型
1.1 数值类型
MySql中有很多数值类型,常用的数值类型有:
int 对应Java中的int类型, 占用4个字节
double 对应Java中的double类型, 占用8个字节
1.2 字符串类型
Mysql中包含char和varchar两种字符串类型:
char(n) –- 定长字符串
其中n的范围: 0~255 /个字符
name char(10)
如果存储的数据长度小于定义的最大长度, 剩余的空间会用空格补全, 因此char类型可能会存在一定的空间浪费。
varchar(n) -- 不定长字符串
其中n的范围: 0~255 /个字符 (mysql5.0之前)
0~65535 /个字节(mysql5.0之后)
如果存储的数据长度小于定义的最大长度, 剩余的空间可以留给别的数据使用, 因此varchar类型不会有空间的浪费。
大文本类型有:
text 0~65535 /个字节
bigtext 4GB
ps: char和varchar有什么区别?
char类型比varchar类型存储的效率略高,但是存在空间浪费。
1.3 日期类型
date 格式:年月日
time 格式:时分秒
datetime 格式: 年月日 时分秒
timestamp 时间戳(实际上存储的是从1970-1-1日到指定时间的毫秒值)
datetime的范围: 1000~9999年
timestamp的范围: 1970~2038年
timestamp类型的列可以设置自动更新为当前时间,但是datetime不能设置
2.表记录的操作
2.1 字段约束
1.主键约束
如果一个列添加了主键约束,那么该列就是这张表的主键,主键要求唯一且不能为空。
create table person1(
id int primary key,
...
);
2.唯一约束
如果为一个列添加了唯一约束,那么该列的值就不能重复,但是可以为null。
create table person2(
name char(10) unique,
...
);
3.非空约束
如果为一个列添加了非空约束,那么该列的值就不能为空,但是可以重复。
create table person3(
gender varchar(2) not null,
...
);
2.2 drop、delete、truncate之间的区别?
● drop只能删除库和表,不能删除表记录。
● delete和truncate是删除表记录,不能删除库和表本身
● delete删除表记录时,可以删除表中的某一部分记录,也可以删除表中的所有记录,而且删除时,是一条
一条删除。
● truncate也是删除表记录,但是只能删除所有记录,删除时不是一条一条删除,而是将整张表摧毁重建。
3. MySql常见的函数
1、ifnull(列名, 值)
判断指定的列的值是否为null, 如果为null, 则用第二个参数对null值进行替换
2、count(列名 | *)
count函数是对指定的列或者所有列统计行数
3、max(列名)和min(列名)
max(列名)
对指定的列求最大值
min(列名)
对指定的列求最小值
4、sum(列名和avg(列名)
sum(列名)
对指定的列进行求和
avg(列名)
对指定的列求平均值
5、curdate()、curtime()、sysdate()、now()
Curdate()
获取当前时间, 格式为年月日
Curtime()
获取当前时间, 格式为时分秒
Sysdate() | now()
获取当前时间, 格式为年月日 时分秒
4. 外键和表关系
4.1 外键介绍
外键就是用于通知数据库两张表数据之间对应关系的一个列, 数据库会通过外键来维护两张表的对
应关系。
4.2 添加外键
● 创建表的同时添加外键
CREATE TABLE student(
sid int primary key auto_increment, -- 学生编号
sname VARCHAR(10), -- 学生姓名
s_cid INT, -- 班级编号
FOREIGN KEY (s_cid) REFERENCES class(cid) --指定外键
);
● 在建表后添加外键
4.3 表关系
● 一对一
● 一对多
● 多对多
4.4 关联查询、外连接查询
● 关联查询
select * from class, student
where student.s_icd = class.cid;
● 左外连接查询
左外连接查询会将左边表中的所有记录都查询出来, 而右边表中只查与左边对应的记录。
● 右外连接查询
右外连接查询会将右边表中的所有记录都查询出来,而左边表中只查与右边对应的记录。