zoukankan      html  css  js  c++  java
  • MySQL:SQL约束

    1) 约束的作用:

      对表中的数据进行一定的限制,从而保证数据的正确性、有效性、完整性.

      违反约束的 不正确数据,将无法插入到表中

    2) 常见的约束

    约束名 约束关键字
    主键 primary key
    唯一 unique
    非空 not null
    外键 foreign key

     

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

    1.添加主键约束

    语法格式

    字段名 字段类型 primary key

    1) 需求: 创建一个带主键的表

    # 方式1 创建一个带主键的表
    CREATE TABLE emp2(
    -- 设置主键 唯一 非空
    eid INT PRIMARY KEY,
    ename VARCHAR(20),
    sex CHAR(1)
    );
    -- 删除表
    DROP TABLE emp2;
    -- 方式2 创建一个带主键的表
    CREATE TABLE emp2(
    eid INT ,
    ename VARCHAR(20),
    sex CHAR(1),
    -- 指定主键为 eid字段
    PRIMARY KEY(eid)
    );
    -- 方式3 创建一个带主键的表
    CREATE TABLE emp2(
    eid INT ,
    ename VARCHAR(20),
    sex CHAR(1)
    )
    -- 创建的时候不指定主键,然后通过 DDL语句进行设置
    ALTER TABLE emp2 ADD PRIMARY KEY(eid);

    DESC 查看表结构

    -- 查看表的详细信息
    DESC emp2;

     2) 测试主键的唯一性 非空性

    # 正常插入一条数据
    INSERT INTO emp2 VALUES(1,'宋江','');
    # 插入一条数据,主键为空
    -- Column 'eid' cannot be null 主键不能为空
    INSERT INTO emp2 VALUES(NULL,'李逵','');
    # 插入一条数据,主键为 1
    -- Duplicate entry '1' for key 'PRIMARY' 主键不能重复
    INSERT INTO emp2 VALUES(1,'孙二娘','');

    3) 哪些字段可以作为主键 ?

      通常针对业务去设计主键,每张表都设计一个主键id

      主键是给数据库和程序使用的,跟最终的客户无关,所以主键没有意义没有关系,只要能够保证不重复 就好,

      比如 身份证就可以作为主键

    2.删除主键约束

    删除 表中的主键约束 (了解)

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

    3. 主键的自增

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

    关键字:
    AUTO_INCREMENT 表示自动增长(字段类型必须是整数类型)

    1) 创建主键自增的表

    -- 创建主键自增的表
    CREATE TABLE emp2(
    -- 关键字 AUTO_INCREMENT,主键类型必须是整数类型
    eid INT PRIMARY KEY AUTO_INCREMENT,
    ename VARCHAR(20),
    sex CHAR(1)
    );

    2) 添加数据 观察主键的自增

    INSERT INTO emp2(ename,sex) VALUES('张三','');
    INSERT INTO emp2(ename,sex) VALUES('李四','');
    INSERT INTO emp2 VALUES(NULL,'翠花','');
    INSERT INTO emp2 VALUES(NULL,'艳秋','');

    4. 修改主键自增的起始值

    默认地 AUTO_INCREMENT 的开始值是 1,如果希望修改起始值,请使用下面的方式

    -- 创建主键自增的表,自定义自增其实值
    CREATE TABLE emp2(
    eid INT PRIMARY KEY AUTO_INCREMENT,
    ename VARCHAR(20),
    sex CHAR(1)
    )AUTO_INCREMENT=100;
    -- 插入数据,观察主键的起始值
    INSERT INTO emp2(ename,sex) VALUES('张百万','');
    INSERT INTO emp2(ename,sex) VALUES('艳秋','');

    5. DELETE和TRUNCATE对自增长的影响

    删除表中所有数据有两种方式

    清空表数据的方式 特点
    DELETE 只是删除表中所有数据,对自增没有影响
    TRUNCATE

    truncate 是将整个表删除掉,然后创建一个新的结构相同的表

    自增的主键,重新从 1开始

    测试1: delete 删除表中所有数据

    -- 目前最后的主键值是 101
    SELECT * FROM emp2;
    -- delete 删除表中数据,对自增没有影响
    DELETE FROM emp2;
    -- 插入数据 查看主键
    INSERT INTO emp2(ename,sex) VALUES('张百万','');
    INSERT INTO emp2(ename,sex) VALUES('艳秋','')

     

     测试2: truncate删除 表中数据

    -- 使用 truncate 删除表中所有数据,
    TRUNCATE TABLE emp2;
    -- 插入数据 查看主键
    INSERT INTO emp2(ename,sex) VALUES('张百万','');
    INSERT INTO emp2(ename,sex) VALUES('艳秋','');

    二.  非空约束

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

    语法格式

    字段名 字段类型 not null

    需求1: 为 ename 字段添加非空约束

    # 非空约束
    CREATE TABLE emp2(
    eid INT PRIMARY KEY AUTO_INCREMENT,
    -- 添加非空约束, ename字段不能为空
    ename VARCHAR(20) NOT NULL,
    sex CHAR(1)
    );

     

    三.  唯一约束

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

    语法格式

    字段名 字段类型 unique

    1) 添加唯一约束

    #创建emp3表 为ename 字段添加唯一约束
    CREATE TABLE emp3(
    eid INT PRIMARY KEY AUTO_INCREMENT,
    ename VARCHAR(20) UNIQUE,
    sex CHAR(1)
    );

    2) 测试唯一约束

    -- 测试唯一约束 添加一条数据
    INSERT INTO emp3 (ename,sex) VALUES('张百万','');
    -- 添加一条 ename重复的 数据
    -- Duplicate entry '张百万' for key 'ename' ename不能重复
    INSERT INTO emp3 (ename,sex) VALUES('张百万','');

     主键约束和唯一约束的区别

      1.  主键约束: 唯一,且不能为空

         唯一约束:唯一,但是可以为空

      2.  一个表中,只能有一个主键,但是可以有多个唯一约束

    四.  外键约束

    FOREIGN KEY 表示外键约束,将在多表中学习

    五.  默认值

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

    语法格式

    字段名 字段类型 DEFAULT 默认值

    1) 创建emp4表, ename字段默认奥利给

    -- 创建带有默认值的表
    CREATE TABLE emp4(
    eid INT PRIMARY KEY AUTO_INCREMENT,
    -- 为ename 字段添加默认值
    ename VARCHAR(20) DEFAULT '奥利给',
    sex CHAR(1)
    );

    2) 测试 添加数据使用默认值

    -- 添加数据 使用默认值
    INSERT INTO emp4(ename,sex) VALUES(DEFAULT,'');
    INSERT INTO emp4(sex) VALUES('');
    -- 不使用默认值
    INSERT INTO emp4(ename,sex) VALUES('艳秋','');
  • 相关阅读:
    PTA(Basic Level)1048.数字加密
    PTA(Basic Level)1037.在霍格沃茨找零钱
    PTA(Basic Level)1030.完美数列
    PTA(Basic Level)1047.编程团体赛
    PTA(Basic Level)1087.有多少不同的值
    PTA(Basic Level)1077.互评成绩计算
    PTA(Basic Level)1027.打印沙漏
    PTA(Basic Level)1029.旧键盘
    记录一次排查挖矿:快速跟踪一个进程
    JVM性能、多线程排查常用命令
  • 原文地址:https://www.cnblogs.com/JasperZhao/p/15004131.html
Copyright © 2011-2022 走看看