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文件路径

posted @ 2018-11-14 18:39  payn  阅读(177)  评论(0)    收藏  举报