主键约束
主键约束的特征
- 主键列的值不容许重复,通过主键约束,可以强制表的实体完整性
- 一个表中只能有一个主键
- 主键约束的列不接受
NULL
- 主键约束通过
PRIMARY KEY
来创建主键 - 删除主键推荐使用
ALTER TABLE emp MODIFY id INT PRIMARY KEY
##1.在建表的时候添加主键约束
CREATE TABLE emp(
id INT primary key,
name VARCHAR
);
##删除主键约束
ALTER TABLE emp DROP PRIMARY KEY;
##创建表后添加主键约束
ALTER TABLE emp MODIFY id INT PRIMARY KEY;修改列的属性来添加主键约束
ALTER TABLE 表名称 ADD PRIMARY KEY(id);
ALTER TABLE dept ADD CONSTRAINT pk_name PRIMARY KEY(deptno);
主键自增长约束
自增长列的特征
-
并不是所有的表在设计完后都能提供合适的主键,为此数据库提供了自增长列
- 自增长列的数值类型
INT,FLOAT,DOUBLE
等 - 其值由数据库自动维护
- 是永远都不会重复的
- 设置自增长列用
AUTO_INCREMENT
来设置 - 标识符必须用一个KEY搭配使用(key指主键、唯一、外键)
- 一个表最多有一个标识符
- 标识列的类型只能是数值型的
- 标识符可以通过
SET AUTO_INCREMENT_INCREMENT = 3
设置步长(全局) - 如果设置了步长就会从1+步长 依次递增
- 如果表中已经有了数据,会安1+步长进行计算,如果这个值已有,则再加知道没有
自增与主键
CREATE TABLE emp( empNo INT PRIMARY KEY AUTO_INCREMENT, job VARCHAR(10), mgr INT, sal DOUBLE, comm DOUBLE, deptno INT )CHARACTER SET utf8; -- 设置自增长列的初始值 CREATE TABLE temp( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(2) ) AUTO_INCREMENT=10; -- 设置自增长列的初始值 ALTER TABLE emp AUTO_INCREMENT = 10; alter table 表名称 modify column id int auto_increment; -- 删除自增长列 ALTER TABLE 表名称 MODIFY COLUMN id INT;
- 自增长列的数值类型
##创建时候添加逐渐增长
CREATE TABLE emp(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(30)
);
##删除主键自增
ALTER TABLE emp MODIFY id INT;
##创建表后再添加主键自增
ALTER TABLE emp MODIFY id INT AUTO_INCREMENT;
设置AUTO_INCREMENT的初始值
ALTER TABLE emp1 AUTP_INCREMENT = 10;
#也可以在创建表的时候给auto_increment设置初始值
CREATE TABLE EMP1(
ID INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCAHR(20)
)AOTO_INCREMENT = 10;
唯一约束
对于非主键列中的值也要求唯一性时,就需要唯一约束
#创建表的时候给除主键外的列添加唯一约束
create table emp(
id int primary key auto_increment,
name varchar(10) unique
);
#给唯一约束起一个别名
create table emp(
id int primary key auto_increment;
name varchar(10),
constraint uq unique(name) --这行就是给name的唯一约束起一个别名
);
##表创建完成后给表的非主键添加唯一
ALTER TABLE emp ADD CONSTRAINT UNIQUE(name);
alter table emp add unique(name);
-删除唯一约束
alter table 表名称 drop index 设置唯一时的名称;
默认约束
为列中的值设置默认值,default…,如果已经定了值,默认值就无效了
#创建表时
CREATE TABLE course(
-> id INT DEFAULT 1,
-> name VARCHAR(11)
-> );
#删除默认值===》将默认值改为null
ALTER TABLE course MODIFY COLUMN id INT;
#添加默认值
ALTER TABLE course MODIFY COLUMN id INT DEFAULT 1;
- 创建表时,不写默认值都默认是null,(在无主键约束的条件下)
- 默认约束和主键可以同时存在
- 默认约束不可以和AUTO_INCREMENT同时存在
非空约束
NOT NULL
:非空,用于保证该字段的值不能为空。例如学生表的学生姓名及学号等等
#创建表时添加非空约束
CREATE TABLE math(
id INT NOT NULL,
name VARCAHR(10)
);
#删除非空约束
ALTER TABLE math MODIFY id INT;
#添加非空约束
ALTER TABLE math MADIFY id INT NOT NULL;
外键约束
A表中列的值来自于另外一张表B的主键或唯一键的列称为 外键FK,
将被引用值得表称为
主表或父表,将引用值得表称为从表或子表。 例如: emp
表中有 deptno
列,值来自于 `de
pt表的 主键
deptno
dept
是主表, emp
是从表。
外键约束中创建主表
| dept | CREATE TABLE `dept` (
`dept_no` int NOT NULL,
`dept_name` varchar(10) DEFAULT NULL,
PRIMARY KEY (`dept_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
外键约束中创建从表
| emp | CREATE TABLE `emp` (
`id` int NOT NULL,
`name` varchar(20) DEFAULT NULL,
`deptno` int DEFAULT NULL,
KEY `fk_dept_no` (`deptno`),
CONSTRAINT `fk_dept_no` FOREIGN KEY (`deptno`) REFERENCES `dept` (`dept_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
删除外键
ALTER TABLE emp DROP CONSTRAINT fk_dept_no;
添加外键
ALTER TABLE emp add constraint foreign key kf_kf_dept_one (deptno) references dept(dept_no);