1.如何查看约束
SHOW CREATE TABLE table_name
下面是添加了主键的展示
一、主键约束
- 主键约束最显著的特征是主键列中的值是不允许重复(唯一)的,通过主键约束可强制表 的实体完整性。
- 当创建或更改表时可通过定义 primary key约束来创建主键。一个表只 能有一个primary key约束,且primary key约束中的列不能接受NULL值。
alter table tab_name add constraint pk_name primary key (deptno);
1.如何设置主键
1.创建表时设置主键
CREATE TABLE `表名`( `id` int [NOT null] PRIMARY KEY, --设置主键 `name` varchar(20) );
CREATE TABLE `table_name` ( `id` int [NOT NULL], `name` varchar(20) , PRIMARY KEY (`id`) -- 设置主键 );
CREATE TABLE `table_name` ( `id` int [NOT NULL], `name` varchar(20) , constraint pk primary key(id) -- 设置主键 );
2.通过ALTER TABLE
修改列属性设置主键
ALTER TABLE emp MODIFY empno INT PRIMARY KEY; -- 修改列的属性来添加主键约束
成功添加主键约束
ALTER TABLE dept ADD CONSTRAINT pk_name PRIMARY KEY(deptno);
3.删除主键约束
-- 删除主键 ALTER TABLE 表名 DROP PRIMARY KEY; -- 主键是唯一的,可以这样删除
二、自增长列(标识列)
并不是所有表在设计完成后都能找到适合作为主键的列,为此数据库提供了自增长列,自 增长列是数值类型( INT , FLOAT , DOUBLE 等)的,其值是由数据库自动维护的,是永远都不 会重复的,因此自增长是最适合作为主键列的。在创建表时,通过 auto_increment 关键 字来标识自增长列,在MySQL数据库中自增长列可以是主键列,也可以是唯一列(有唯一 约束的列)。
特点:
- 标识列必须和一个key搭配(key指主键、唯一、外键)
- 一个表最多有一个标识列
- 标识列的类型只能是数值型
- 标识列可以通过 SET auto_increment_increment = 3;
SET @@auto_increment_increme nt = 3; 设置步长(全局),可以通过插入行时手动插入标识列值设置起始值。
(思 考:什么情况下此设置会失效)
如果设置步长会从 1 + 步长 依次递增。
** 如果表中已有数据,会按照 1 + 步长进行计算,如果这个 值 已有则再加直到没有**
自增长与主键
1.创建
CREATE TABLE 表名( id INT PRIMARY KEY AUTO_INCREMENT, name varchar(20), age INT );
2.设置初始值
-- 创建设置 CREATE TABLE temp( id INT PRIMARY KEY AUTO_INCREMENT, age INT )AUTO_INCREMENT=10; -- 添加 ALTER TABLE emp AUTO_INCREMENT; alter table 表名称 modify column id int auto_increment;
3.删除自增长列
ALTER TABLE 表名 MODIFY COLUMN id INT;
三、唯一约束
当非主键列要求唯一性时,就需要唯一性约束。
1.创建唯一约束
-- 创建表时 (第一种不建议) CREATE TABLE `table_name` ( `id` int NOT NULL, `name` varchar(20) UNIQUE, # 唯一约束 ); CREATE TABLE `table_name` ( `id` int NOT NULL, `name` varchar(20), constraint uq_name unique(name), #唯一约束 );
2.修改唯一约束
alter table 表名称 ADD unique(列名称); ALTER TABLE dept ADD CONSTRAINT uq_name UNIQUE(deptname);
3.删除唯一约束
-- 删除唯一约束 ALTER TABLE tb_name DROP CONSTRAINT constraint_name; [alter table 表名称 drop index 设置唯一时的名称;] -- 删索引
- 唯一约束值不能重复
- 可以存在多个空值(NULL) 的数据
- 一张可以有多个唯一约束列
- 约束默认的名称是其列名
- 唯一约束创建后会自动创建一个唯一索引
四、默认约束
为列中的值设置默认值,default ....,如果已经定了值,默认值就无效了
1.创建默认约束
-- 创建表时 CREATE TABLE `table_name` ( `id` int DEFAULT NULL,# 默认约束 `name` varchar(20), );
在创建时默认约束一般跟在列后面直接设置
2.修改默认约束
alter table 表名称 modify column 列名 列类型 default 默认值;
如图所示我们给id添加了默认约束让他的默认值为10
3.删除默认约束
alter table 表名称 modify column 列名 列类型; -- 将默认值改为 NULL ALTER TABLE tb_name ALTER col_name DROP DEFAULT; -- 删除了默认值,新增时必须有值
五、非空约束
NOT NULL :非空,用于保证该字段的值不能为空。
非空约束一般也跟在后面写
1.创建非空约束
-- 创建表时 CREATE TABLE `table_name` ( `id` int NOT NULL, # 非空约束 `name` varchar(20), );
2.修改非空约束
alter table 表名称 modify column 列名 列类型 not null;
注意修改时,要看表内数据是否满足非空约束,不满足时会报错
3.删除非空约束
-- 删除 alter table 表名称 modify column 列名 列类型 [null];
非空约束的效果
六、外键约束
A表中列的值来自于另外一张表B的主键或唯一键的列称为 外键FK,将被引用值得表称为 主表或父表,将引用值得表称为从表或子表。 例如: emp 表中有 deptno 列,值来自于 de pt 表的 主键 deptno 。 dept 是主表, emp 是从表。
1.创建外键约束
-- 创建表时 CREATE TABLE `dept`( dept_no INT PRIMARY KEY, dept_name VARCHAR(20), ) CREATE TABLE `emp` ( `id` int NOT NULL, `name` varchar(20), `deptno` int, CONSTRAINT fk_dept_no FOREIGN KEY(deptno) REFERENCES dept(dept_no) );
2.修改外键约束
alter table userinfo add constraint foreign key fk_dept_no (dept_no) REFERENCES dept(deptno);
3.删除外键约束
-- 删除 ALTER TABLE tb_name DROP CONSTRAINT constraint_name; alter table 表名称 drop foreign key 设置外键时的名称;