MySQL数据库学习笔记(六)—— SQL(约束)

概述
  • 约束:对数据表中的数据进行限定,保证数据的完整性,有效性、正确性
  • 分类:
    • 主键约束:primary key
    • 非空约束:not null
    • 唯一约束:unique
    • 外键约束:foreign key
非空约束
  • 创建表时添加约束

    // 创建stu表时,给name限定非空约束
    CREATE TABLE stu(
    	id INT,
    	NAME VARCHAR(20) NOT NULL -- name为非空
    );
    // 删除stu表中的name的非空约束
    ALTER TABLE stu MODIFY NAME VARCHAR(20);
    
  • 创建表完后添加

    	// 创建stu表时,给name限定非空约束
    	CREATE TABLE stu(
    		id INT,
    		NAME VARCHAR(20)
    	);
    	// 创建stu表完后,给name添加非空约束
    	ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;
    
唯一约束
  • 创建表时添加唯一约束

    // 创建stu表时添加唯一约束,MySQL中唯一约束限定的值可以有多个null
    CREATE TABLE stu(
    	id INT,
    	phone_number VARCHAR(11) UNIQUE
    );
    // 删除stu表中phone_number的唯一约束
    ALTER TABLE stu DROP INDEX phone_number;
    
  • 创建表之后添加唯一约束

    // 给stu表中phone_number添加唯一约束
    ALTER TABLE stu MODIFY phone_number VARCHAR(11) UNIQUE;
    
主键约束
  • 注意事项

    • 含义:表示非空并且唯一
    • 一张表只能有一个字段为主键
    • 主键就是表中记录的唯一表示
  • 创建表时添加唯一约束

    // 创建stu表时给id添加主键约束
    CREATE TABLE stu(
    	id INT PRIMARY KEY,
    	NAME VARCHAR(20)
    	);
    // 删除stu表中id的主键约束
    ALTER TABLE stu DROP PRIMARY KEY;
    
  • 创建表之后添加唯一约束

    // 表stu创建完成后给id添加主键约束
    ALTER TABLE stu MODIFY id INT PRIMARY KEY;
    
  • 自动增长

    • 如果某一列数据是数据类型的,使用 可以完成值的自动增长
    // 创建stu表时给id添加主键约束,并且完成自动增长
    CREATE TABLE stu(
    	id INT PRIMARY KEY AUTO_INCREMENT,
    	NAME VARCHAR(20)
    );
    INSERT INTO stu VALUES(NULL,"cc"); // 根据上一条记录的id值增长
    // 删除stu表中id的自动增长
    ALTER TABLE stu MODIFY id INT;
    // 给stu表中id的添加自动增长
    ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;
    
外键约束
  • 外键约束让表之间关联起来,从而保证数据的正确性

  • 创建表时可以添加外键约束

    语法:
    	CREATE TABLE 表名(
    	...
    	外键列
    	CONSTRAINT 外键名称 FOREIGN KEY (外键列名称) REFERENCES 主表的名称(主表列名称)
    	);
    
    // 创建department表
    CREATE TABLE department( 
    	id INT PRIMARY KEY AUTO_INCREMENT,
    	dep_name VARCHAR(30),
    	dep_location VARCHAR(30)
    );
    INSERT INTO department VALUES(NULL,"研发部","广州"),(NULL,"销售部","深圳");
    // 创建employee表,并将dep_id与表department的id关联,
    CREATE TABLE employee(
    	id INT PRIMARY KEY AUTO_INCREMENT,
    	NAME VARCHAR(20),
    	dep_id INT, -- 外键对应的主键
    	CONSTRAINT emp_dept_fk FOREIGN KEY (dep_id) REFERENCES department(id)
    );
    INSERT INTO employee VALUES(NULL,"a",1),(NULL,"b",2),(NULL,"c",1),(NULL,"d",2),(NULL,"e",1),(NULL,"f",2);
    
  • 删除外键

    // 删除表employee中的外键emp_dept_fk
    ALTER TABLE employee DROP FOREIGN KEY emp_dept_fk;
    
  • 在创建表之后添加外键

    //给表employee添加外键emp_dept_fk,将该表中dep_id和表department中的id关联起来
    ALTER TABLE employee ADD CONSTRAINT emp_dept FOREIGN KEY (dep_id) REFERENCES department(id);
    
  • 级联操作

    • 需要在添加外键的时候设置级联更新(ON UPDATE CASCADE)
    // 给表employee添加外键emp_dept_fk,将该表中dep_id和表department中的id关联起来
    // 并且设置了级联更新,更改表department中的id,表employee中的dep_id会自动更新
    ALTER TABLE employee ADD CONSTRAINT emp_dept FOREIGN KEY (dep_id) REFERENCES department(id) ON UPDATE CASCADE;
    
    • 通过架构设计器可以很好地看出表之间级联关系
      在这里插入图片描述
    • 级联删除(ON DELETE CASCADE),谨慎使用
    // 给表employee添加外键emp_dept_fk,将该表中dep_id和表department中的id关联起来
    // 并且设置了级联更新,更改表department中的id,表employee中的dep_id会自动更新
    // 并且设置了级联删除,删除表department中的id,表employee中的dep_id相对应的行会自动删除
    ALTER TABLE employee ADD CONSTRAINT emp_dept FOREIGN KEY (dep_id) REFERENCES 
    department(id) ON UPDATE CASCADE ON DELETE CASCADE;
    
发布了113 篇原创文章 · 获赞 1 · 访问量 938

猜你喜欢

转载自blog.csdn.net/weixin_44876003/article/details/103409190