0
点赞
收藏
分享

微信扫一扫

学习笔记02——MySQL(二)

星河出山 2022-03-30 阅读 74
java

一、列的约束

1、主键约束(Primary Key)

  • 每一个表格内只能有一个列被设置为主键
  • 主键约束通常是用来标记表格中数据是唯一存在的
  • 主键约束要求当前的列是唯一存在的,不能重复,并且不能为空
//给student表中的id列添加主键约束,约束名为pk_student
alter table student add constraint pk_student primary key (id);
alter table student modify id int(4) auto_increment;
//或者下面这样设置
alter table student change id id int(4) auto_increment;
desc student;
show keys from student;

 

alter table student drop primary key;
alter table student modify id int(4) null;

2、唯一约束(Unique [Key])

  • 可以为某一列添加唯一约束
  • 唯一约束的列值不能重复,但可以为空
  • 唯一约束可以设置在多个列上
//给student表的name列设置唯一约束,约束名为uk_student
alter table student add constraint uk_student unique [key] (name);
//简写,约束名默认的列名
alter table student add unique key(name);   
//删除约束名为uk_student的唯一约束
alter table student drop index uk_student;
//没给唯一约束起名,它的约束名默认为列名
alter table student drop index name;

3、非空约束

  • 在某一列添加非空约束
  • 当前的值不能为null
//设置student表的name列(非)空,默认值为'光颜'
alter table student modify name varchar(10) [not] null default '光颜';
//另一种设置
alter table student change name name varchar(10) [not] null default '光颜';

4、外键约束

  • 主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。
  • 必须为主表定义主键。
  • 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。
  • 在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。
  • 外键中列的数目必须和主表的主键中列的数目相同。
  • 外键中列的数据类型必须和主表主键中对应列的数据类型相同。
//新建分数表
create table score(
st_id int primary key auto_increment,
cscore int(11)
);
//给score表的st_id列添加外键,关联student的id
alter table score add constraint FK_ID foreign key(st_id) REFERENCES student(id);
//删除score表的外键约束
alter table score drop foreign key FK_ID;
alter table score drop key FK_ID;

5、检查约束

用来检查列在存值时,范围是否合理

//检查score表的cscore值是否在[0,100]之间
alter table score add constraint ck_cscore check(cscore>=0  and cscore<=100);

二、表格之间的关系

1、一对一关系

如人与身份证的关系。一个人只有一个身份证号。一个身份证号也对应唯一一个人。这种关系用的比较少,因为一对一的两张表往往可以合并成一张表格。

2、一对多关系

如班级与学生的关系,一个班级可以有多个学生,而一个学生只能在一个班级。

3、多对多关系

如学生与选课之间的关系。一个学生可以选择多门课,一门课也能被多个学生选择。这种关系需要生成一张中间表,记录两张表的对应关系。

三、表格之间的关联查询

1、广义笛卡尔积

广义笛卡尔积将两张表格或多张表格进行无条件的拼接,在拼接后的一张大表格的基础上进行where的筛选。

select * from student,score where student.id=score.st_id;

2、外连接

 

select * from student left join score on student.id=score.st_id;

3、内连接 (自连接)

select * from student inner join score on student.id=score.st_id;

select * from student s1 inner join student s2 on s1.id=s2.id;

 

举报

相关推荐

0 条评论