数据类型
字符类型:
-
char:固定长度,例如:性别;
-
varchar:可变长度,例如:地址;
-
text:备注,说明之类;
-
blob:二进制的,可以存储图片或者声音文件。但在实际中一般不会直接把图片存储到数据库里面,因为数据库扛不起那么大的内存压力,会用专用的图片存储服务器存储图片。
数值类型
-
int:整型,对应 java里面的 int/Integer;
-
bigint:长整型,对应 java里面的 BigInteger/Long;
-
float:小数,一般用来存储分数相关的,不会用来存储货币相关的;
-
decimal:小数,一般用来存储与货币相关的数据,对应的java类型: java.math.BigDecimal;
-
例如:decimal(5,2):表示整数位最多3位数,小数位2位数,小数位多出的位数进行四舍五入,但是四舍五入后整数位不能超过3位数,如:999.999就不能存储,因为小数位的9四舍五入后整数位会变成1000,超过了3位数。
-
日期类型
-
date:年月日,对应java里面的:yyyy-MM-dd格式;
-
time:时分秒,对应java里面的:HH:mm:ss格式;
-
datetime:年月日时分秒,对应yyyy-MM-dd HH:mm:ss格式;
-
timestamp:时间戳从1970-1-1开始计算到现在的总毫秒数,就是java里面的格林尼治时间;
-
关于日期的详细格式大家可以参考课件里面的:"Mysql日期转换格式表.png";
标识列&约束
标识列
-
作用:实现字段的自动增长,可以不用手动插入值。
-
特点:
-
一个表中最多只能有一个标识列;
-
标识列的类型必须是数值类型(int/float/double),一般 int类型用的比较多;
-
标识列必须是一个key/键,比如:主键、唯一约束等。一般用于主键比较多;
-
例
-
约束
主键约束
-
作用:主键是能确定一条记录的唯一标识,主键字段必须唯一,必须非空,一个表中只能有一个主键,但是一个主键可以由多个字段组长。
-
如:一条记录包括身份正号,姓名,年龄,学校,国籍,性别等。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
-
案例:sid int auto_increment primary key
默认值约束.
-
作用:字段设置默认值,可以不用手动插入值。
-
性别案例:sex char(2) default '男';
-
日期案例:
-
adddate timestamp default current_timestamp;current_timestamp 是当前系统时间的意思。
-
adddate timestamp default now();now()是获取当前系统时间。
-
非空约束
-
作用:字段的值不能为空。
-
bookId int not null auto_increment primary key;
唯一约束.
-
作用:字段的值必须唯一。
-
sname varchar(20) comment'姓名',id varchar(18) not null comment '身份证',sex char(2) default '男',unique(sname,id);意思是身份证和姓名加起来是唯一的,这种约束叫组合约束。
-
sname varchar(20) unique comment'姓名',id varchar(18) not null comment '身份证',sex char(2) default '男';意思是姓名是为唯一的。
检查约束.
-
作用:通过表达式约束字段的值。
create table tb_student(
sid int not null auto_ncrement primary key,
sname varchar(10),
sex char(2),
check(sex='男' or sex='女')
)
主外键约束.
-
作用:在 MySQL 中,外键(Foreign Key)是一种用于建立表与表之间关联关系的约束。通过外键,可以在一个表中引用另一个表的主键或唯一键,从而实现数据的关联和一致性。
-
至少涉及到两张表:主表和从表。以及两个键:主键和外键。
-
主外键的主键不一定是主表上的主键,但它必须是主表上唯一且非空的列。
-
在 MySQL 中,主外键的主键和外键的数据类型并不一定要求完全一致,但它们之间需要满足一定的数据类型兼容性。通常情况下,为了确保数据的一致性和有效性,主键和外键的数据类型应该尽可能保持一致。这样可以避免数据类型转换和不匹配带来的问题。当主表的主键列的数据类型为某一类型时,建议从表中引用主键的外键列的数据类型与之相同。MySQL 在某些情况下允许主键和外键的数据类型之间存在一定的兼容性。例如,可以将主表的主键列定义为整数类型(如 INT),而在从表中的外键列使用兼容的数值类型(如 BIGINT)。MySQL 在执行引用完整性检查时,会自动进行数据类型转换,但这可能会导致一些性能上的损失。
create table tb_score(
sid int not null auto_increment primary key ,
score float default 0.0,
foreign key(sid) references fuser(sid)
);
运算符
关系运算符.
-
=:等于;
-
>:大于;
-
<:小于;
-
>=:大于或等于;
-
<=:小于或等于;
-
<>/!=:不等于。
逻辑运算符&其它运算符.
-
and/&&:并且;
-
or/||:或者;
-
not/!:非。
-
in(...):在某个范围内;
-
not in:不在某个范围内。
-
is null:字段值是null(系统默认null,手写null无法识别);
-
is not null:字段值不是null(系统默认null,手写null无法识别);
-
between...and:在某个范围之内(含最小、最大值);
增删改查排序
增加.
-
增加单条数据:insert into 表名(列1,列2,...,列N) values(值1,值2,...,值N)
-
批量增加:
语法1:
insert into 表名(列1,列2,...,列N)
values(值1,值2,...,值N),
(值1,值2,...,值N),
......
(值1,值2,...,值N);
语法2:
insert into 表名(列1,列2,...,列N)
select 值1,值2,...,值N union,
select 值1,值2,...,值N union,
.....................
select 值1,值2,...,值N;
-
注意事项:
-
-
在插入数据的时候,如果插入的数据是所有列的数据,那么列名则可以省略不写(建议不省略)。
-
插入的数据个数必须和列名的个数及顺序形成一一对应的关系且数据类型要匹配,标识列不能维护。
-
对于允许为空的字段,可以使用null关键字进行插入。
-
查询.
基础查询.
-
查询表内所有数据:select * from 表名;# * 代表表内所有字段;
-
查询表内部分字段:select 字段1,字段2,字段3,.....from 表名;
-
带条件查询:select....from 表名 where 条件表达式;# where后面的条件表达式一般会结合运算符使用;
模糊查询/关键字查询.
-
模糊查询:模糊查询也属于条件查询,只不过在条件里面带有 like 关键字和通配符。
-
like/not llike;
-
left:取左边的指定字符;# where left(address,1)='陕';
-
right:取右边的指定字符;# where right(address,2)='陕西';
-
通配符(通用的匹配符号):
-
_:一个字符;
%:任意长度的字符串,也可以没有字符。
关键字-distinct.
-
作用:去除重复项,相同的值只显示一个。
-
语法:select distinct 字段名 from student;
修改.
-
全表修改:update 表名 set 列名=更新值;
-
条件修改:update 表名 set 列名=更新值 where 条件;# where后面的条件表达式一般会结合运算符使用;
-
注:
-
修改数据时如果不带where条件则是全表修改。
-
在修改表内数据的时候没有关键字from。
-
删除.
-
删除表内所有数据:delete from 表名;
-
通过条件删除数据:delete from表名 where 删除条件;# where后面的条件表达式一般会结合运算符使用;
排序.
-
语法:select * from 表名 order by 条件 asc/desc;
-
asc:升序/默认;
-
desc:降序。
-