MySQL中的约束

目录

非空约束  -- not null

唯一约束 -- unique

主键约束  -- primary key

外键约束  -- foreign key 


概念: 对表中的数据进行限定,保证数据的正确性、有效性和完整性。

分类:主键约束,唯一约束,非空约束,外键约束。

非空约束  -- not null

 1.创建表时添加非空约束

CREATE TABLE person(
   per_id INT NOT NULL,
   per_name VARCHAR(20)
);

 2.删除非空约束

ALTER TABLE person MODIFY per_id INT;

3.创建表之后,添加非空约束

ALTER TABLE person MODIFY per_id INT NOT NULL;

唯一约束 -- unique

 1.创建表是添加唯一约束

-- 唯一约束
CREATE TABLE person(
   id INT UNIQUE NOT NULL,	-- 添加唯一非空约束
   per_name VARCHAR(20)
);

2.删除唯一约束

ALTER TABLE person DROP INDEX id ;

3.创建表之后添加唯一约束

ALTER TABLE person MODIFY id INT UNIQUE;

注意:如果创建表之后,插入了两天或者多条指定字段相同的数据,那么再为此字段重新添加唯一约束时会报错,因为表中已经存在相同的的字段,违背了唯一约束。

主键约束  -- primary key

1. 注意:

  •  含义:非空且唯一
  •  一张表只能有一个字段为主键
  •  主键就是表中记录的唯一标识

2.在创建表的时候,添加主键约束

CREATE TABLE person(
   id INT PRIMARY KEY,
   per_name VARCHAR(20)
);

 3.删除主键约束;创建表之后,添加主键约束

-- 删除主键约束
ALTER TABLE person DROP PRIMARY KEY;
-- 创建表之后,添加主键约束
ALTER TABLE person MODIFY id INT PRIMARY KEY;

4.自动增长    --  如果某一列是数值类型的,使用 auto_increment 可以来完成值得自动增长

-- 设置自增长
CREATE TABLE person(
   id INT PRIMARY KEY AUTO_INCREMENT,
   per_name VARCHAR(20)
);
-- 删除自增长
ALTER TABLE person MODIFY id INT PRIMARY KEY;
-- 创建表之后,设置自增长
ALTER TABLE person MODIFY id INT PRIMARY KEY AUTO_INCREMENT;

外键约束  -- foreign key

外键约束:foreign key,让表于表产生关系,从而保证数据的正确性。

-- 创建部门表(id,dep_name,dep_location)
-- 一方,主表
CREATE TABLE department(
   id INT PRIMARY KEY AUTO_INCREMENT,
   dep_name VARCHAR(20),
   dep_location VARCHAR(20)
);

-- 创建员工表(id,name,age,dep_id)
-- 多方,从表
CREATE TABLE employee(
   id INT PRIMARY KEY AUTO_INCREMENT,
   NAME VARCHAR(20),
   age INT, 	 	
   dep_id INT -- 外键对应主表的主键
)

-- 添加 2 个部门
INSERT INTO department VALUES(NULL, '研发部','广州'),(NULL, '销售部', '深圳');
SELECT * FROM department;

-- 添加员工,dep_id 表示员工所在的部门
INSERT INTO employee (NAME, age, dep_id) VALUES ('张三', 20, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('李四', 21, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('王五', 20, 1);

INSERT INTO employee (NAME, age, dep_id) VALUES ('老王', 20, 2);
INSERT INTO employee (NAME, age, dep_id) VALUES ('大王', 22, 2);
INSERT INTO employee (NAME, age, dep_id) VALUES ('小王', 18, 2);

查询部门表:SELECT    *   FROM  department;
删除研发部门数据,竟然删掉了;查询员工表,发现这时张三,李四,王五还在研发部,这种操作就不符合开发规则。

1.创建表之后添加外键
          ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
         添加外键之后,操作部门表,删除销售部门数据 ,发现删除不了,因为部门表被引用在员工表里,无法删除。
         同时,如果在员工表里插入数据时指定的外键字段名称在主表种不存在,就无法成功添加数据。
         对应的,如果在主表里修改被引用的列里的数据,也是无法操作的。

2.创建表时添加外键

create table 表名(
	....
	外键列
	constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
);

3.删除外键:ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

4.级联操作:主表中修改列里的内容,从表中关联的列内容自动修改。例如上例中,研发部的id字段修改为5,与之相关联的三个                         人的dep_id自动修改为5,不需要手动操作。

  • 添加级联操作

               语法:ALTER TABLE 表名 ADD CONSTRAINT 外键名称 
                     FOREIGN KEY  (外键字段名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE  ; 

-- 级联操作
-- ALTER TABLE 表名 ADD CONSTRAINT 外键名称 
-- FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE  ;

ALTER TABLE employee ADD CONSTRAINT emp_dep FOREIGN KEY (dep_id) REFERENCES department(id) 
ON UPDATE CASCADE ON DELETE CASCADE;
  • 分类

            --   级联更新:ON UPDATE CASCADE 
            --   级联删除:ON DELETE CASCADE  

     
         

           

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值