目录
1.3 主键自增(可以设置初始值'auto_increment=值')
1.6 非空约束(not null)和默认值(defalut)
2.4 between... and ...(在...之间)
Select 列 from 表 Where xxxx like Group by having order by limit
1. DDL增强
1.1 约束分类
1.2 实体完整性(主键)
我们的java类,对应的就是一张表,成员变量对应一个字段,一个类对象对应一条数据,那么对象都有一定的唯一性
比如判断对象是否相等,我们通常使用equals()方法和hashCode()方法,那么怎么在数据库中表示数据的唯一性呢?主键
主键通常用于唯一确定表中的一条记录,设置为主键的字段是不能为NULL并且不能重复的。
主键可以设置在一个字段上,也可以设置在多个字段上。(但大多数场景都是设置在一个字段上,这个字段通常是业务主键或者流水号)
1.2.1 创建表时添加主键
① 创建列时加在后面 primary key
② 列名全部设置完后 primary key (里面可以加多个列名)
1.2.2 创建表之后添加主键
alter table 表名 add primary key(列名,列名,列名...)
1.3 主键自增(可以设置初始值'auto_increment=值')
上面我们已经对表添加了主键,主键值不能为空且不能重复,那么问题来了...
如果主键的值让客户输入的话,很容易就重复了,比如888,666等数字大家都喜欢使用,导致一直输入不正确,非常不方便
所以又有了自增的概念,所谓自增,望文知意,就是自动增加,不用我们输入值
但是自增的列,必须为主键列,关键字 auto_increment
1.3.1 创建表时主键自增
① 创建列时加在后面 auto_increment
② 列名全部设置完后 primary key (里面可以加多个列名)
1.3.2 创建表后主键自增
alter table 表名 modify 主键列名 类型 auto_increment
1.4 关联完整性(外键)
对应java代码来说,外键就是类的关联关系(一个类的成员变量是另外一个类的对象引用)
像这种一个类的变量可以找到另外一个类对象的这种关联关系,在数据库中怎么体现呢? 外键
一个表中的外键列,需要参照另一个表的主键值生成,并且一个表的外键列的值和另一个表的主键值的数据类型必须一致,
然后就可以通过这个表中的外键 去找另一个表的主键,能找到主键就能根据主键找到对应的一行数据
常用于有关联关系的两个表中
外键列的值,必须是关联表中的已有主键值,也可以为空
1.4.1 创建表时设置外键
创建列时加在后面 foreign key(外键列) references 关联表(关联表中的主键列)
例如 :
1.4.2 创建表后设置外键
alter table 表名 add foreign key(外键列) references 关联表(关联表中的主键列)
1.4.3 多种对应模式
1.4.3.1 一对一
直接对应
1.4.3.2 一对多 , 多对一
将外键设置在多的表中
1.4.3.3 多对多
设置中间表 , 保存两个表的外键
查询时在中间表上查询就可以查询到全部的信息
1.5 唯一约束
唯一约束是指定table的列或列组合不能重复,保证数据的唯一性。
唯一约束不允许出现重复的值,但是可以为多个null.
1.5.1 创建表时添加唯一约束:
有两种写法:
①. 可以在创建列时加在后面 unique
②. 创建完所有列后加在末尾 unique(列名)
1.5.2 创建表后添加唯一约束
alter table 表名 add unique(列名);
1.6 非空约束(not null)和默认值(defalut)
所有的类型的值都可以是null,包括int、float 等数据类型,设置为not null的字段,必须填入数据
经常和default一起使用,当不填写数据的时候,把默认值设置成指定的值
1.6.1 创建表时添加约束
①在创建列的时候加在后面 not null (非空约束)
②在创建列的时候加在后面 default '默认的内容'
③在创建列的时候加在后面 not null default ' 默认的内容'
注意 : 没有添加某一列的值,而那一列又设置不能为空,并且也没有默认值,就会报错
1.6.2 创建表后添加约束
① alter table 表名 modify 列名 类型 not null ;
② alter table 表名 modify 列名 类型 default '默认的内容';
③ alter table 表名 modify 列名 类型 not null default '默认的内容';
1.7 Check扩展约束
CHECK:检查约束(MySql不支持),检查字段的值是否为指定的值
一般用于性别等,对列的值做一些限制,比如 性别列的值只能是男或者女
但是MySQL这里给舍弃了,不再支持,所以六大约束就成了五大约束
2. 条件判断
注意 : 如果 一个语句中,同时出现了and和or的话,and优先级高
2.1 and
且,和,的意思,一般用于 必须符合两个添加的判断,等同于java中的 &&
语法 : select 列限定 from 表限定 where A表达式 and B表达式;
2.2 or
或的意思,一般用于 符合一个添加判断的情况下,等同于java中的 ||
语法 : select 列限定 from 表限定 where A表达式 or B表达式;
2.3 关系表达式
> , >= , < , <= ,<>,=
> : 大于
< : 小于
>= : 大于等于
<= : 小于等于
= : 相等
<> : 不等于
注意 : = 和 <> 额外留意,和java中有所不同,java中判断相等用 == , 这里只用 = , java中判断不相等用 != , 这里使用 <>
2.4 between... and ...(在...之间)
语法 : select 列限定 from 表限定 where 列名 between 值1 and 值1;
(取大于等于第一个值小于等于第二个值)
2.5 in
在指定数据中
语法 : select 列限定 from 表限定 where 列名 in(值1,值2....);
比如批量删除 可以使用in来完成
2.6 模糊查询like
我们经常会用到搜索功能,比如百度,搜索功能实现,就是使用like模糊查询技术点
其中 % 匹配任意个数的任意字符 ; _ 匹配单个任意字符
语法 : select 列限定 from 表限定 where 列名 like '值' ;
如果想要查询 _ 或者 % 需要转义 \% \_
2.7 Order by 排序
排序,望文知意,能够让我们查询的数据进行排序展示
语法 : select 列限定 from 表限定 order by 列名 asc/desc;
注 : 如果不写asc/desc 则默认为升序 ; Asc : 升序 ; Desc : 降序
2.8 Limit
限制条数,通常和order by一起使用,因为我们使用排序之后,再去获取前几条数据,比较有价值,比如成绩前三名
语法 : select 列限定 from 表限定 limit 条数;
select 列限定 from 表限定 limit 开始值(不包含) ,条数;
3. 单表查询(组函数)
MYSQL中有一类特殊的函数,用于统计,或者分组统计,
分组关键字使用 group by
3.1 常用数组函数
语法 : select count(*),max(字段名),min(字段名)... from 表名
count(*) : 总条数
max(字段名) : 最大值
min(字段名) : 最小值
avg(字段名) : 平均值
sum(字段名) : 总和
3.2 Group by
语法 : select count(*),max(字段名),min(字段名)... from 表名 group by 字段名;
3.3 Having(过滤)
语法 : select count(*),max(字段名),min(字段名)... from 表名 group by 字段名 having 过滤条件