zoukankan      html  css  js  c++  java
  • MySQL数据库操作(4)表约束

    MySQL数据库操作(4)表约束

    在创建表或者插入列时,可以对列的值进行约束,当插入条目时如果不符合约束,将会报错,拒绝插入。

    非空约束
    `NOT NULL` 字段值不能为空
    例:

    #创建表时添加非空约束
    CREATE TABLE tb1( id INT, name VARCHAR(20) NOT NULL );
    INSERT INTO tb1(id) VALUE(1); # 报错,没有传入name
    #注意:在mysql 里面,'' 不等于null
    #修改表添加非空约束
    ALTER TABLE tb1 MODIFY id INT NOT NULL;
    #取消非空约束
    ALTER TABLE tb1 MODIFY id INT;

    唯一约束
    `UNIQUE KEY` 确保字段中的值的唯一
    例:

    #创建表时添加唯一约束
    CREATE TABLE tb2(id INT NOT NULL UNIQUE KEY, name VARCHAR(20) NOT NULL);
    INSERT INTO tb2 VALUE(1,'张三');
    INSERT INTO tb2 VALUE(1,'李四'); # 报错,id字段的值有重复
    #修改表添加唯一约束
    ALTER TABLE `tb2` ADD UNIQUE KEY(`name`);
    #删除唯一约束
    ALTER TABLE tb2 DROP KEY name;
    #联合唯一约束
    ALTER TABLE tb2 ADD aa INT, add bb INT;
    ALTER TABLE tb2 ADD UNIQUE KEY (aa,bb);
    INSERT INTO tb2 VALUE(4,'佳能',1,2);
    INSERT INTO tb2 VALUE(5,'哈哈',1,2); # 报错,(aa,bb)联合字段有重复
    #删除联合唯一
    SHOW CREATE TABLE tb2; #查看约束名
    ALTER TABLE tb2 DROP KEY aa; #通过约束名删除约束,联合约束默认名为联合列中的第一列

    主键约束
    `PRIMARY KEY ` == `NOT NULL + UNIQUE KEY`
    主键保证记录的唯一性, 唯一标识每一条数据
    主键自动为`NOT NULL`
    每张数据表只能存在一个主键
    当一张表里没有一个主键的时候,第一个出现的非空且为唯一的列被视为有主键。
    例:

    #创建表时添加主键约束
    CREATE TABLE tb3( id INT PRIMARY KEY,name VARCHAR(20) NOT NULL);
    #删除主键约束
    ALTER TABLE tb3 DROP PRIMARY KEY;
    #添加主键约束
    ALTER TABLE tb3 ADD PRIMARY KEY(id);
    #联合主键
    CREATE TABLE tb4(id_a INT , id_b INT, content VARCHAR(20), PRIMARY KEY(id_a,id_b) );
    #添加联合主键
    ALTER TABLE tb4 ADD PRIMARY KEY(id_a,id_b);

    自增长
    `AUTO_INCREMENT `自动编号,一般与主键组合使用。一个表里面只有一个自增
    默认情况下,起始值为1,每次的增量为1。
    当插入记录时,如果为`AUTO_INCREMENT`数据列明确指定了一个数值,则会出现两种情况,
    情况一,如果插入的值与已有的编号重复,则会出现出错信息,因为AUTO_INCREMENT数据列的值必须是唯一的;
    情况二,如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值开始递增。也就是说,可以跳过一些编号。如果自增序列的最大值被删除了,则在插入新记录时,该值被重用。(可以调大,不可以缩小)
    例:

    #创建表时添加自增长
    CREATE TABLE tb5( id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20))AUTO_INCREMENT =100; # 如果不写,默认从1开始
    #删除自动增长
    ALTER TABLE tb5 MODIFY id INT;
    #修改表添加自动增长
    ALTER TABLE tb5 MODIFY id INT AUTO_INCREMENT;

    默认约束
    `DEFAULT `初始值设置,插入记录时,如果没有明确为字段赋值,则自动赋予默认值。
    例:

    #创建表时添加默认约束
    CREATE TABLE tb6(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20) NOT NULL,age INT NOT NULL DEFAULT 18);
    #删除默认约束
    ALTER TABLE tb6 MODIFY age INT NOT NULL;
    ALTER TABLE tb6 ALTER age DROP DEFAULT;
    #添加默认约束
    ALTER TABLE tb6 MODIFY age INT DEFAULT 20;
    ALTER TABLE tb6 ALTER age SET DEFAULT 21;

    外键约束
    外键约束`FOREIGN KEY`,保持数据一致性,完整性实现一对一或一对多关系。
    外键约束的要求:
    数据表的存储引擎只能为InnoDB
    外键列和参照列数据类型一致
    外键必须关联到键上面去,一般情况是关联到,另一张表的主键
    例:

    #创建表时添加外键约束
    CREATE TABLE `a`( a_id INT PRIMARY KEY,a_name VARCHAR(20) NOT NULL);
    CREATE TABLE `b`(b_id INT PRIMARY KEY,b_name VARCHAR(20) NOT NULL,fy_id INT NOT NULL,CONSTRAINT AB_id FOREIGN KEY(fy_id) REFERENCES `a`(a_id)); #AB_id是外键的别名,如果没有别名则无法删除该外键,fy_id是本表中要关联的列,`a`(a_id)是关联到a表的a_id列,fy_id的取值必须在a表中的a_id列中出现过才能用。
    #删除外键
    ALTER TABLE `b` DROP FOREIGN KEY AB_id;
    #增加外键
    ALTER TABLE `b` add CONSTRAINT AB_id FOREIGN KEY(fy_id) REFERENCES `a`(a_id);
  • 相关阅读:
    Charles 注册码
    pom.xml
    SpringMVC 表格跳转后显示${message}中的内容显示不出来
    使用IDEA 开发Spring,Maven-->并且部署到 tomcat
    Leetcode51 N后
    n queen
    八皇后问题
    Access提示“操作必须使用一个可更新的查询”的解决办法
    Win7系统卸载McAfee杀毒软件
    Win7(x64)升级到Win10
  • 原文地址:https://www.cnblogs.com/ikamu/p/8338298.html
Copyright © 2011-2022 走看看