MySql教程

mysql添加主键、外键、唯一、非空约束

本文主要是介绍mysql添加主键、外键、唯一、非空约束,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1 、约束的作用

对表中的数据进行限制,保证数据的正确性、有效性和完整性。一个表如果添加了约束,不正确的数据将无

法插入到表中。约束在创建表的时候添加比较合适。

2 、约束种类

2.1 主键约束 primary key

2.1.1 主键的作用

  • 非空且唯一
  • 一张表只能有一个字段为主键,(用来唯一标识数据库中的每一条记录)
  • 通常不用业务字段作为主键,单独给每张表设计一个 id 的字段,把 id 作为主键。主键是给数据库和程序使用的,不是给最终的客户使用的。所以主键有没有含义没有关系,只要不重复,非空就行

2.2.2 主键操作

  • 创建表的时候创建主键

create table st5 (

id int primary key, -- id 为主键

name varchar(20),

age int

)

  • 删除主键

alter table st5 drop primary key;

  • 创建表后添加主键

alter table st5 add primary key(id);

2.2.3 主键自增

主键如果让我们自己添加很有可能重复,我们通常希望在每次插入新记录时,数据库自动生成主键字段的值

  • AUTO_INCREMENT 表示自动增长(字段类型必须为整数类型)

create table st5 (

id int primary key auto-increment, -- 给id 创建自动增长

name varchar(20),

age int

)

-- 插入数据 之后查询数据 发现id是自动增长的

insert into st5 (name,age) values ('小乔',18);

insert into st5 (name,age) values ('大乔',20);

  • 修改自增长的默认值起始值

-- 指定起始值为 1000

create table st4 (

id int primary key auto_increment,

name varchar(20)

) auto_increment = 1000;

  • 创建好以后修改起始值

alter table st4 auto_increment = 2000;

  • 创建完表之后删除自动增长

alter table st4 modify id int;

  • 添加自动增长

alter table st4 modify id int auto_increment;


2.2 唯一约束

  • 什么是唯一约束:表中某一列不能出现重复的值

2.2.1 唯一约束语法格式:字段名 字段类型 UNIQUE

-- 创建学生表 st7, 包含字段(id, name),name 这一列设置唯一约束,不能出现同名的学生

create table st7 (

id int,

name varchar(20) unique

)

  • 注意:唯一约束可以有null值,但是只能有唯一一条记录为null

  • 删除唯一约束:alter table st7 drop index name;

  • 在表创建完之后创建唯一约束:alter table st7 modify name varchar(20) unique;


2.3 非空约束

  • 什么是非空约束:某一列不能为 null。

-- 创建表学生表 st8, 包含字段(id,name,gender)其中 name 不能为 NULL

create table st8 (

id int,

name varchar(20) not null,

gender char(1)

)

-- 删除st8 name的非空约束:alter table st8 modify name varchar(20);

  • 默认值:字段名 字段类型 DEFAULT 默认值

-- 创建一个学生表 st9,包含字段(id,name,address), 地址默认值是广州

create table st9 (

id int,

name varchar(20),

address varchar(20) default '广州'

)

-- 添加一条记录,使用默认地址

insert into st9 values (1, '李四', default);

-- 添加一条记录,不使用默认地址

insert into st9 values (3, '李四光', '深圳');

疑问:如果一个字段设置了非空与唯一约束,该字段与主键的区别?

  1. 主键数在一个表中,只能有一个。不能出现多个主键。主键可以单列,也可以是多列。

  2. 自增长只能用在主键上


2.4 外键约束

什么是外键约束:

1)什么是外键:在从表中与主表主键对应的那一列,如:员工表中的 dep_id

2)主表: 一方,用来约束别人的表,从表: 多方,被别人约束的表

创建/删除 约束的语法

1)新建表时增加外键:

[CONSTRAINT] [外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名****)

create table employee(

id int primary key auto_increment,

name varchar(20),

age int,

dep_id int, -- 外键对应主表的主键

-- 创建外键约束

constraint emp_depid_fk foreign key (dep_id) references department(id)

)

2)已有表增加外键:

ALTER TABLE 从表 ADD [CONSTRAINT] [外键约束名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主表字段名);

3)删除外键的语法:

ALTER TABLE 从表drop foreign key 外键名称;

-- 删除 employee 表的 emp_depid_fk 外键

alter table employee drop foreign key emp_depid_fk;

什么是级联操作:

在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作

ON UPDATE CASCADE:级联更新,只能是创建表的时候创建级联关系。更新主表中的主键,从表中的外键

列也自动同步更新

ON DELETE CASCADE :级联删除

这篇关于mysql添加主键、外键、唯一、非空约束的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!