SQL复习四(完整性约束)

完整性约束是为了表的数据的正确性。主要有主键,外键的约束。

1 主键

当某一列添加了主键约束后,该列的数据就不能重复出现。这样每行记录中其主键列就能唯一的标识着以行。如学生可以用学号作为唯一的标识。

主键的不能为null,也不能重复。

指定主键的约束用关键字 primary key 。

创建表时,直接指定主键

create table student1(
sid char(6) primary key,
sname varchar(20),
age int,
gender varchar(10)
)

创建表时,定义列后指定主键

create table student2(
sid char(6),
sname varchar(20),
age int,
gender varchar(10),
primary key(sid)
);

创建表后,增加主键

create table student3(
sid char(6),
sname varchar(20),
age int,
gender varchar(10)
)

添加主键

alter table student3 add primary key(sid);

删除主键(只是删除主键约束,而不会删除主键列):

alter table student3 drop primary key;
2 主键自增长

MySQL提供了主键自动增长的功能!这样用户就不用再为是否有主键是否重复而烦恼了。当主键设置为自动增长后,在没有给出主键值时,主键的值会自动生成,而且是最大主键值+1,也就不会出现重复主键的可能了。

创建表时设置主键自增长(主键必须是整型才可以自增章)

create table stu4(
sid int primary key auto_increment,
sname varchar(20),
age int;
gender varchar(10)
)

修改表时设置主键自增长:

alter table sut change sid sid int auto_increment;

修改表时删除主键自增长:

alter table stu change sid sid int;
3 非空

指定非空约束的列不能没有值,也就是说在插入记录时,对添加了非空约束的列一定要给值;在修改记录时,不能把非空列的值设置为NULL。

指定非空约束:

create table stu5(
sid int primary key auto_increment,
sname varchar(20) not null,
age int,
gender varchar(10)
)

当为sname字段指定为非空后,在向stu表中插入记录时,必须给sname字段指定值,否则会报错:

INSERT INTO stu(sid) VALUES(1);

插入的记录中sname没有指定值,所以会报错!

4 唯一

还可以为字段指定唯一约束!当为字段指定唯一约束后,那么字段的值必须是唯一的。这一点与主键相似!例如给stu表的sname字段指定唯一约束:

CREATE TABLE tab_ab(

         sid INT PRIMARY KEY AUTO_INCREMENT,

         sname VARCHAR(10) UNIQUE

);

INSERT INTO sname(sid, sname) VALUES(1001, ‘zs‘);

INSERT INTO sname(sid, sname) VALUES(1002, ‘zs‘);

  当两次插入相同的名字时,MySQL会报错!

 5 外键

主外键是构成表与表关系的唯一途径,外键是另一张表的主键。

l         创建t_user表,指定uid为主键列:

create table user(
uid int primary key auto_increment,
name varchar(20) unique not null
)

创建t_section表,指定sid为主键列,u_id为相对t_user表的uid列的外键:

create table section(
 sid int primary key auto_increment,
sname varchar(20) not null,
u_id int,
constraint fk_user_id foreign key(u_id) references user(uid)
)

修改t_section表,指定u_id为相对t_user表的uid列的外键:

alter table section
add constraint fk_user_id
foreign key(u_id)
references user(uid);

  修改t_section表,删除u_id的外键约束:

alter table section drop foreign key fk_user_id;

 

 

时间: 2024-11-05 21:08:20

SQL复习四(完整性约束)的相关文章

Sql复习之安全性与权限管理+vmware增加硬盘容量

参考资料: http://www.cnblogs.com/Jackeyzhang/archive/2011/05/18/2049621.html VmWare虚拟机增加硬盘容量的方法 http://blog.csdn.net/superchanon/article/details/8255566 DOS中切换盘符(直接CD不行) ? 参考资料:http://blog.csdn.net/songyuhongnannan/article/details/7279070 SQLServer 角色与权限

Hibernate复习(四)常见的映射类型A

1.many-to-one 属性如下: ? name:设定待映射的持久化类的属性名. ? column: 设定和持久化类的属性对应的表的外键. ? class:设定持久化类的属性的类型. 2.set <set>元素包括以下属性: – name: 设定待映射的持久化类的属性名 – cascade: 当取值为"save-update",表示级联保存和更新. – inverse:当取值为"true",表示在双向关联中,这一端为镜像端. ? <set>

[转]深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接

深入理解SQL的四种连接-左外连接.右外连接.内连接.全连接 1.内连接(典型的连接运算,使用像 =  或 <> 之类的比较运算符).包括相等连接和自然连接.     内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和courses表中学生标识号相同的所有行.       2.外连接.外连接可以是左向外连接.右向外连接或完整外部连接.     在 FROM子句中指定外连接时,可以由下列几组关键字中的一组指定:     1)LEFT  JOIN或LEFT

SQL的四种语言和数据库范式

1. SQL的四种语言 DDL(Data Definition Language)数据库定义语言 CREATE ALTER DROP TRUNCATE COMMENT RENAME DML(Data Manipulation Language)数据操纵语言 SELECT INSERT UPDATE DELETE MERGE CALL EXPLAIN PLAN LOCK TABLE DCL(Data Control Language)数据库控制语言 GRANT REVOKE TCL(Transac

SQL的四种连接

SQL的四种连接-内连接.左外连接.右外连接.全连接   今天在看一个遗留系统的数据表的时候发现平时查找的视图是FULL OUT JOIN的,导致平时的数据记录要进行一些限制性处理,其实也可以设置视图各表为右外连接并在视图上设置各列的排序和筛选条件就可以达到效果. 联接条件可在FROM或WHERE子句中指定,建议在FROM子句中指定联接条件.WHERE和HAVING子句也可以包含搜索条件,以进一步筛选联接条件所选的行.     联接可分为以下几类: 1.内联接(典型的联接运算,使用像 =  或

sql中表达完整性约束

sql中表达完整性约束 sql约束性分为实体完整性,参照完整性,用户定义完整性,删除约束 实体完整性 1.建表时定义主键   Create table 表名    (          Sno int identity(1,1),          Sname nvarchar(20),          --设置主键         Primary key (Sno)     )     2.添加主键     alter table 表名      add constraint PK_表名_S

Oracle sql 复习题目总结

sql 题目一 表结构 1.表名:g_cardapply 字段(字段名/类型/长度): apply_no varchar8; //申请单号(关键字) apply_date date; //申请日期 state varchar2; //申请状态 2.表名:g_cardapplydetail 字段(字段名/类型/长度): apply_no varchar8; //申请单号(关键字) name varchar30; //申请人姓名 idcard varchar18; //申请人身份证号 state v

Oracle SQL(四)

5. SQL高级--表优化相关(序列.视图等) 5.1 INDEX(索引) 可以在表中创建索引,以便更加快速高效地查询数据. 用户无法看到索引,它们只能被用来加速搜索/查询. PS:更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间,这是由于索引本身也需要更新.因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引. 5.2 索引新增 --在表上创建一个简单的索引.允许使用重复的值 CREATE INDEX 索引名 ON 表 (列) --在表上创建一个唯一的索引.不允许使用重复的

深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接(转载)

1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接.     内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和courses表中学生标识号相同的所有行.     2.外联接.外联接可以是左向外联接.右向外联接或完整外部联接.     在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:     1)LEFT  JOIN或LEFT OUTER JOIN     左向外联接的结果集包括  LEFT