精华内容
下载资源
问答
  • 常见的约束的基本类型有哪些
    千次阅读
    2021-01-19 04:47:58

    #常见约束

    /*

    含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性

    分类:六大约束

    NOT NULL:非空,用于保证该字段的值不能为空

    比如姓名、学号等

    DEFAULT:默认,用于保证该字段有默认值

    比如性别

    PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空

    比如学号、员工编号等

    UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空

    比如座位号

    CHECK:检查约束【mysql中不支持】

    比如年龄、性别

    FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值

    在从表添加外键约束,用于引用主表中某列的值

    比如学生表的专业编号,员工表的部门编号,员工表的工种编号

    添加约束的时机:

    1.创建表时

    2.修改表时

    约束的添加分类:

    列级约束:

    六大约束语法上都支持,但外键约束没有效果

    表级约束:

    除了非空、默认,其他的都支持

    主键和唯一的大对比:

    保证唯一性    是否允许为空  一个表中可以有多少个   是否允许组合

    主键  √      ×      至多有1个          √,但不推荐

    唯一  √      √      可以有多个        √,但不推荐

    外键:

    1、要求在从表设置外键关系

    2、从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求

    3、主表的关联列必须是一个key(一般是主键或唯一)

    4、插入数据时,先插入主表,再插入从表

    删除数据时,先删除从表,再删除主表

    */

    CREATE TABLE 表名(

    字段名 字段类型 列级约束,

    字段名 字段类型,

    表级约束

    )

    CREATE DATABASE students;

    #一、创建表时添加约束

    #1.添加列级约束

    /*

    语法:

    直接在字段名和类型后面追加 约束类型即可。

    只支持:默认、非空、主键、唯一

    */

    USE students;

    DROP TABLE stuinfo;

    CREATE TABLE stuinfo(

    id INT PRIMARY KEY,#主键

    stuName VARCHAR(20) NOT NULL UNIQUE,#非空

    gender CHAR(1) CHECK(gender='男' OR gender ='女'),#检查

    seat INT UNIQUE,#唯一

    age INT DEFAULT 18,#默认约束

    majorId INT REFERENCES major(id)#外键

    );

    CREATE TABLE major(

    id INT PRIMARY KEY,

    majorName VARCHAR(20)

    );

    #查看stuinfo中的所有索引,包括主键、外键、唯一

    SHOW INDEX FROM stuinfo;

    #2.添加表级约束

    /*

    语法:在各个字段的最下面

    【constraint 约束名】 约束类型(字段名)

    */

    DROP TABLE IF EXISTS stuinfo;

    CREATE TABLE stuinfo(

    id INT,

    stuname VARCHAR(20),

    gender CHAR(1),

    seat INT,

    age INT,

    majorid INT,

    CONSTRAINT pk PRIMARY KEY(id),#主键

    CONSTRAINT uq UNIQUE(seat),#唯一键

    CONSTRAINT ck CHECK(gender ='男' OR gender = '女'),#检查

    CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)#外键

    );

    SHOW INDEX FROM stuinfo;

    #通用的写法:★

    CREATE TABLE IF NOT EXISTS stuinfo(

    id INT PRIMARY KEY,

    stuname VARCHAR(20),

    sex CHAR(1),

    age INT DEFAULT 18,

    seat INT UNIQUE,

    majorid INT,

    CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)

    );

    #二、修改表时添加约束

    /*

    1、添加列级约束

    alter table 表名 modify column 字段名 字段类型 新约束;

    2、添加表级约束

    alter table 表名 add 【constraint 约束名】 约束类型(字段名) 【外键的引用】;

    */

    DROP TABLE IF EXISTS stuinfo;

    CREATE TABLE stuinfo(

    id INT,

    stuname VARCHAR(20),

    gender CHAR(1),

    seat INT,

    age INT,

    majorid INT

    )

    DESC stuinfo;

    #1.添加非空约束

    ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL;

    #2.添加默认约束

    ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;

    #3.添加主键

    #①列级约束

    ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;

    #②表级约束

    ALTER TABLE stuinfo ADD PRIMARY KEY(id);

    #4.添加唯一

    #①列级约束

    ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE;

    #②表级约束

    ALTER TABLE stuinfo ADD UNIQUE(seat);

    #5.添加外键

    ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id);

    #三、修改表时删除约束

    #1.删除非空约束

    ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;

    #2.删除默认约束

    ALTER TABLE stuinfo MODIFY COLUMN age INT ;

    #3.删除主键

    ALTER TABLE stuinfo DROP PRIMARY KEY;

    #4.删除唯一

    ALTER TABLE stuinfo DROP INDEX seat;

    #5.删除外键

    ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;

    SHOW INDEX FROM stuinfo;

    更多相关内容
  • 介绍完数据类型后,接着介绍MySQL中的常见约束、事务以及视图。本文就分别从这三个方面进行介绍。 文章目录一、常见约束1. 创建表时添加约束2. 修改表时添加约束3. 修改表时删除约束二、事务控制语言三、视图1. 视图...

    介绍完数据类型后,接着介绍MySQL中的常见约束、事务以及视图。本文就分别从这三个方面进行介绍。

    一、常见约束

    含义:约束是一种限制,用于限制表中的数据,保证表中的数据的准确和可靠性
    分类:六大约束

    • PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空
    • UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空,一个表中可以有多个唯一键
    • NOT NULL:非空,用于保证该字段的值不能为空
    • DEFAULT:默认,用于保证该字段有默认值,比如性别
    • FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值
      在从表添加外键约束,用于引用主表中某列的值
    • CHECK:检查约束【mysql中不支持】

    添加约束的时机:可以在创建表时添加;也可以在修改表时添加
    约束的分类

    • 列级约束:六大约束语法上都支持,但外键约束没有效果(primary key, unique, not null, defalut 4个)
    • 表级约束:除了非空、默认,其他的都支持 (primary key, unique, foreign key 3个)

    列级约束与表级约束对比

    类型位置支持的约束类型(都不考虑check)是否可以起约束名
    列级约束列的后面语法都支持,但外键没有效果不可以
    表级约束所有列的下面默认和非空不支持,其他支持可以(主键没有效果)

    外键的特点

    1. 要求在从表设置外键关系
    2. 从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
    3. 主表的关联列必须是一个key(一般是主键或唯一)
    4. 插入数据时,先插入主表,再插入从表;删除数据时,先删除从表,再删除主表

    语法

    CREATE TABLE 表名(
    	字段名 字段类型 列级约束,
    	字段名 字段类型,
    	表级约束
    );
    

    1. 创建表时添加约束

    (1)添加列级约束

    列级约束只支持:主键、唯一、默认、非空
    案例(测试列级约束):创建stuinfo表,并添加列级约束

    CREATE TABLE stuinfo(
    	id INT PRIMARY KEY,#主键
    	stuName VARCHAR(20) NOT NULL,#非空
    	gender CHAR(1) CHECK(gender='男' OR gender ='女'),#检查,可以写,但没有效果
    	seat INT UNIQUE,#唯一
    	age INT DEFAULT  18,#默认
    	majorId INT REFERENCES major(id)#外键,表级约束中不支持
    );
    

    查看stuinfo表中的所有索引,包括主键、外键、唯一

    SHOW INDEX FROM stuinfo;

    (2)添加表级约束

    表级约束只支持:主键、唯一、外键
    语法:在各个字段的最下面添加
    【constraint 约束名】 约束类型(字段名)
    案例(测试表级约束):创建上述的stuinfo表,并添加表级约束

    CREATE TABLE stuinfo(
    	id INT,
    	stuname VARCHAR(20),
    	gender CHAR(1),
    	seat INT,
    	age INT,
    	majorid INT,
    	
    	CONSTRAINT pk PRIMARY KEY(id),#主键
    	CONSTRAINT uq UNIQUE(seat),#唯一键
    	CONSTRAINT ck CHECK(gender ='男' OR gender  = '女'),#检查,写上也没效果,不支持
    	CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)#外键	
    );
    

    (3)创建表时添加约束的通用写法

    CREATE TABLE stuinfo(
    	id INT PRIMARY KEY,
    	stuname VARCHAR(20) NOT NULL,
    	sex CHAR(1),
    	age INT DEFAULT 18,
    	seat INT UNIQUE,
    	majorid INT,
    	CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)
    );
    

    主键和唯一键的大对比【面试题★】

    类型保证唯一性是否允许为空一个表中可以有多少个是否允许组合
    主键×至多有1个√(不推荐)
    唯一键√(最多允许一个为空)可以有多个√(不推荐)

    2. 修改表时添加约束

    语法:

    1、添加列级约束
    alter table 表名 modify column 字段名 字段类型 新约束;
    
    2、添加表级约束
    alter table 表名 addconstraint 约束名】 约束类型(字段名) 【外键的引用】;
    

    案例:使用修改表的方式添加约束

    CREATE TABLE stuinfo(
    	id INT,
    	stuname VARCHAR(20),
    	gender CHAR(1),
    	seat INT,
    	age INT,
    	majorid INT
    );
    
    #修改表时添加约束
    #1.添加非空约束
    ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20)  NOT NULL;
    #2.添加默认约束
    ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;
    #3.添加主键
    #(1)添加列级约束
    ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;
    #(2)添加表级约束
    ALTER TABLE stuinfo ADD PRIMARY KEY(id);
    #4.添加唯一
    #(1)添加列级约束
    ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE;
    #(2)添加表级约束
    ALTER TABLE stuinfo ADD UNIQUE(seat);
    #5.添加外键
    ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id); 
    

    3. 修改表时删除约束

    五种约束的删除方式为:默认和非空使用modify的方式删除、主键,唯一键和外键使用drop的方式删除
    案例:

    #1.删除非空约束
    ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;
    #2.删除默认约束
    ALTER TABLE stuinfo MODIFY COLUMN age INT ;
    
    #3.删除主键
    ALTER TABLE stuinfo DROP PRIMARY KEY;
    #4.删除唯一
    ALTER TABLE stuinfo DROP INDEX seat;
    #5.删除外键
    ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;
    

    存在外键时的删除方式

    1. 级联删除
      1)先删除原来的外键约束
      ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;
      2)添加新的有级联删除的外键约束
      ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE CASCADE;
      3)删除从表的数据时,主表的数据自动删除

    2. 级联置空
      ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE SET NULL;

    二、事务控制语言

    除了之前介绍的DQL(数据查询语言)、DML(数据操纵语言)以及DDL(数据定义语言),现在介绍TCL(事务控制语言,Transaction Control Language)。

    用通俗的语言讲Spring事务 这篇文章的开头部分,已经比较详细地介绍了事务。下面再简单介绍一下。

    事务的特性: ACID
    原子性:一个事务不可再分割,要么都执行要么都不执行
    一致性:一个事务执行会使数据从一个一致状态切换到另外一个一致状态
    隔离性:一个事务的执行不受其他事务的干扰
    持久性:一个事务一旦提交,则会永久的改变数据库的数据

    事务的隔离级别:

    级别 \ 存在问题脏读不可重复读幻读
    read uncommitted
    read committed (oracle默认级别)×
    repeatable read (mysql默认级别)××
    serializable×××

    查看隔离级别:select @@tx_isolation;
    设置隔离结果:set global|session isolation level 隔离级别;

    事务的分类:

    • 隐式事务:事务没有明显的开启和结束的标记,比如insert、update、delete语句,执行语句后自动提交
    • 显式事务:事务具有明显的开启和结束的标记

    事务的创建步骤:
    前提:必须先设置自动提交功能为禁用,可以通过SHOW VARIABLES LIKE 'autocommit'; 查看是否开启了自动提交
    set autocommit=0;
    步骤1:开启事务
    set autocommit=0;
    start transaction;【可选的语句,自动开启】
    步骤2:编写事务中的sql语句(select insert update delete 只能是这些语句,DDL语句是不支持的)
    语句1;
    语句2;
    【savepoint 保存点节点名】
    语句3;

    步骤3:结束事务
    commit; 提交事务
    rollback; 回滚事务
    rollback to 保存点名; 回滚事务到保存点

    事务案例:转账

    #开启事务
    SET autocommit=0;
    START TRANSACTION;
    #编写一组事务的语句
    UPDATE account SET balance = 500 WHERE username='张无忌';
    UPDATE account SET balance = 1500 WHERE username='赵敏';
    #结束事务
    COMMIT;
    #ROLLBACK;
    
    SELECT * FROM account;
    

    案例2:保存点的使用

    SET autocommit=0;
    START TRANSACTION;
    DELETE FROM account WHERE id=25;
    SAVEPOINT a;#设置保存点
    DELETE FROM account WHERE id=28;
    ROLLBACK TO a;#回滚到保存点
    
    SELECT * FROM account;
    

    案例3:比较使用delete清空表和 truncate清空表进行回滚的区别

    #delete清空的表能够回滚
    SET autocommit=0;
    START TRANSACTION;
    DELETE FROM account;
    ROLLBACK;
    
    #truncate清空的表不能够回滚
    SET autocommit=0;
    START TRANSACTION;
    TRUNCATE TABLE account;
    ROLLBACK;
    

    三、视图

    1. 视图介绍

    含义:视图是一张虚拟表,和普通表一样使用;视图是mysql5.1版本后出现的新特性,是通过表动态生成的数据

    使用视图的好处

    1. 重用sql语句
    2. 简化复杂的sql操作,不必知道它的查询细节
    3. 保护数据,提高安全性(视图只提供了一部分信息,原始表中的保密信息如身份证号可以不提供出来)

    视图和普通表的对比

    类型创建语法的关键字是否实际占用物理空间使用
    视图create view只是保存了sql逻辑增删改查,只是一般不能增删改
    普通表create table保存了数据增删改查

    2. 创建视图

    语法:

    create view 视图名
    as
    查询语句;
    

    案例1:使用视图查询姓张的学生名和专业名

    CREATE VIEW v1
    AS
    SELECT stuname,majorname
    FROM stuinfo s
    INNER JOIN major m ON s.`majorid`= m.`id`;
    
    SELECT * FROM v1 WHERE stuname LIKE '张%';
    

    案例2:使用视图查看每个部门的平均工资级别

    #(1)创建视图查看每个部门的平均工资
    CREATE VIEW myv2
    AS
    SELECT AVG(salary) ag,department_id
    FROM employees
    GROUP BY department_id;
    
    #(2)使用
    SELECT myv2.`ag`,g.grade_level
    FROM myv2
    JOIN job_grades g
    ON myv2.`ag` BETWEEN g.`lowest_sal` AND g.`highest_sal`;
    

    3. 修改视图

    方式一语法:

    create or replace view  视图名
    as
    查询语句;
    

    方式二语法:

    alter view 视图名
    as 
    查询语句;
    

    案例:查询每个工种的平均工资

    CREATE OR REPLACE VIEW myv3
    AS
    SELECT AVG(salary),job_id
    FROM employees
    GROUP BY job_id;
    
    或者
    
    alter view myv3
    AS
    SELECT AVG(salary),job_id
    FROM employees
    GROUP BY job_id;
    

    4. 删除视图

    语法:

    drop view 视图名,视图名, ...;
    

    案例:

    DROP VIEW emp_v1,emp_v2,emp_v3;
    

    5. 查看视图

    DESC myv3;
    
    SHOW CREATE VIEW myv3;
    

    6. 更新视图

    #1.插入
    INSERT INTO myv1 VALUES('张飞','zf@qq.com');
    
    #2.修改
    UPDATE myv1 SET last_name = '张无忌' WHERE last_name='张飞';
    
    #3.删除
    DELETE FROM myv1 WHERE last_name = '张无忌';
    

    具备以下特点的视图不允许更新

    (1)包含以下关键字的sql语句:分组函数、distinct、group by、having、union或者union all
    例如,如下所示的视图是不允许更改的:

    CREATE OR REPLACE VIEW myv1
    AS
    SELECT MAX(salary) m,department_id
    FROM employees
    GROUP BY department_id;
    
    #不允许更新
    UPDATE myv1 SET m=9000 WHERE department_id=10; #该操作报错,不允许更新
    

    (2)常量视图

    CREATE OR REPLACE VIEW myv2
    AS
    SELECT 'john' NAME;
    
    #不允许更新
    UPDATE myv2 SET NAME='lucy'; #该操作报错,不允许更新
    

    (3)select中包含的子查询

    CREATE OR REPLACE VIEW myv3
    AS
    SELECT department_id,(SELECT MAX(salary) FROM employees) 最高工资
    FROM departments;
    
    #不允许更新
    UPDATE myv3 SET 最高工资=100000; #该操作报错,不允许更新
    

    (4)含join的连接查询

    CREATE OR REPLACE VIEW myv4
    AS
    SELECT last_name,department_name
    FROM employees e
    JOIN departments d
    ON e.department_id  = d.department_id;
    
    #允许更新,不允许插入
    UPDATE myv4 SET last_name  = '张飞' WHERE last_name='Whalen'; #视图和表的数据同时都改了
    INSERT INTO myv4 VALUES('陈真','xxxx');#插入失败
    

    (5)from一个不能更新的视图

    CREATE OR REPLACE VIEW myv5
    AS
    SELECT * FROM myv3;
    
    #不允许更新
    UPDATE myv5 SET 最高工资=10000 WHERE department_id=60;
    

    (6)where子句的子查询引用了from子句中的表

    CREATE OR REPLACE VIEW myv6
    AS
    SELECT last_name,email,salary
    FROM employees
    WHERE employee_id IN(
    	SELECT  manager_id
    	FROM employees
    	WHERE manager_id IS NOT NULL
    );
    
    #不允许更新
    UPDATE myv6 SET salary=10000 WHERE last_name = 'k_ing';
    
    展开全文
  • 数据库中表的常见七大约束

    万次阅读 2018-05-14 20:15:55
    真正约束字段的是数据类型,但是数据类型约束很单一,需要一些额外的约束,更好的保证数据的合法性,从业 务逻辑角度保证数据的正确性。比如一个字段是email,要求是唯一的。 1、空属性not null:not null ...

    真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业
    务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。

    1、空属性not null:not null 此列属性不允许为空,必须做数据插入

    create table t1(
        per_name varchar(20),
        per_age int not null
    );

    这里写图片描述
    插入值:

    insert into t1(per_age) values(20);
    
    //让pet_age为NULL时尝试插入一下,看是否会报错
    insert into t1(per_name) values("易烊千玺");

    查询:

    select * from t1;

    这里写图片描述
    注:数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算

    2、默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选 择性的使用默认值。

    默认值default:a:如果某一种属性经常出现,可以在一开始就指定数据
    b:默认值配合not null使用
    c:set和enum不允许设置默认值

    例子:

    create table t2(
            name varchar(20),
            age int not null default 0,
            sex varchar(1) default '男'
    );

    这里写图片描述

    insert into t2(name,age) values("名字",20);
    insert into t2(name,sex) value(" 名字","女");
    

    这里写图片描述
    增加一列属性

    alter table t2 add time_test TIMESTAMP;()

    3、列描述 comment:comment描述仅作为列的作用,没有实际含义
    查看到当前数据库的描述信息:show create table t3;

    * comment不等同于注释
    
    create table t3(
        name varchar(20) comment '此列描述学生姓名',
        age int default 0 comment '描述学生年龄',
        sex char(1) default '男' comment '性别信息'
    );

    这里写图片描述

    查看到当前数据库的描述信息:show create table t3;
    这里写图片描述

    添加注释

    create table t4(
        comment_name char(1) comment '测试comment是否能看到',
        annotation_name char(1) --测试注释释放能看到
    );

    4、自动填充0 (zerofill)

    a:如果某一数值列规定了zerofill,则自动把此列变为无符号整形 b:
    规定了zerofill的数据列,如果数据列的长度没达到规定长度,则在数据前面自动填充0
    eg:insert into t6 value (10,123); —–>00123。(如果超过或者达到长度,则不填充)

    create table t5(
        a int default 0,
        b int(5) default 55 zerofill
    );

    这里写图片描述

    // 添加
    insert into t5 value (10,123);
    
    // 创建t6
    create table t6(
        a int default 0,
        b int(5)  zerofill
    );

    这里写图片描述

    // 添加信息给t6
    insert into t6 value (10,123);

    5、主键约束(primary key):主键用于唯一约束字段数据,使用主键约束的字段,不能为空,不能重复,主键所在的列为整数类型,一张表有且只能有一个主键

    (1)单主键:

    create table t7(
        id int primary key comment 'id列表示学生学号不允许为空,也不允许重复',
        name varchar(20) not null
    );

    这里写图片描述

    测试:主键不能重复
    insert into t7 values(1,"易烊千玺"),(2,"我自己");
    

    这里写图片描述
    (2)复合主键:

    create table t8(
        name varchar(20) comment '学生姓名',
        sushe varchar(20) comment '描述学生宿舍',
        age int comment '学生年龄',
        primary key(name,sushe) comment 'id和宿舍作为复合主键'
    );

    这里写图片描述

    测试:组合起来的主键不能重复
    insert into t8 values("1","101","10"),("2","101","15");
    insert into t8 values("2","101","11");
    

    这里写图片描述
    (3)创建表以后追加主键:

    alter table 表名 add primary key(字段1……);
    注意:追加主键必须确保(作为主键的字段)字段1不能为空,不能重复;

    (4)删除主键

    alter table 表名 drop primary key;
    
    eg:
    alter table t7 drop primary key;(删除主键之后就可以允许重复)

    这里写图片描述
    这里写图片描述
    6、自增长(auto_increment)

    a、任何一个字段要做自增长,其本身必须是索引(key必须有值)
    c、一张表有且只能有一个自增长
    主键和自增长搭配使用
    id + auto_increment:逻辑主键 eg:订单表、商品信息表

    create table t9(
        id int primary key auto_increment comment '描述商品编号',
        name varchar(20) comment '描述商品名称'
    );

    这里写图片描述

    测试:
    insert into t9(name) values("IphoneX"),("Iphone8");
    

    这里写图片描述

    1和2 就是自增长的,再添加一条信息就会在2的基础上继续加

    insert into t9(name) values(8,”小米Mix2”); 【再添加一条后,就从8开始自增】

    * 说明:
    

    指定自增数值后,以后的自增以此为基础
    删除指定列以后还是以最大值为基础自增

    7、唯一键(unique)

    唯一键允许为空,但是不能重复,一张表中可以有多个字段设置唯一
    唯一键解决表中多个字段需要唯一性约束的问题
    null不做比较,可以允许多个null

    create table t10(
        id char(10) unique comment '描述学号唯一',
        name varchar(10)
    );

    这里写图片描述

    insert into t10 values(1,"哈哈"),(2,"呵呵");
    

    这里写图片描述
    这里写图片描述

    展开全文
  • 数据库的基本操作和约束

    千次阅读 2022-03-07 14:09:33
    与主键约束不同的是,唯一约束在一个表中可以多个,并且设置唯一约束的列是允许空值的,但是只能一个空值。 例如,在用户信息表中,要避免表中的用户名重名,就可以把用户名列设置为唯一约束。 4)非空约束 ...

    数据库的创建(create): create database 数据库名;

    数据库的删除(drop): drop database 数据库名;

    数据库的切换(use): use 数据库名;

    数据库的查看(show,desc): show databases;

    数据库详细信息查看: show create database 数据库名;

    一 、创建表

    表是一种重要的数据库对象,存储数据库中所有的数据,如果把数据库比喻成菜鸟驿站,那表就像驿站中放置快递的架子,一个表就是一个实体集,表实质上是行和列的集合,每一行代表一条记录(元组),每一列代表记录的一个字段(属性)。每个表由若干行组成,表的第一行为各列标题,其余行都是数据。 每一列必须具有相同的数据类型,表的行数和总大小仅受可用空间的限制。 

    特殊的NULL(空)值

    null值不是“0”,也不是空格,它是一个比较特殊的值。一般表示值是否为空。在进行数据类型定义的时侯,系统一般默认字段值允许为空值,是不会显示的,或者是在图形化操作界面创建表字段操作窗口会有“是否允许为空”的勾选项。如果勾选上了,表示允许值为空。否则不允许为空值。如果是使用命令行窗口,进行数据类型定义,不允许为空时,就要在该数据类型定义行,添加“not null”,还有一种情况,如果在某列上设置了主键,该列也不允许重复值,也不允许出现空值。

    表的创建有三个要素:字段名(属性),数据类型(字符串类型、日期时间型、整型),数据特征(是否为空,有没有主键)

    1、创建表的方法有两种

    第一种:图形化操作:连接服务器后,单击选定数据库展开目录,选择表,在弹出的快捷菜单中选择“新建表”命令,或者使用工具栏上的图形化按钮,均可以进行数据库的创建;

    在弹出的表设计器中,输入字段名,数据类型,设置字段是否允许为空等。即完成表结构的设计。接下来可向表中添加数据。

    第二种:使用SQL语句进行表的创建

    表的创建:create table 表名(字段名1 数据类型(数据长度) 数据特征,字段名2 数据类型(数据长度) 数据特征,字段名3 数据类型(数据长度) 数据特征);

    例如:创建一个班级表grade,表结构定义如下:

           字段名       数据类型       长度      是否为空

        BID(班级代码)       char          6           否  

        BNAME(班级名称)   varchar        20          否

        PID系部代码        char          4           否

     创建该表的SQL语句为

    Create table grade(bid char(6) not null,

                     Bname varchar(20) not null,

                      Pid char(4) not null);

    扩展:创建表时指定存储引擎和字符集

    查看数据库中所有的数据表:show tables;

    查看某个数据表:show create table 表名注意:此处的表名的是要查询数据表的名称,且要切换到对应用户数据库,否则屏幕会提示出错。

    查看表的详细信息,并以表格样式显示:describe 表名=desc 表名;

    二、表结构的修改见第五周笔记

    三、向表中添加记录

    向表中插入数据:

    最简单:insert into 表名 values(字段值1,);

    最严谨:insert into 表名(字段名1,字段名2,字段名3) values(字段值1,字段值2,字段值3);

    使用较少:insert into 表名  set 字段名1=字段值1,字段名2=字段值2;

    同时添加多条记录:insert into 表名 values(字段值1,字段值2,字段值3…),(字段值1,字段值2,字段值3…),(字段值1,字段值2,字段值3);

    注意:字符串类型的数据在使用的时候要用单引号括起来;字段名和字段值是对应的关系,每个值的顺序、类型必须与对应的字段相匹配。

    查看表中所有的数据(查询语句):select * from 表名;

    四、删除表:drop table 表名;

    小结:create,alter,drop都属于SQL(结构化查询语句)中的数据定义语言。

    五、约束是一种限制,它通过限制表中的数据,来确保数据的完整性和唯一性。使用约束来限定表中的数据是很有必要的。约束是为了保证数据完整性提出的,并对用户不符合要求的操作进行终止。

    约束的类型:

    1)主键约束(primary key)

    主键约束是使用最频繁的约束。在设计数据表时,一般情况下,都会要求表中设置一个主键。主键约束具有唯一性。

    主键是表的一个特殊字段,该字段能唯一标识该表中的每条信息。例如,学生信息表中的学号是唯一的。

    2)外键约束

    外键约束经常和主键约束一起使用,用来确保数据的一致性。

    例如,一个水果摊,只有苹果、桃子、李子、西瓜 4 种水果,那么,你来到水果摊要买水果只能选择苹果、桃子、李子和西瓜,不能购买其它的水果。

    3)唯一约束(unique)

    唯一约束与主键约束有一个相似的地方,就是它们都能够确保列的唯一性。与主键约束不同的是,唯一约束在一个表中可以有多个,并且设置唯一约束的列是允许有空值的,但是只能有一个空值。

    例如,在用户信息表中,要避免表中的用户名重名,就可以把用户名列设置为唯一约束。

    4)非空约束

    非空约束用来约束表中的字段不能为空。例如,在学生信息表中,如果不添加学生姓名,那么这条记录是没有用的。

    5)默认值约束

    默认值约束用来约束当数据表中某个字段不输入值时,自动为其添加一个已经设置好的值。默认值约束通常用在已经设置了非空约束的列,这样能够防止数据表在录入数据时出现错误。

    以上 6 种约束中,一个数据表中只能有一个主键约束,其它约束可以有多个。

    命令行约束的设置:

    一、not null

    举例:创建表时设置非空约束

    create table 表名(字段名 数据类型(长度) 数据特征);

    create table stu_1(sno int not null,sname char(8) not null,sex char(2),telephone char(11));

    二、命令行方式设置主键约束primary key;

    1 、创建表时添加约束

    create table stu_1

        (sno int not null primary key,

         sname char(8) not null,

         sex char(2),

         telephone char(11));

    或者是在定义完所有字段之后指定主键,语法格式如下:

    create table stu_2

        (sno int not null,

         sname char(8) not null,

         sex char(2),

         telephone char(11)

    primary key(sno));

    2、在已经创建的表中基本字段上添加主键

    Alter table 表名 add primary key(字段名);

     结果

    3、删除主键约束

    Alter table 表名 drop primary key;

    扩展:在已创建的表上添加主键约束,并给该约束取名字,便于后期操作。注意:由于主键约束在一个表中只能有一个,因此不需要指定主键名就可以删除一个表中的主键约束

    ALTER TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY (字段名);

    三、唯一约束:唯一约束与主键约束相似的是它们都可以确保列的唯一性。不同的是,唯一约束在一个表中可有多个,并且设置唯一约束的列允许有空值,但是只能有一个空值。而主键约束在一个表中只能有一个,且不允许有空值。唯一约束可以在创建表时直接设置,通常设置在除了主键以外的其它列上。

    1、在定义完列之后直接使用 UNIQUE 关键字指定唯一约束,语法格式如下:

    <字段名> <数据类型> UNIQUE

    如:create table stu_3

        (sno int not null primary key,

         sname char(8) not null,

         sex char(2),

         telephone char(11)  unique);

    2、在已有表上添加一个唯一约束

    ALTER TABLE 表名  ADD CONSTRAINT 约束名 UNIQUE(字段名);

    3、删除约束

    注意:此处的唯一约束删除有一点麻烦,要知道唯一约束的约束名才能删除,而且在删除时,需要在约束名的前面加上index(索引)标识。

    四、默认值(Default)的完整称呼是“默认值约束(Default Constraint)”,用来指定某列的默认值。在表中插入一条新记录时,如果没有为某个字段赋值,系统就会自动为这个字段插入默认值。

    例如,员工信息表中,部门位置在北京的较多,那么部门位置就可以默认为“北京”,系统就会自动为这个字段赋值为“北京”。

    默认值约束通常用在已经设置了非空约束的列,这样能够防止数据表在录入数据时出现错误。

    1、创建表时可以使用 DEFAULT 关键字设置默认值约束,具体的语法格式如下:

    <字段名> <数据类型> DEFAULT <默认值>;

    如:create table stu_3

        (sno int not null primary key,

         sname char(8) not null,

         sex char(2) default ‘男’,

         telephone char(11)  unique);

    2、修改表时添加默认值约束的语法格式如下:

    ALTER TABLE <数据表名>

    Modify <字段名> <数据类型> DEFAULT <默认值>;  注意:如果默认值是字符型,要用英语半角单引号括起来。

    使用修改字段的数据类型命令

     删除默认值约束,还是使用修改字段的数据类型命令使用

     综合应用:

    五、定义字段值自增长

    在 MySQL 中,当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值。每增加一条记录,主键会自动以相同的步长进行增长。

    通过给字段添加 AUTO_INCREMENT 属性来实现主键自增长。语法格式如下:

    字段名 数据类型 AUTO_INCREMENT

    注意:

    1. 默认情况下,AUTO_INCREMENT 的初始值是 1,每新增一条记录,字段值自动加 1。
    2. 一个表中只能有一个字段使用 AUTO_INCREMENT 约束,且该字段必须有唯一索引,以避免序号重复(即为主键或主键的一部分)。
    3. AUTO_INCREMENT 约束的字段必须具备 NOT NULL 属性。
    4. AUTO_INCREMENT 约束的字段只能是整数类型(TINYINT、SMALLINT、INT、BIGINT 等)。
    5. AUTO_INCREMENT 约束字段的最大值受该字段的数据类型约束,如果达到上限,AUTO_INCREMENT 就会失效。

    例如:

    mysql> CREATE TABLE tb_student(

        -> id INT(4) PRIMARY KEY AUTO_INCREMENT,

        -> name VARCHAR(25) NOT NULL

        -> );

    Query OK, 0 rows affected (0.07 sec)

    上述语句执行成功后,会创建名为 tb_student 的数据表。其中,id 为主键,每插入一条新记录,id 的

    值就会在前一条记录的基础上自动加 1。name 为非空字段,该字段的值不能为空值(NULL)。

    扩展:AUTO_INCREMENT初始值的修改

    加上 AUTO_INCREMENT 约束条件后,字段中的每个值都是自动增加的。因此,这个字段不可能出现相同的值。通常情况下,AUTO_INCREMENT 都是作为 id 字段的约束条件,并且将 id 字段作为表的主键。

    该字段在添加记录时,可以省略值。

    修改后的结果:

    展开全文
  • 索引的种类有哪些

    千次阅读 2020-02-07 09:14:57
    普通索引:最基本的索引,没有任何约束限制。 唯一索引:和普通索引类似,但是具有唯一性约束,可以 null 主键索引:特殊的唯一索引,不允许 null,一张表最多一个主键索引 组合索引:多列值组成一个索引,...
  • ACID 是数据库事务正确执行的四个基本要素的缩写。 为保证事务(transaction)是正确可靠的,所必须具备的四个特性: 原子性(atomicity,或称不可分割性)、 一致性(consistency)、 隔离性(isolation,又称...
  • postgresql常见的基础数据类型 参考:https://www.runoob.com/postgresql/postgresql-data-type.html 数值型 integer(int):整形,4个字节 real:浮点型,4个字节 ,可以小数点;有点像float serial:序列...
  • 由于该系列文章阅读顺序性,所以请跳转至该系列文章第一篇从头开始阅读,并按照文章末尾指示按顺序阅读,否则会云里雾里,传送门在此:...1. 基本时钟周期约束 1.1 时钟周期约束的性质 1.2 Prim...
  • 文章目录常见约束01 基本概念1.1 含义:1.2 分类:六大约束1.3 添加约束的时机:1.4 约束的添加分类:1.5 主键和唯一的大对比:1.6 外键:02 具体讲解2.1 创建表时添加约束1.添加列级约束2.添加表级约束2.2 修改表时...
  • ** 小白终是踏上了这条不归路—-小文的mysql学习笔记(1) 小白终是踏上了这条不归路—-小文的mysql学习笔记(2)—-条件查询 ...直接在字段名和类型后面追加约束类型即可。 只支持: 默认(DEFAULT)、非空(NO
  • SQL 语言通过定义一个关系所对应的基本表来完成关系模式的定义,其语句格式为: CREATE TABLE 表名( <列名1> <数据类型1> [<列级完整约束条件>], [<列名2> <数据.
  • 数字IC之路-SDC篇(一):基本的时序路径约束

    万次阅读 多人点赞 2019-05-07 17:57:20
    时序约束可以很复杂,这里我们先介绍基本的时序路径约束,复杂的时序约束我们将在后面进行介绍。 在本节的主要内容如下所示: ·时序路径和关键路径的介绍  ·建立时间、保持时间简述  ·时钟的约束(寄存器-...
  • 在具体设置 AUTO_INCREMENT 约束时,一个数据库表中只能一个字段使用该约束,该字段的数据类型必须是整数类型。由于设置了AUTO_INCREMENT 约束后的字段会生成唯一的 ID,所以该字段也经常会设置成 PK 主键。 基本...
  • 关系型数据库MySQL常见的几种约束

    千次阅读 2018-08-23 23:29:39
    关系型数据库MySQL常见的几种约束   转载:https://blog.csdn.net/jiekexu/article/details/80226943  对于已经创建好的表,虽然字段的数据类型决定了所能存储的数据类型,但是表中所存储的数据是否合法并没有...
  • FPGA中的各种约束

    2022-03-18 22:02:54
    约束 约束时FPGA设计中所不可缺少的,通过它可以指定设计各方面的设计要求,一般常见的是包括引脚位置约束、区域约束、时序约束、电平约束等几个方面。 引脚约束 这个比较好理解,就是要把程序中使用的引脚和FPGA...
  • FPGA时序约束分享01_约束四大步骤

    千次阅读 2022-03-15 14:00:25
    因此,很多读者对于怎么进行约束约束的步骤过程有哪些等,不是很清楚。明德扬根据以往项目的经验,把时序约束的步骤,概括分成四大步,分别是时钟的约束、input delays的约束、output delays的约束和时序例外。 ...
  • 基本约束方法 为了保证成功的设计,所有路径的时序要求必须能够让执行工具获取。最普遍的三种路径以及异常路径为: 输入路径(Input Path),使用输入约束 寄存器到寄存器路径(Register-to-Register ...
  • 常见软件测试类型分类

    万次阅读 2018-09-20 09:48:05
    软件测试类型 1)回归测试 回归测试: (regression testing): 回归测试两类:用例回归和错误回归;用例回归是过一段时间以后再回头对以前使用过的用例在重新进行测试,看看会重新发现问题。错误回归,就是在新...
  • java常用数据结构有哪些

    千次阅读 2022-03-31 14:04:18
    java数据结构:1、数组;2、链表,一种递归的数据结构;3、栈,按照“后进先出”、“先进后出”的原则来存储数据;4、队列;5、树,是由 n(n>0)个有限节点组成的一个具有层次关系的集合;6、堆;7、图;8、...
  • 数据库索引常见四种类型

    万次阅读 2019-03-19 12:53:34
     索引唯一扫描,当可以优化器发现某个查询条件可以利用到主键、唯一键、具有外键约束的列,或者只是访问其中某行索引所在的数据的时候,优化器会选择这种扫描类型。   第二种: index range scan  索引...
  • 常见约束如下: 以上五种约束条件针对表中字段进行限制从而保证数据表中数据的正确性和唯一性。换句话说,表的约束实际上就是表中数据的限制条件。 下面对这五种约束进行详细介绍: 主键约束 主键约束(primary key...
  • 时序约束可以很复杂,这里我们先介绍基本的时序路径约束,复杂的时序约束我们将在后面进行介绍。 在本节的主要内容如下所示:  ·时序路径和关键路径的介绍  ·建立时间、保持时间简述  ·时钟的约束(寄存器...
  • 常用的关系型数据库有哪些

    千次阅读 2021-08-17 08:27:58
    常用的关系型数据库有哪些?常用的关系型数据库类型关系模型组成1、Oracle2、MySQL3、Microsoft SQL Server4、Microsoft Access5、DB2 常用的关系型数据库类型 关系数据库,是建立在关系模型基础上的数据库,借助于...
  • -- 这个时候再执行一遍查询语句,就会发现第二个字段的值自动变化了, -- 还有就是timestamp类型的范围是1970年--2038年 约束 基本知识 常见约束如下: primary key 主键约束 unique 唯一约束 not null 非空约束 ...
  • 数据分析的类型有哪些

    千次阅读 2021-06-20 19:42:31
    数据分析的类别 维度一 ...从另一个角度看,描述性数据分析属于初级数据分析,常见的分析方法对比分析法、平均分析法、交叉分析法等。而预测性数据分析以及规范性数据分析属于高级数据分析,常见
  • 数据库基本操作大全

    千次阅读 2022-03-06 12:55:25
    2指定外键删除或更新的行为: 3通过constraint添加外键 4删除外键约束约束 1创建自增长列必须设置为主键,并且一张表里只能一个自增列;没有指定主键的值会自增长 insert into demo values (default,'test...
  • 外键约束 外键约束的特点 添加数据 在外键约束下的数据操作 删除外键约束 多对多 操作案例 多表查询 交叉连接 内连接查询 外连接查询 子查询 子查询关键字-ALL ✈️子查询关键字-ANY和SOME 子查询...
  • 时序约束可以很复杂,这里我们先介绍基本的时序路径约束,复杂的时序约束我们将在后面进行介绍。 在本节的主要内容如下所示:  ·时序路径和关键路径的介绍  ·建立时间、保持时间简述  ·时钟的约束(寄存器...
  • 外键约束(1)参照完整性(2)设置外键的原则:(3)对已的表添加外键(4)在创建表时创建外键4.检查约束5.唯一性约束1.非空约束在前面的数据表定义过程中,每个字段都要一个是否为null值的选择,这就是对数据表中将来的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 86,959
精华内容 34,783
热门标签
关键字:

常见的约束的基本类型有哪些