【MySql】建表约束

SQL约束

  1. 约束的作用:
    对表中的数据进行进一步的限制,从而保证数据的正确性、有效性、完整性.
    违反约束的不正确数据,将无法插入到表中
  2. 常见的约束
    约束名 约束关键字
    主键 primary key
    唯一 unique
    非空 not null
    外键 foreign key
CREATE TABLE 表名(
	--            ↓主键约束↓		↓自动增长↓			↓注释↓
	主键 字段类型 [primary key] [AUTO_INCREMENT] [comment '注释'],
	非空	字段类型	[not null] [default 默认值] [comment '注释'], -- 非空约束、默认值、注释
	唯一 字段类型	[unique] [default 默认值] [comment '注释'],	-- 唯一约束、默认值、注释
	[CONSTRAINT] [外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名),-- 外键约束
	[ON DELETE CASCADE]		-- 级联删除操作(不推荐使用):删除主表内容,从表也跟着删除
	-- 注意 最后一列不要加逗号
)AUTO_INCREMENT = 100; 		-- 设置自增的初始值

一、主键约束(唯一、非空、[自增])

特点 不可重复 唯一 非空
作用 用来表示数据库中的每一条记录
  1. 创建主键约束

    -- 方式1 直接在末尾设定主键 (最常用)
    CREATE TABLE 表名(
    	-- 添加主键 (主键是唯一性索引,不能为null,不能重复,)
    	字段名 类型 primary key,
    );
    
    -- 方式2 结束前设置主键(括号写主键字段名)
    CREATE TABLE 表名(
    	主键字段名 	字段类型,
    	字段名		字段类型
    	primary key(主键字段名)
    );
    
    -- 方式3 创建的时候不指定主键,然后通过 DDL语句进行设置
    ALTER TABLE 表名 ADD PRIMARY KEY(主键字段名);
    

    哪些字段可以作为主键 ?

    • 通常针对业务去设计主键,每张表都设计一个主键id
    • 主键是给数据库和程序使用的,跟最终的客户无关,所以主键没有意义没有关系,只要能够保证不重复就好
    • 比如:身份证就可以作为主键.
  2. 删除主键约束

    -- 使用DDL语句 删除表中的主键
    ALTER TABLE emp2 DROP PRIMARY KEY;
    
  3. 主键的自增

    注意: 主键如果让我们自己添加很有可能重复,我们通常希望在每次插入新记录时,数据库自动生成主键字段的值.

    -- 关键字:
    -- AUTO_INCREMENT 表示自动增长(字段类型必须是整数类型)
    -- 创建主键自增的表
    CREATE TABLE 表名(
    	主键 字段类型 primary key AUTO_INCREMENT ,
    	字段名 字段类型 [约束] --注意 最后一列不要加逗号
    );
    
  4. 修改主键自增的起始值

    -- 修改主键自增的起始值
    -- 默认地 AUTO_INCREMENT 的开始值是 1,如果希望修改起始值,请使用下面的方式
    CREATE TABLE 表名(
    	主键 字段类型 primary key AUTO_INCREMENT ,
    	字段名 字段类型 [约束] --注意 最后一列不要加逗号
    )AUTO_INCREMENT = 100;
    
  5. DELETETRUNCATE对自增长的影响
    删除表中所有数据有两种方式

    清空表数据的方式 特点
    DELETE 只是删除表中所有数据,对自增没有影响
    TRUNCATE truncate 是将整个表删除掉,然后创建一个新的表
    自增的主键,重新从 1开始

二、非空约束

非空约束的特点: 某一列不予许为空

字段名 字段类型 not null

三、唯一约束

唯一约束的特点: 表中的某一列的值不能重复( 对null不做唯一的判断 )

-- 方式1:创建表的时候直接添加主键索引
CREATE TABLE 表名(
	列名 类型(长度) UNIQUE ,-- 添加唯一索引
);

CREATE TABLE 表名(
	列名 类型(长度),
	-- 添加唯一索引
	UNIQUE [索引名称] (列名)
);

-- 方式2:使用create语句创建: 在已有的表上创建索引
create unique index 索引名 on 表名(列名(长度))

-- 方式3:修改表结构添加索引
ALTER TABLE 表名 ADD UNIQUE ( 列名 )

主键约束与唯一约束的区别:

  1. 主键约束:唯一且不能够为空
  2. 唯一约束:唯一但是可以为空
  3. 一个表中只能有一个主键 , 但是可以有多个唯一约束

四、外键约束

外键约束,讲到多表时会用到。https://blog.csdn.net/Guai_Ka/article/details/113562089

  1. 新建表时添加外键

    [CONSTRAINT] [外键约束名称] FOREIGN KEY 外键字段名 REFERENCES 主表名(主键字段名)
    
  2. 已有表添加外键

    ALTER TABLE 从表 ADD [CONSTRAINT] [外键约束名称] FOREIGN KEY 外键字段名 REFERENCES
    主表(主键字段名);
    
  3. 删除外键约束(需要用到创建时的外键约束名称)

    alter table 从表 drop foreign key 外键约束名称
    
  4. 外键约束的注意事项:

    1. 从表外键类型必须与主表主键类型一致 否则创建失败

      -- 错误代码:1215
      -- Cannot add foreign key constraint
      
    2. 添加数据时, 应该先添加主表中的数据.

    3. 删除数据时,应该先删除从表中的数据.

五、默认值

默认值约束:用来指定某列的默认值

字段名 字段类型 DEFAULT 默认值

六、注释

字段名 字段类型 comment 注释

猜你喜欢

转载自blog.csdn.net/Guai_Ka/article/details/113525400