SQL 约束

      对数据库表添加约束,能够对表中的数据进行限制。保证数据的正确性、有效性和完整性。不正确的数据将无法插入表中。

一、主键约束

      一般将与业务无关的字段作为主键,主键一般没有任何含义。将表中的某个字段添加主键约束,该字段的值不能重复且非空。可以在创建表时给字段添加主键约束,也可以对已有表的字段添加主键约束,一个表中只能有一个主键。

      1.创建表时添加主键约束

关键字:PRIMARY KEY
示例:CREATE TABLE user (id INT PRIMARY KEY, name VARCHAR(20), age INT);

      2.对已有表的字段添加主键约束

关键字:ADD PRIMARY KEY
示例:ALTER TABLE user ADD PRIMARY KEY (id);

      3.删除表字段的主键约束

关键字:DROP PRIMARY KEY
示例:ALTER TABLE user DROP PRIMARY KEY;

二、主键自增约束

      手动维护主键的值容易造成主键值重复,主键添加自增约束,主键值能够由数据库采用自增的方式自动生成。默认起始值为 1,也可以对已有表修改起始值。

      1.创建表时添加主键自增约束,并指定起始值

关键字:KEY AUTO_INCREMENT
示例:
CREATE TABLE user (
      id INT PRIMARY KEY AUTO_INCREMENT,
      name VARCHAR(20),
      age INT
) KEY AUTO_INCREMENT = 2;

      2.对已有表修改主键自增起始值

语法:ALTER TABLE 表名 AUTO_INCREMENT = 起始值;
示例:ALTER TABLE user AUTO_INCREMENT = 3;

三、唯一约束

      给表中的字段添加唯一约束,使该字段的值不能重复

关键字:UNIQUE
示例:
CREATE TABLE user(
      id INT;
      name VARCHAR(20) UNIQUE
);

四、非空约束

      给表中的字段添加非空约束,使该字段的值不能为 null

关键字:NOT NULL
示例:
CREATE TABLE user(
      id INT,
      name VARCHAR(20) NOT NULL
);

五、默认值约束

关键字:DEFAULT
示例:
CREATE TABLE user(
      id INT,
      name VARCHAR(20),
      adress VARCHAR(20) DEFAULT '北京'
);

六、外键约束

      1.创建表时给表添加外键约束

语法:[CONSTRAINT] [ 外键约束名称] FOREIGN KEY( 外键字段名) REFERENCES 主表名( 主键字段名);
示例:
CREATE TABLE department (
      id INT PRIMARY KEY AUTO_INCREMENT,
      name VARCHAR(20),
      lacation VARCHAR(20)
);

CREATE TABLE user (
      id INT PRIMARY KEY AUTO_INCREMENT,
      name VARCHAR(20),
      dep_id INT,
      CONSTRAINT user_dep_fk FOREIGN KEY (dep_id) REFERENCES department(id)
);

      user 表和 department 表是一对多的关系,一个部门对应用多个用户。部门表称之为主表,用户表称之为主表。插入用户数据,根据 dep_id 字段,在部门表中没有对用的部门,怎插入数据失败。

      2.给已有表添加外键约束

语法:ALTER TABLE 从表 ADD [CONSTRAINT] [ 外键约束名称] FOREIGN KEY ( 外键字段名) REFERENCES 主表 ( 主键字段名);
示例:ALTER TABLE user ADD CONSTRAINT user_dep_fk FOREIGN KEY (dep_id) REFERENCES department (id);

      3.删除从表外键约束

示例:DROP TABLE user;

七、级联约束

      在修改和删除主表的主键时,同时更新或删除从表的外键值,称为级联操作。

级联操作语法 描述
ON UPDATE CASCADE 级联更新,只能是创建表的时候创建级联关系。更新主表中的主键,从表中的外键列也自动同步更新
ON DELETE CASCADE 级联删除
示例:
CREATE TABLE department (
      id INT PRIMARY KEY AUTO_INCREMENT,
      name VARCHAR(20),
      location VARCHAR(20)
);

CREATE TABLE user (
      id INT PRIMARY KEY AUTO_INCREMENT,
      name VARCHAR(20),
      dep_id INT,
      CONSTRAINT user_dep_fk FOREIGN KEY (dep_id) REFERENCES department(id) ON UPDATE CASCADE ON DELETE CASCADE
);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章