• MySQL中的完整性约束条件(主键、外键、唯一、非空)


    数据库的完整性约束用来防止对数据的意外破坏,来保证数据的安全性和一致性。

    主键

    1.创建表时候指定主键

    创建表user(id, username, age),并且id字段非空自增。

    CREATE TABLE user(
    id BIGINT(20) NOT NULL AUTO_INCREMENT
    ,username VARCHAR(16) NOT NULL
    ,age TINYINT
    ,PRIMARY KEY(id)
    );
    

    给数据库插入3条字段。

    2.修改表中字段为主键
    创建表user1(id, username),不设置主键,通过修改设置主键。

    CREATE TABLE user1(
    id BIGINT(20)
    ,username VARCHAR(16) NOT NULL
    );
    
    ALTER TABLE user1
    ADD PRIMARY KEY(id)
    ,MODIFY id BIGINT(20) AUTO_INCREMENT;
    

    通过SHOW INDEX FROM user1查看表user1的主键,可以看到有一个名字为PRIMARY的主键索引。

    3.删除主键
    删除表user1中的主键,如果主键为自增,那么还需要将自增去掉。

    ALTER TABLE user1
    DROP PRIMARY KEY
    ,MODIFY id BIGINT(20);
    

    外键

    外键用来指定参照完整性约束,被指定为外键的列必需要有索引,外键参考列必需为另一个表的主键。

    1.创建表的时候指定外键
    创建表article(id, u_id, article_name),u_id为该表的外键,引用user表中的id。

    CREATE TABLE article(
    id BIGINT(20) NOT NULL AUTO_INCREMENT
    ,u_id BIGINT(20) NOT NULL
    ,article_name VARCHAR(16) NOT NULL
    ,PRIMARY KEY(id)
    ,CONSTRAINT fk_user_article_uid FOREIGN KEY (u_id) REFERENCES user(id)
    );
    

    通过SHOW INDEX FROM article查看索引,可以看到该表中有两个索引。

    2.修改表时添加外键约束
    修改的时候表中如果有记录就会出错。

    ALTER TABLE article
    ADD CONSTRAINT fk_user_article_uid FOREIGN KEY(u_id) REFERENCES user(id);
    

    添加了外键之后,再插入不存在user的id值的u_id字段就会出错。

    3.删除外键

    ALTER TABLE article
    DROP FOREIGN KEY fk_user_article_uid;
    

    通过SHOW INDEX FROM article可以看到,虽然外键被删除,但是之前设置为外键的列依然有索引。

    这时再进行插入操作,插入在user表中不存在的u_id值,这时可以成功地进行插入。

    INSERT INTO article(u_id, article_name)
    VALUES (4, 'article4');
    

    唯一

    1.创建表的时候创建唯一约束条件
    第一种方法,这种方法不能指定唯一索引的名字。

    CREATE TABLE test1(
    id BIGINT(20) NOT NULL AUTO_INCREMENT
    ,test1 INT UNIQUE KEY
    ,PRIMARY KEY(id)
    );
    

    查看索引,可以看到唯一索引的名字与字段名相同。

    如果插入相同的test1,就会报错。

    第二种方法,可以制定唯一索引的名字

    CREATE TABLE test1(
    id BIGINT(20) NOT NULL AUTO_INCREMENT
    ,test INT
    ,PRIMARY KEY(id)
    ,UNIQUE KEY uk_test(test)
    );
    

    通过查看索引可以看到,非空索引的名称是设定的名称。

    2.修改表时添加

    ALTER TABLE test1
    ADD UNIQUE uk_test(test);
    

    3.删除

    ALTER TABLE test1
    DROP INDEX uk_test;
    

    非空

    1.创建表的时候指定

    CREATE TABLE test(
    id BIGINT(20) NOT NULL AUTO_INCREMENT
    ,test1 INT NOT NULL
    ,PRIMARY KEY(id)
    );
    

    2.修改删除
    删除非空

    ALTER TABLE test
    MODIFY test1 INT;
    

    添加非空

    ALTER TABLE test
    MODIFY test1 INT NOT NULL;
    

    总结

    上述的四种约束性添加中,主键、外键、唯一在创建时就直接建立了该列的索引,非空是与索引无关的,不过非空字段也是可以建立索引的。

  • 相关阅读:
    四、K8S
    三、kubernetes环境搭建(实践)
    二、K8S镜像问题
    一、linux扩展
    十、docker扩展
    二、kubernetes环境搭建
    一、Composer
    一、权限控制-过滤器
    二、kubernetes
    【2019-06-28】客观认知
  • 原文地址:https://www.cnblogs.com/liuyang0/p/6534515.html
Copyright © 2020-2023  润新知