zoukankan      html  css  js  c++  java
  • 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;
    

    总结

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

  • 相关阅读:
    475. Heaters
    69. Sqrt(x)
    83. Remove Duplicates from Sorted List Java solutions
    206. Reverse Linked List java solutions
    100. Same Tree Java Solutions
    1. Two Sum Java Solutions
    9. Palindrome Number Java Solutions
    112. Path Sum Java Solutin
    190. Reverse Bits Java Solutin
    202. Happy Number Java Solutin
  • 原文地址:https://www.cnblogs.com/liuyang0/p/6534515.html
Copyright © 2011-2022 走看看