1.数据库的完整性
数据库中的数据是从外界输入的,而数据的输入由于种种原因,会发生输入无效或错误信息。保证输入的数据符合规定,成为了数据库系统,尤其是多用户的关系数据库系统首要关注的问题。
它是应防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。
分为三类:域完整性、引用完整性、实体完整性
2、实体完整性
表中所有的行唯一
3.域完整性
列必须满足特定的数据类型或约束
约束包括取值范围精度等
4.引用完整性
保证主关键字和外部关键字之间的参照关系。涉及两个或两个以上表的数据的一致性维护
5、使用约束实现数据完整性
数据库采用多种方法来保证数据完整性,包括约束、规则和触发器。
约束类型 | 关键字 | 说明 |
非空约束 | NOT NULL | 如果字段不允许为空,则需要设置NOT NULL约束。 |
默认约束 | DEFAULT | 赋予某字段默认值,如果该字段没有赋值,则其值为默认值。 |
唯一约束 | UNIQUE KEY | 设置该字段的值唯一的,允许为空。 |
主键约束 | PRIMARY KEY | 设置该字段为表的主键,可以作为该表记录的唯一标识。 |
外键约束 | FOREIGN KEY | 用于在两表之间建立关系,需要引用主表的哪一字段。 |
6.添加约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束关键字说明
约束名的取名推荐采用:约束类型_约束字段
主键(Primary Key)约束:如 PK_stuNo
唯一(Unique )约束:如 UQ_stuID
外键(Foreign Key)约束:如 FK_stuNo
7.设置唯一约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE(列名)ALTER TABLE student
ALTER TABLE STUDENT ADD CONSTRAINT uq_stuid UNIQUE(identitycard)
8.主键
唯一标识表中的行,强制表的实体完整性
1)保证实体的完整性;
2)加快数据库的操作速度;
3)添加新记录时,DBMS会自动检查新记录的主键值,不允许该值与其他记录的主键值重复;
4) DBMS自动按主键值的顺序显示记录。如果没有定义主键,则按输入记录的顺序显示记录。
1:一个表只能有一个主键,并且主键列不允许出现空值。
2:尽管有的表中允许没有主键,但是通常情况下,建议为表设置主键。
9.主键选择的原则
1)最少性是指列数最少的键。如果可以从单个主键和复合主键中选择,应该选择单个主键,这是因为操作一列比操作多列要快。当然该规则也有例外,例如,两个整数类型的列的组合比一个很大的字符类型的列操作要快。
2)稳定性是指列中数据的特征。由于主键通常用来在两个表之间建立联系,所以主键的数据不能经常更新。理想情况下,应该永远不变。
如果两列或多列组合起来唯一标识一行,为组合主键
10.主键约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY(列名1,列名2,...)
11.外键
一般不使用外键
在数据库设计中,学生的信息和学生的考试成绩是存放在不同的数据表中。在成绩表中,可以存储学生的学号来表示是哪个学生的考试成绩,这又引发一个问题:“如果成绩表中输入的学号根本不存在或者把学号写错了” ,该怎么办 ?
这个时候,就应当建立一种“引用”的关系,确保“从表”中的某个数据项在“主表”中必须存在,以避免上述错误发生。
“外键”就是用来达到这个目的的,它是相对于主键而言的,就是“从表”中对应于“主表”中的列,在从表中称为外键或引用键,它的值要求与主表的主键相对应。
“外键”用来强制引用完整性。一个表可以有多个外键。
12.外键约束
ALTER TABLE 从表名
ADD CONSTRAINT 约束名 FOREIGN KEY(从表的列名)
REFERENCES 主表名(主表的列名)
主表中的字段必须为主键。
从表中的外键列和主表中的主键列的数据类型要保持一致,和字段名无关。
主表和从表的表类型为InnoDB。
13.删除约束
ALTER TABLE 表名 DROP PRIMARY KEY; #删除主键约束
ALTER TABLE 表名 DROP KEY 唯一约束名; #删除唯一约束
ALTER TABLE 表名 DROP FOREIGN KEY 外键约束名; #删除外键约束
14.DML语言
数据操作语言
包括INSERT,UPDATE,DELETE(增删改)
15.插入数据
INSERT INTO 表名 [ ( 字段1, 字段2, 字段3, … ) ] VALUES ( 值1, 值2, 值3, …);
INSERT INTO 表名 [ ( 字段1, 字段2, 字段3, … ) ] VALUES ( 值1, 值2, 值3, …);
表的字段是可选的,如果省略,则依次插入所有的字段。
如果插入的是表中部分列的数据,字段名列表必须填写。
多个字段和多个值之间使用逗号分隔。
值列表必须和字段名列表数量相同且数据类型相符(字符串和日期类型的值要加单引号)。
值列表中的数据必须符合数据完整性的要求。
16.将查询结果添加到查询中
CREATE TABLE 新表名 ( SELECT 字段1, 字段2, 字段3, … FROM 原表)
CREATE TABLE stuhistory ( SELECT * FROM student)
17.修改数据
UPDATE 表名
SET column_name = value [ , column_name2 = value2, …. ] [ WHERE condition ];
column_name 为要更改的字段名。
value 为修改后的数据,可以为变量、具体值、表达式或者嵌套的SELECT结果。
多个字段之间用逗号隔开。
提供的修改数据必须符合数据完整性的要求。
condition为筛选条件,如不指定则修改该表的所有列数据。
18.sql语句的运算符
算数运算符
+、-、*、/、%(取模求余)、=(赋值)
比较运算符
=、<>或!=(不等于)、>、<、>=、<=、BETWEEN...AND...(之间)
逻辑运算符
AND,OR,NOT(取反)
19.删除数据
DELETE FROM 表名 [ WHERE condition ];
DELETE语句删除的是整条记录,不会只删除单个列。
condition为筛选条件,如不指定则修改该表的所有列数据。
TRUNCATE TABLE 命令
TRUNCATE TABLE 表名;
TRUNCATE TABLE不能用于有外键约束引用的表。