zoukankan      html  css  js  c++  java
  • 数据库表的约束

    一、数据库约束的概述

      1、约束的作用

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

        一个表如果添加了约束,不正确的数据将无法插入到表中。约束在创建表的时候添加比较合适。

      2、约束的种类

    约束名 约束关键字
    主键约束 primary key
    唯一约束 unique
    非空约束 not null
    外键约束 foreign key
    检查约束 check 注:MySQL不支持

    二、主键约束

      1、主键的作用

        主键的作用:用来唯一标识数据库中的每一条记录。

      2、哪些字段应该作为表的主键

        通常不用业务字段作为主键,单独给每张表设计一个 id 的字段,把 id 作为主键。

        主键就是给数据库和程序使用的,不是给最终的客户使用的,所以主键有没有含义没有关系,只有不重复,非空就行。

      3、创建主键

      •    主键关键字:primary key
      •    主键的特点: ① 非空 not  null; ② 唯一
      •    基本语法     

          在创建表时,添加主键约束

    create table student(
    	id int primary key,-- 给id添加主键约束
    	name varchar(20)
    );

          ② 删除主键

    ALTER TABLE student DROP PRIMARY KEY;

         

          ③ 创建完表后添加主键(两种方式)

    ALTER TABLE student MODIFY id int PRIMARY KEY;   
    ALTER TABLE student add primary key(字段名);

        注意

          ① 主键非空且唯一

          ② 一张表只能有一个字段(组)作为主键

          ③ 主键就是表中记录的唯一标识

      4、主键自增

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

        基本语法格式:

        ① 创建表时,添加主键约束,并且完成主键自增长(字段类型必须是整数类型)

    create table student(
    	id int primary key auto_increment,-- 给id添加主键约束
    	name varchar(20)
    );

        ② 删除自动增长

    ALTER TABLE stu MODIFY id INT;

        ③ 创建表完后,添加自动增长

    ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;

      5、修改自增长的默认值起始值

        默认 auto_increment 的开始值是 1,如果希望修改起始值,使用下面语法。

        ① 创建时指定起始值

    CREATE TABLE 表名(
        列名 int primary key AUTO_INCREMENT
    ) AUTO_INCREMENT=起始值;
    

        ② 创建好以后修改起始值

    ALTER TABLE 表名 AUTO_INCREMENT=起始值;

      6、delete 和 truncate 对自增长的影响

      •   delete:删除所有记录之后,自增长没有影响。
      •   truncate:删除以后,自增长又重新开始。

    三、唯一约束

      1、概念

        唯一约束概念:表中的某一列不能出现重复的值,必须保证值的唯一性。

      2、基本语法格式

        ① 创建表时,添加唯一约束

    CREATE TABLE student(
    	id INT,
    	phone_number VARCHAR(20) UNIQUE -- 添加了唯一约束
    );
    

                  注意:在MySQL中,唯一约束限定的列的值可以有多个 null。(null表示不确定,即不相等)

        ② 删除唯一约束

    ALTER TABLE student DROP INDEX phone_number;

        ③ 在创建表后,添加唯一约束

    ALTER TABLE student MODIFY phone_number VARCHAR(20) UNIQUE;
    

    四、非空约束

      1、非空约束概念

        非空约束:即数据表的某一列不能为 null。

      2、基本语法格式

        ① 创建表时添加约束

    CREATE TABLE student(
    	id INT,
    	NAME VARCHAR(20) NOT NULL -- name为非空
    );

        ② 创建表完后,添加非空约束

    ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;

        ③ 删除 某个字段的非空约束

    ALTER TABLE stu MODIFY NAME VARCHAR(20);
    

      3、为某字段设置默认值

        语法格式

    字段名 字段类型 DEFAULT 默认值
    

              Demo:

     1 create table student(
     2     id int,
     3     name varchar(20),
     4     sex varchar(2) default '男'
     5 )
     6 
     7 -- 添加一条记录,使用默认值
     8 insert into student values(6,'赵六',default)
     9 -- 添加一条记录,不适用默认值
    10 insert into student values(8,'钱九','男')

       扩展:如果一个字段设置了非空和为约束,该字段与主键有什么区别?

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

         (2)自增长只能用在主键上。

    五、外键约束

      1、单表存储数据的缺点

        单表存储数据可能会造成的缺点:

          ① 数据冗余

          ② 后期还会出现增删改的问题

        解决方式:使用外键约束

      2、外键约束

        外键约束概念:foreign key,让从表中与主表主键对应的那一列,从而保证数据的正确性。

        主表:一方,用来约束别人的表。

        从表:多方,被别人约束的表。

        示意图

        

      3、创建约束的语法

        ① 创建表时增加外键

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

        ② 删除外键

    ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

        ③ 创建表之后添加外键

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

      4、外键的级联操作

        当改变主表中的主键时,修改失败;在删除主表中的记录时,也出现删除失败。

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

        级联操作语法:

    ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
    on update cascade; 表示级联更新操作
    on delete cascade; 表示级联删除操作

    六、数据约束总结

    约束名 关键字 说明
    主键 primary key

    ① 唯一

    ② 非空

    默认 default 如果一列没有值,使用默认值
    非空 not null 这一列必须有值
    唯一 unique 这一列不能有重复值
    外键 foreign key 主表中主键列,在从表中外键列
  • 相关阅读:
    Zabbix5 Frame 嵌套
    Zabbix5 对接 SAML 协议 SSO
    CentOS7 安装 Nexus
    CentOS7 安装 SonarQube
    GitLab 后台修改用户密码
    GitLab 查看版本号
    GitLab Admin Area 500 Error
    Linux 安装 PostgreSQL
    Liger ui grid 参数
    vue.js 是一个怪东西
  • 原文地址:https://www.cnblogs.com/niujifei/p/11584973.html
Copyright © 2011-2022 走看看