数据表增加主键约束<1> 引入
在数据表中尽量避免重复数据的出现,重复的数据也称之为垃圾数据
垃圾数据太多会影响到数据库的一些性能
<2> 主键
会单独给数据表添加一个字段,这个字段中的每个值都是唯一的不重复的
仅仅是用来表示当前的记录是唯一的
这个字段,就称为这张表的主键
表中经常有一个列或多列的组合,其值能唯一地标识表中的每一行
<3> 主键的创建
当创建或更改表时可通过定义 PRIMARY KEY 约束来创建主键
一个表只能有一个 PRIMARY KEY 约束
而且 PRIMARY KEY 约束中的列不能接受null值
<4> 自动增长
设计完一张表的主键列之后,在MySQL中最常规的做法就是让这一列自动按照自然顺序增长
避免人为操作引起的主键列数据冲突的问题
自动增长需要在该列上,添加auto_increment来实现
<5> e.g
# 创建员工表
CREATE TABLE emp(
empNo INT PRIMARY KEY AUTO_INCREMENT,
enameVARCHAR(10),
jobVARCHAR(10),
mgrINT,
hirdateDATETIME,
salDOUBLE,
commDOUBLE,
deptnoINT
);
注:
创建emp表,定义了empNo的数据类型是整数
primary key关键词定义empNo为主键
auto_increment定义empNo中的数据自动增长
<6> 另一种方法
# 给dept表增加主键约束
ALTER TABLE dept
ADD CONSTRAINT PRIMARY KEY(deptno);
注:
使用Alter table关键词修改dept表,给这张表的deptno字段增加主键约束
<7> 总
更建议在创建表的同时添加主键约束
数据表增加唯一约束<1> 语法
ALTER TABLE tab_name
ADD CONSTRAINT UNIQUE(col_name);
<2> 注:
使用Alter table关键词,修改tab_name数据表
使用add constraint unique关键词给指定列col_name增加一个唯一约束
<3> e.g
ALTER TABLE dept
ADD CONSTRAINT UNIQUE(dname);
之后dept表中的dname就不允许出现重复数据
数据表增加默认约束<1> 默认值
数据表的数据是通过程序或者人工添加进去的,添加过程中需要指定添加列字段等信息
如果某些列没有指定值,在添加时数据库会自动使用默认值进行填充
默认值可以指定,在数据库设计中称之为默认约束
<2> e.g
# 创建员工表;员工工资默认为起始工资2000
CREATE TABLEemp(
empNo INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(10),
job VARCHAR(10),
mgr INT,
sal DOUBLE DEFAULT2000,
);
使用default关键字,给工资字段sal指定默认值2000
<3> 在已经存在的表上添加默认约束
# 给已经存在的表tab_name增加默认约束
ALTERTABLEtab_name
CHANGE COLUMN old_col_name new_col_name new_datatype DEFAULT500;
数据表增加外键约束<1> 外键
不同表之间可能存在各种各样的关系
最简单的是使用某个字段关联两张表
这个字段就是外键
如果一个表中的某个字段指向另一个表中的主键,这个字段就称为外键
被指向的表称为主表或者父表,负责指向的表称为从表或者子表
从表中的外键必须引用主表中的主键,外键的值可以为null
<2> 语法
#给从表tab_name的col_name字段增加外键约束,引用主表re_col_name列
ALTER TABLE tab_name
ADD CONSTRAINT FOREIGN KEY fk_name (col_name)
REFERENCES re_tab_name(re_col_name);
注:
给tab_name表的col_name字段增加一个名称为fk_name的外键
外键约束引用了主表re_tab_name的re_col_name字段
<3> e.g
ALTER TABLE emp
ADD CONSTRAINT FOREIGN KEY fk_deptno (deptno)
REFERENCES dept(deptno);
给emp表的deptno字段添加一个名称为fk_deptno的外键约束,引用主表dept的deptno字段
数据表增加检查约束<1> 检查约束
在一些数据库设计时,已经将这样的需求考虑在内,在数据表中的某个字段上可以添加检查约束
所谓检查约束,就是定义数据表中的某个字段中只能出现符合提前预定好条件的值
条件之外的值是不允许添加的
<2> 语法
#给一张表tab_name的col_name增加一个名称为chk_name的检查约束
ALTER TABLE tab_name
ADD CONSTRAINT chk_name
CHECK (col_name-condition);
给表tab_name的col_name字段增加一个名称为chk_name的检查约束
约束条件为(col_name-condition)
<3> 提示
MySQL中暂时不支持检查约束
对于数据库中数据的检查,建议在程序中进行,而不是在数据库层面检查