小工具知识网

当前位置: 首页 > 行业知识 > mysql数据库(下)

行业知识

mysql数据库(下)

2026-11-12 15:13:52 来源:互联网转载

���录

约束

约束的概念和分类

1、约束的概念:

2、约束的分类

1、主键约束

2、默认约束

 3、非空约束

4、唯一约束

5、外键约束


约束

约束的概念和分类

1、约束的概念:

  • 约束时作用于表中列上的规则,用于限制加入表的数据
  • 约束的存在保证了数据库中数据的正确性、有效性和完整性

    2、约束的分类

     练习:

    CREATE TABLE emp(

        id INT PRIMARY KEY,

        ename VARCHAR(50) NOT NULL UNIQUE,

        joindate DATE NOT NULL,

        salary DOUBLE(7,2) NOT NULL,

        bonus DOUBLE(7,2) DEFAULT 0

    );

    insert into emp(id,ename,joindate,salary,bonus) VALUES(1,'张三','1999-11-11',8800,5000);

    --------------------------------------------------------------------------------------------------- 

    1、测试主键约束  非空且唯一(将id的1改为了null)

    又运行了一遍已有的,显示[Err] 1062 - Duplicate entry '1' for key 'PRIMARY'

    --------------------------------------------------------------------------------------------------------------

    2、测试非空约束 不能为null

    测试主键的时候已经测试了不能为空,这里就不演示啦

    --------------------------------------------------------------------------------------------------------------

    3、测试唯一约束 表中所有数据各不相同

    这里也是,主键的时候测试了以下,也就不演示啦

    --------------------------------------------------------------------------------------------------------------

    4、测试默认约束 未指定值则采用默认值

    这里我把bonus和5000 去掉了,我们看看结果是什么

    取值为默认值0

    只有不添加任何值的时候默认约束才能生效,输入null的话,显示的就是null。我们来看一下

    显示的就是null,而不是0;

    --------------------------------------------------------------------------------------------------------------

    5、测试自动增长:auto_increment 当列是数字类型并且唯一约束

    这里我们得重新建表

    drop table if EXISTS emp;

    CREATE TABLE emp(

        id INT PRIMARY KEY auto_increment,

        ename VARCHAR(50) NOT NULL UNIQUE,

        joindate DATE NOT NULL,

        salary DOUBLE(7,2) NOT NULL,

        bonus DOUBLE(7,2) DEFAULT 0

    );

    没加数据的就把前面的id删了

    我们看一下结果如何

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·

    在建完表后如果要添加约束的话,我们该如何取写代码

    1、主键约束

    alter table 表名 add primary key(字段名);

    删除约束:

    alter table 表名 drop index 字段名; 

    2、默认约束

    alter table 表名 alter 列名  set  default 默认值;

     删除约束

    alter table 表名 alter 列名 drop default; 

     3、非空约束

    alter table 表名 modify 字段名 数据类型 not null;

    删除约束:

    alter table 表名 modify 字段名 数据类型; 

    4、唯一约束

    alter table 表名 modify 字段名 数据类型 unique; 

    删除约束

    alter table 表名 drop index 字段名; 

    5、外键约束

    外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性

    添加约束

    创建时添加外键约束

    create table 表名(

            列名 数据类型,

            .....

            [constraint][外键名称] foreign key (外键字段名) references 主表名称(主表列名称)

    );

    建完表后添加外键约束

    alter table 表名 add constraint 外键名称 foreign key  (外键字段名) references 主表名称(主表列名称)

    删除约束:

    alter table 表名 drop foreign key 外键名称; 

    添加外键dep_id,关联dept表的主键

    代码在这哦

    CREATE table dept(

    id int PRIMARY key auto_increment,

    dep_name varchar(20),

    addr varchar(20)

    );

    create table emp(

    id int PRIMARY key auto_increment,

    name varchar(20),

    age int,

    dep_id int,

    CONSTRAINT fk_emp_dept FOREIGN key(dep_id) REFERENCES dept(id)

    );

     insert into dept(dep_name,addr) VALUES('研发部','广州'),('销售部','深圳');

    insert into emp(name,age,dep_id) VALUES('张三',20,1),('李四',20,1),('王五',20,1),('赵六',20,2),('孙七',22,2),('周八',18,2);

    这样就不能删除dept表中的数据了

    会显示有外键的约束

    但如果我想要删除研发部,那就得先删除张三李四王五三条数据

    这样就可以删除研发部了

    ----------------------------------------------------------------

    在对象中按住ctrl选中这两张表

    再点击逆向表到模型 

    就能看到这俩张是有个外键约束着的

     

    删除外键:

    alter table emp drop FOREIGN key fk_emp_dept;

     

    这样两张表中的线就没了

     

    创建过表之后添加外键:

    alter table emp add CONSTRAINT fk_emp_dept FOREIGN key(dep_id) REFERENCES dept(id);

     

    未完待续。。。

上一篇:服务器出现拥堵怎么解决?

下一篇:应用宝下载教程