MySql约束
一、DQL排序查询
语法:order by 子句
order by 排序字段1 排序方式1,排序字段2,排序方式2...;
排序方式:
ASC(Ascending):升序,默认
DESC(Descendind):降序
注意:如果过有多个排序条件,则当前边的条件值一样时,才会判断第二条件。
二、DQL聚合函数
概述:
将一组值执行计算并返回单一的值。聚合函数常与SELECT语句的GROUP BY子句一同使用。
聚合函数:将一列数据作为整体,进行纵向计算。
1、COUNT:计算个数
1)一般选择非空的列,主键。
2)count(*)
2、max:最大值
3、min:最小值
4、sum:计算和
5、avg:计算平均值
-->聚合函数排除了null值-->如何解决
count(*) ---> 会自动过滤掉null的行。
可以这么写select COUNT(ifnull(comm,0)) from emp;
或者计算主键所列的个数。因为主键唯一且不为null;
总结:
聚合函数的作用为了方便对某一列数据的操作,需要注意 null 值。
三、DQL分组查询
概述:
GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组。字段中值相等为一组。
语法:
GROUP BY 字段名 [HAVING 条件表达式] [WITH ROLLUP]
select sex,AVG(math) from student GROUP BY sex;
分组查询尽量不要使用非关联列。
HAVING条件表达式:
用来限制分组后的显示。符合条件表达式的结果将被显示。
WITH ROLLUP:
在所有的记录的最后加上一条记录。加上的这条记录是上面所有记录的总和。
注意:
WHERE和HAVING的区别:
WHERE在分组之前进行限定,如果不满足条件,则不参与分组。HAVING在分组之后进行限定。
WHERE后不可跟聚合函数,HAVING可以进行聚合函数的判断。
作用:
排除一些不相关的列。根据某个字段来分组。-->根据字段值重新组成列。
四、DQL分页查询
语法:
limit 开始的索引,每页查询的条数;
公式:
开始的索引 = (当前的页码 - 1) * 每页显示的条数
limit 是一个MySQL"方言"==>mysql中才能使用。
五、约束
概念:
对表中的数据进行限定,保证数据的正确性、有效性和完整性。
分类:
1、主键约束(Primary Key Constraint):要求主键数据唯一,并且不允许为空。
2、非空约束(not null):
3、唯一约束(Check):
4、外键约束():
5.1、非空约束
概述:
not null,某一列的值不能为null。
5.1.1、创建表时添加约束
CREATE TABLE stu( id INT, NAME VARCHAR(20) NOT NULL -- name为非空 );
5.1.2、创建表后,添加非空约束:
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;
5.1.3、删除name的非空约束:
ALTER TABLE stu MODIFY NAME VARCHAR(20);
总结:
根据实际情况来确定是否使用非空约束。如注册用户,用户密码必须不为null;
5.2、唯一约束
概述:
某一列的值并不能重复。注意:null值可以有多个。
唯一约束:unique,某一列的值不能重复。
5.2.1、创建表时,添加唯一约束:
CREATE TABLE stu( id INT, phone_number VARCHAR(20) UNIQUE -- 手机号 );
5.2.2、删除唯一约束:
ALTER TABLE stu DROP INDEX phone_number;
5.2.3、创建表后添加唯一的约束:
ALTER TABLE stu MODIFY phone_number varchar(30) UNIQUE;
5.3、主键约束
primary key:非空并且唯一,一张表只能有一个主键,主键是表的唯一标识。
5.3.1、在创建表时,添加主键约束:
create table stu( id int primary key,-- 给id添加主键约束 name varchar(20) ;
5.3.2、删除主键:
错误写法:alter table stu modify id int;
ALTER TABLE stu DROP PRIMARY KEY;
5.3.3、创建完表后,添加主键:
ALTER TABLE stu MODIFY id PRIMARY KEY;
总结:
主键是表中标识唯一行的标志(也有其他方法标识为一行,如唯一列)。
主键主要用于查询表单数据,修改单调数据和删除单调数据上。
如果一个主键自增长列是double类型的话,显示的四舍五入的值。
5.4、自定增长
概念:
如果某一列是数值类型的,使用auto increment可以完成值的自动增长。
5.4.1、在创建表时,添加主键约束,并完成主键自动增长
create table stu( id int primary key auto_increment,-- 给id添加主键约束 name varchar(20) );
5.4.2、删除自动增长
ALTER TABLE stu MODIFY id int;
5.4.3、添加自动增长
ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;
总结:
这种方式是使用数据库提供的自增长数值型字段作为自增主键,优点:
1、数据库自动编号,速度快,而且是增量增长,按顺序存放,有利于检索。
2、数字型,占用空间小,易排序,在程序中传递也方便。
3、如果通过非系统增加记录,可以不指定该字段,不停担心主键重复的问题。
缺点:
1、因为自动增长,在收到那个要插入指定ID记录时,会显得麻烦,尤其是当系统与其它系统集成时,需要数据导入时,很难保证原系统的ID不发生主键冲突。(前提是老系统也是数字型的)。特别是在新系统上线时,新旧系统并行存在,并且是异库异构的数据库的情况下,需要双向同步时,自增主键将是你的噩梦;
2、在系统集成或割接时,如果新旧系统主键不同是数字型就会导致修改主键数据类型,这也会导致其它有外键关联的表的修改,后果同样很严重;
3、若系统也是数字型的,在导入时,为了区分新老数据,可能想在老数据主键前统一加一个字符标识(例如“o”,old)来表示这是老数据,那么自动增长的数字型又面临一个挑战。
5.5、外键约束
foreign key:让表与表产生关系,从而保证数据的正确性。
5.5.1、创建表时,添加外键
语法:
create table 表名( .... 外键字段 constraint 外键名称 foreign key (外键字段名称) references 主表名称(主表列名称) );
5.5.2、删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
5.5.3、创建表后添加外键
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCE 主表名称 (主标列名称)
5.6、外键约束--级联操作
A表与B表有外键约束,A中有外键,B中数据改变时,A的外键字段对应做出改变。
级联(cascade):
多个对象之间的映射关系,建立数据之间的级联关系提高管理效率。
当主动方对象执行操作时,被关联对象(被动方)是否同步执行同一操作。
5.6.1、添加级联操作:
语法:
ALTER TABLE 表名 ADD CONSTRAINT 外键名称~ FOREIGN KEY (外键字段名称) REFERENCE 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE;
5.6.2、分类:
1、级联更新:ON UPDATE CASCADE;
2、级联删除:ON DELETE CASCADE;
六、多表关系介绍
6.1、一对多关系实现
实现方式:在多的一方简历外键,指向一的一方的主键。
6.2、多对多关系实现
实现方式:多对多关系实现需要借助第三章中间表。中间表至少包含两个字段。着两个字段作为第三张表的外键,分别指向两张表的主键。
6.3、一对一关系实现
实现方式:一对一关系实现,可以在任意一方添加唯一外键指向另一方的主键。
七、数据库的备份和还原
7.1、命令行
语法
备份:
mysqldump -uroot -pxxx 数据库的名称 >保存的路径
还原:
1、登陆数据库
2、创建数据库
3、使用数据库
4、执行文件。source文件路径

浙公网安备 33010602011771号