精华内容
下载资源
问答
  • MySQL数据库中的五大约束

    千次阅读 2018-09-24 13:47:33
    文章目录外键约束 (`Foreign Key Counstraint`)1、设置外键的注意事项:2、设置外键的语法:3、外键约束的参照操作:二、主键约束(`Primay Key Coustraint`...数据库中的五大约束包括: 1.主键约束(Primay Key C...


    数据库中的五大约束包括:

    1.主键约束(Primay Key Coustraint) 唯一性,非空性;

    2.唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个;

    3.默认约束 (Default Counstraint) 该数据的默认值;

    4.外键约束 (Foreign Key Counstraint) 需要建立两表间的关系;

    5.非空约束(Not Null Counstraint):设置非空约束,该字段不能为空。

    详细介绍:

    外键约束 (Foreign Key Counstraint)

    1、设置外键的注意事项:

    > 只有INNODB的数据库引擎支持外键,修改my.ini文件设置default-storage-engine=INNODB;
    > 外键与参照列的数据类型必须相同。(数值型要求长度和无符号都相同,字符串要求类型相同,长度可以不同);
    > 设置外键的字段必须要有索引,如果没有索引,设置外键时会自动生成一个索引;
    

    2、设置外键的语法:

    CONSTRAINT 外键名 FOREIGN KEY(外键字段) REFERENCES 参照表(参照字段);
    ON DELETE SET NULL ON UPDATE CASCADE -- 设置操作完整。
    

    3、外键约束的参照操作:

    当对参照表的参照字段进行删除或更新时,外键表中的外键如何应对。
    参照操作可选值:

      RESTRICT: 拒绝对参照字段的删除或修改(默认);
      NO ACTION:与RESTRICT相同,但这个指令只在MySql生效;
      CASCADE:  删除或更新参照表的参照字段时,外键表的记录同步删除或更新;
      SET NULL: 删除删除或更新参照表的参照字段时,外键表的外键设为NULL (此时外键不能设置为NOT NULL)

    二、主键约束(Primay Key Coustraint

    1、主键的注意事项:主键默认非空,默认唯一性约束,只有主键可以设置自动增长(主键不一定自增,自增一定是主键)。

    2、设置主键的方式:

    > 在定义列时设置:id     INT UNSIGNED PRIMARY KEY。
    > 在列定义完成后设置:PRIMARY KEY(id)

    其他约束没有特殊要求因此不做解释。

    展开全文
  • 小编来讲一下数据库的相关知识点,数据库的三特性可谓是:实体属性和关系。  实体:表; 属性:表中的数据(字段); 关系:表与表之间的关系;  数据库设计三范式(重点):  第一范式(1NF):数据表中...
  • ​ 六大约束语法上都支持,但外键约束没有效果 表级约束: ​ 除了非空、默认,其他的都支持 主键约束 PRIMARY KEY用于保证该字段的值具有唯一性,并且非空 eg:学号、员工编号 #主键约束 #使某个字段不重复且...

    建表约束

    语法:

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

    添加约束的时机:

    1. 创建表时
    2. 修改表时

    约束的添加分类:

    • 列级约束:

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

    • 表级约束:

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

    主键约束

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

    eg:学号、员工编号

    #主键约束
    #使某个字段不重复且不得为空,确保表内所有数据的唯一性。
    CREATE TABLE user (
        id INT PRIMARY KEY,
        name VARCHAR(20)
    );
    
    
    #联合主键
    #联合主键中的每个字段都不能为空,并且加起来不能和已设置的联合主键重复。
    CREATE TABLE user (
        id INT,
        name VARCHAR(20),
        password VARCHAR(20),
        PRIMARY KEY(id, name)
    );
    
    
    #自增约束
    #自增约束的主键由系统自动递增分配。
    CREATE TABLE user (
        id INT PRIMARY KEY AUTO_INCREMENT,
        name VARCHAR(20)
    );
    
    
    #添加主键约束
    #如果忘记设置主键,还可以通过SQL语句设置(两种方式):
    ALTER TABLE user ADD PRIMARY KEY(id);
    ALTER TABLE user MODIFY id INT PRIMARY KEY;
    
    
    #删除主键
    ALTER TABLE user drop PRIMARY KEY;
    

    唯一主键

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

    eg:座位号

    #建表时创建唯一主键
    CREATE TABLE user (
        id INT,
        name VARCHAR(20),
        UNIQUE(name)
    );
    
    
    #添加唯一主键
    #如果建表时没有设置唯一建,还可以通过SQL语句设置(两种方式):
    ALTER TABLE user ADD UNIQUE(name);
    ALTER TABLE user MODIFY name VARCHAR(20) UNIQUE;
    
    
    #删除唯一主键
    ALTER TABLE user DROP INDEX name;
    

    非空约束

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

    eg:姓名、学号

    #建表时添加非空约束
    #约束某个字段不能为空
    CREATE TABLE user (
        id INT,
        name VARCHAR(20) NOT NULL
    );
    
    
    #移除非空约束
    ALTER TABLE user MODIFY name VARCHAR(20);
    

    默认约束

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

    eg:性别

    #建表时添加默认约束
    #约束某个字段的默认值
    CREATE TABLE user2 (
        id INT,
        name VARCHAR(20),
        age INT DEFAULT 10
    );
    
    
    #移除非空约束
    ALTER TABLE user MODIFY age INT;
    

    外键约束

    FOREIGN KEY用于限制两个表的关系,用于保证该字段的值必须来自主表的关联列的值。在从表添加外键约束,用于引用主表中某列的值

    eg:学生表的专业编号、员工表的部门编号。员工表的工种编号

    #班级
    CREATE TABLE classes (
        id INT PRIMARY KEY,
        name VARCHAR(20)
    );
    
    
    #学生表
    CREATE TABLE students (
        id INT PRIMARY KEY,
        name VARCHAR(20),
        -- 这里的 class_id 要和 classes 中的 id 字段相关联
        class_id INT,
        -- 表示 class_id 的值必须来自于 classes 中的 id 字段值
        FOREIGN KEY(class_id) REFERENCES classes(id)
    );
    
    
    #1. 主表(父表)classes 中没有的数据值,在副表(子表)students 中,是不可以使用的;
    #2. 主表中的记录被副表引用时,主表不可以被删除。
    
    展开全文
  • MySQL创建表和约束条件(四)

    千次阅读 多人点赞 2019-11-15 14:09:16
    古语有云: 万恶淫为首,百善孝为先。 我们后辈当自勉。 上一章简单介绍了 MySQL的数据类型(三),如果没有看过,请观看上一章 ...在创建表时,一定要在 database 里面进行创建, 既先使用 use 数据库名来选择...

    古语有云: 万恶淫为首,百善孝为先。 我们后辈当自勉。

    上一章简单介绍了 MySQL的数据类型(三),如果没有看过,请观看上一章

    一. 创建表

    上一章时,我们学习了 MySQL的数据类型, 就像Java 知道了 int,string 之后,就该学习类了, 现在,我们知道了数据类型,就该去学习表 Table了。

    在创建表时,一定要在 database 里面进行创建, 既先使用 use 数据库名来选择数据库, 再进行创建, 否则会提示 “No database selected” 的错误。

    创建表语句:

    		create table 表名(
    				列名1  数据类型  [列级别约束条件] [默认值],
    				列名2  数据类型  [列级别约束条件] [默认值],
    				......
    				列名n  数据类型  [列级别约束条件] [默认值],
    
    				[表级别约束条件]
    	
    		);
    

    其中 表名,列名1,列名2,列名n 就像Java 里面的变量一样,不能用关键字。 但与Java 不同的是, MySQL不区分大小写。 这一点,与HTML一样。

    一.一 查询该数据库下所有的表

    使用 show tables; 命令进行查询该数据库下的表。

    要先使用 use 数据 库名先选择数据库。 使用 yuejl数据库。

    有图片。

    查询所具有的表 show tables;

    有图片。

    这个表 t 是上一章在测试timestamp时创建的。

    一.二 创建一个简单的表 temp1

    创建一个简单的表, 里面只有一个字段 name, 类型是 varchar 类型, 长度是10.

    不要忘记 先 use 数据库名 来选择数据库。

    按照上面的创建表的语句进行创建:

     create table t2(
        name varchar(10)
       );
    

    有图片

    一.三 创建一个复杂的表 temp2

    创建一个复杂的表,与老蝴蝶常用的User.java 类一样,具有 id(int类型),name(varchar类型),sex(varchar类型),age(int类型),description(varchar类型) 五个字段。

    (创建时,要按照一定的层次进行书写,这样显的帅气。)

    create table t3(
         id int(11),
         name varchar(20),
        sex varchar(10),
         age int(3),
        description varchar(100)
       );
    

    有图片。

    一.四 展示所有的表

    用 show tables; 命令进行展示

    有图片。

    刚才的两个表 t2,t3 放置到这里面了。

    一.五 创建表时常见错误

    1 . 表名已经存在, 会报 表已经存在的错误
    有图片。

    2 . 列名最后一个 写添加了 , 号, 报错。

    有图片

    3 . 列与列之间,没有加 ,号报错

    有图片。

    要想 用sql语句创建表时,不报错,只有多练,多写。 前期学习者建议用sql去创建表,不建议使用数据库连接工具去创建表。

    二. 约束条件

    二.一 约束条件的由来

    我们在创建表的命令时, 用这么两个东西, 列级别约束条件和表级别约束条件。 约束条件是干什么用的呢? 用什么作用效果呢?

    数据库是存储,管理和操作数据的的仓库, 而表是真正存储数据的, 更准确的说,所有的数据都是放置在表里面的。 我们希望在存储数据之前,就希望能对数据进行一下验证, 就像 Web网站里面的前端验证和后端数据验证, 登录过滤器,权限过滤器一样, 使正确的数据才能够正常的插入,使错误的数据不能够正常插入,提示报错, 使表有个自我检查的功能。 数据库设计者们发现有这么几个常用的小验证,小约束:

    1 . 这个列上面的属性值 必须要存在。 这就是非空约束

    2 . 这个列上面的属性值必须要唯一,不能重复。 这就是唯一约束

    3 . 这个列或者这两个列可以唯一确定这一行,这一行能够通过这个列或者这两列与 其他的行区别开来。 这就是主键约束

    4 . 这个列上的值如果没有手动填充值,数据库表默认提供一下,如性别,没有填写,默认是男。 这就是默认值约束

    5 . 这个列的值是往上增加的,并且与它上一行的值有关系。 如 num次数, 它上一行的值是1, 它这一行的值是2, 它下一行的值是 3 ,下下一行的值是4。 希望这个1,2,3,4 是表自己递增的, 并不是手动插入的。 这就是自增约束。

    6 . 这个列上的值,一定来源于其他表中的值,并不是凭空出现的。发生在两个表之间。 如员工的部门属性的值,一定来源于部门表中的值。 这就是外键约束

    7 . 这个列上的值,只能是规定好的值,不能是其他以外的值。 如性别, 只能是男或者女。 手动添加其他值,包括 保密,未知,太监,人妖 之类的,都不能正确插入。 这叫做检查约束(MySQL数据库中不起作用)。

    其中,1,2,3,4,5,7 是发生在一个表内的约束, 而6是发生在两个表之间的约束。

    上面专业的说法,叫做 数据完整性。

    数据完整性分为三个部分:

    1 . 实体完整性

    2 . 域完整性

    3 . 引用完整性

    实体完整性这项规则要求每个数据表都必须有主键,而作为主键的所有字段,其属性必须是独一及非空值。

    限制字段中的数据必须乎合预设的数据类型。

    参照的完整性不允许关系中有不存在的实体引用。

    使用约束,可以很方便的保证插入数据的正确性,避免逻辑错误数据的出现,但不能保证业务错误数据的出现。 业务错误数据,需要通过业务流程控制来避免。

    二.二 约束条件的分类

    • 主键约束 Primary Key (简称 PK)
    • 非空约束 Not Null
    • 唯一约束 Unique
    • 外键约束 Foreign Key (简称 FK)
    • 默认约束 Default
    • 检查约束 Check(MySQL中不起作用)
    • 自增约束 AUTO_INCREMENT

    下面,老蝴蝶分别对其进行详细的讲解。

    三. 主键约束 Primary Key

    主键约束 分为两种, 一种是 单字段主键, 另外一种是多字段联合主键。

    三.一 单字段主键

    1 . 在创建字段时, 指定 列级别约束条件

     			列名  数据类型   Primary Key  [默认值]
    

    如:

    create table pk4(
         id int(11) primary key,
       	 name varchar(10)
        );
    

    有图片。

    2 . 在创建完所有列之后, 指定 表级别约束条件

    	[constraint 约束名] primary key (列名)
    

    其中, 约束名通常命名为: PK_表名。 常常省略 constraint 约束名, 直接用 primary key (列名)

     create table pk5(
        id int(11),
        name varchar(10),
        primary key (id)
       );
    

    有图片。

    三.二 多字段联合主键

    多字段联合主键只能使用 表级别约束条件

    	[constraint 约束名]  primary key (列名1,列名2)
    

    也常常省略 constraint 约束名。

    如 创建学生与课程 的成绩表。 其中,学生编号和课程编号是联合 主键。

     create table pk6(
        stuId int(11),  -- 学生编号
         courseId int(11), -- 课程编号
         score double(5,2),
        primary key (stuId,courseId)
      );
    

    在这里插入图片描述

    三.三 演示主键约束

    用 pk4 表做例子吧。 (关于数据的插入,后面章节会详细讲解)

    1 . 先插入一个编号为 1,名称为两个蝴蝶飞 的记录。

    insert into pk4(id,name) values(1,'两个蝴蝶飞');
    

    有图片。

    2 . 再插入一个编号为1,名称为老蝴蝶的记录。

    insert into pk4(id,name) values(1,'老蝴蝶');
    

    有图片。

    编号 id是重复的,不能重复性插入, 会报错。

    四. 非空约束 not null

    只能指定一个单字段为非空约束,没有联合字段做为非空约束。 可以让多个字段都为非空约束。

    	列名  数据类型  not null [默认值]
    

    四.一 创建非空约束

    活学活用,将前面的主键约束再练习一遍。

      create table n7(
        id int(11) primary key,
        name varchar(20) not null
       );
    


    注意,只有这一种写法。 没有 not null (name) 作为表级别约束条件的, 只能放在列级别约束。

    四.二 演示非空约束

    1 . name有值, 正常插入

    insert into n7(id,name) values(1,'两个蝴蝶飞');
    

    有图片。

    2 . name 没有值 或者插入值为 null

    insert into n7(id) values(2);
    

    有图片。

    insert into n7(id,name) values(2,null);
    

    有图片。

    五. 唯一约束 Unique

    可以为空,MySQL也允许其他的列也可以为null.这一点不像SQL Server 数据库。

    五.一 创建列约束条件的 唯一约束

    命令:

    	列名  数据类型  unique 
    

    创建语句:

    create table u8(
        id int(11) primary key,
        name varchar(20) unique
    );
    

    有图片。

    五.二 创建表约束条件的 唯一约束

    也可以创建表级别的唯一约束

    [constraint 唯一约束名] unique (列名)
    

    创建语句:

    	create table u9(
        	 id int(11) primary key,
       		 name varchar(20),
        	unique (name)
        );
    

    在这里插入图片描述

    五.二 演示唯一约束

    以 u8 表为例。

    1 .先插入一条数据, id为1, name为两个蝴蝶飞

    insert into u8(id,name) values(1,'两个蝴蝶飞');
    

    有图片。

    2 . 再创造一条数据, id为3, name仍然为两个蝴蝶飞。 name 重复了。

    insert into u8(id,name) values(3,'两个蝴蝶飞');
    

    在这里插入图片描述

    3 . 但可以插入一条空的值, 如name 的值插入为 null

    insert into u8(id,name) values(4,null);
    

    有图片。

    但 null的值,可以有多个。 再插入 id为5,名称仍然为null 的。

    insert into u8(id,name) values(5,null);
    

    有图片。

    查询一下: select * from u8;

    有图片。

    说明,唯一约束可以插入多个 null的值,并不是唯一的null值。

    六. 默认约束 default

    命令:

    	列名  数据类型  default 默认值
    

    默认约束是,如果不填入这个属性值,就用默认值代替,如果填入了,哪怕填入的值是空,也用填入的值。

    六.一 创建默认约束

    令 性别默认是 男.

    create table d10(
        id int(11) primary key,
         name varchar(20),
         sex varchar(10) default '男'
       );
    

    在这里插入图片描述

    六.二 演示默认约束

    1 . 插入一条正常的数据, 性别是男。

     insert into d10(id,name,sex) values(1,'两个蝴蝶飞','男');
    

    有图片。

    2 . 插入一条正常的数据,性别是女.

     insert into d10(id,name,sex) values(2,'精灵妹','女');
    

    有图片。

    3 . 插入一条数据,不指定性别。

     insert into d10(id,name) values(3,'老蝴蝶');
    

    有图片。

    4 . 插入一条数据,性别为null 值。

    insert into d10(id,name,sex) values(4,'岳泽霖',null);
    

    在这里插入图片描述

    5 . 查询刚才的数据 select * from d10;

    有图片。

    七 检查约束 check (MySQL数据库被分析,但是会被忽略)

    七.一 MySQL 创建列级别约束 (不起作用)

    命令:

    	列名  数据类型 check (sql表达式)
    

    可以放置值列表, 表示插入的值必须在值列表里面。 也可以放置sql表达式,表示插入的值必须符合sql表达式

    1 . 创建和演示 性别只能是男或者女

    create table d11(
         id int(11) primary key,
         name varchar(20),
         sex varchar(10) check(sex in ('男','女'))
       );
    

    有图片。

    插入性别是男 数据。

    insert into d11(id,name,sex) values(1,'两个蝴蝶飞','男');
    

    有图片

    插入性别是保密的数据

    insert into d11(id,name,sex) values(2,'老蝴蝶','保密');
    

    有图片。

    发现,竟然可以插入, 检查约束并没有起作用。

    去谷歌一下, 里面提到了 MySQL 检查约束不起作用的问题。

    CHECK
    The CHECK clause is parsed but ignored by all storage engines. See Section 1.8.2.3, “Foreign Key Differences”

    但MySQL 可以使用其他的方式来代替, 如enum 枚举类型,或者触发器。 但老蝴蝶这儿不讲解。

    为了系统的连贯性,另外检查约束 check 确实我也不太懂,所以决定用 Oracle 数据库来讲解。 Oracle 数据库支持 检查约束 Check.

    以下的内容,都是用Oracle 进行创建的。 plsql工具。

    七.二 Oracle 创建列级别约束 (起作用)

    1 . 创建和演示性别只能是男或者女

    创建表:

     create table t1(
           id int primary key,
           name varchar2(20),
           sex varchar(10) check(sex in ('男','女')) -- 也可以用  check(sex='男' or sex='女')
         );
    

    插入数据:

    	insert into t1(id,name,sex) values(1,'两个蝴蝶飞','男'); -- 正常插入
         insert into t1(id,name,sex) values(2,'老蝴蝶','保密'); -- 会提示错误
    

    有图片。

    检查约束好使。

    2 . 创建和演示 年龄必须大于18岁 小于60

    创建表:

    create table t2(
               id int primary key,
               name varchar2(20),
               age int check(age>=18 and age<=60)
          );
    

    插入数据:

    	 insert into t2(id,name,age) values(1,'两个蝴蝶飞',20); -- 正常插入
          
          insert into t2(id,name,age) values(2,'岳泽霖',16); -- 会提示错误
          
          insert into t2(id,name,age) values(3,'老蝴蝶',62); --会提示错误
    

    有图片。

    检查约束好使。

    七.三 Oracle 创建表级别约束 (起作用)

    与列级别约束 基本类似 。

    创建表:

     create table t3(
               id int primary key,
               name varchar2(20),
               sex varchar(10),
               check(sex in ('男','女')) -- 也可以用  check(sex='男' or sex='女')
           );
    

    插入数据:

     	  insert into t3(id,name,sex) values(1,'两个蝴蝶飞','男'); -- 正常插入
          insert into t3(id,name,sex) values(2,'老蝴蝶','保密'); -- 会提示错误
    

    年龄的那个类似:

    创建表:

    create table t4(
               id int primary key,
               name varchar2(20),
               age int,
               check(age>=18 and age<=60)
          );
    

    插入数据:

    	 insert into t4(id,name,age) values(1,'两个蝴蝶飞',20); -- 正常插入
          
          insert into t4(id,name,age) values(2,'岳泽霖',16); -- 会提示错误
          
          insert into t4(id,name,age) values(3,'老蝴蝶',62); --会提示错误
    

    八. 自增约束 AUTO_INCREMENT

    自增约束,只能用于整数类型,默认开始值是1,每次增加1,用于数据库生成不重复的主键。(但在高并发环境下,这种方式生成的主键不一定正确)

    	列名  数据类型  AUTO_INCREMENT
    

    八.一 创建自增约束

     create table a12(
         id int(11) primary key auto_increment,
         name varchar(20)
       );
    

    有图片

    八.二 演示自增约束

    1 . 插入第一个数据,不插入id 的值

    insert into a12(name) values('两个蝴蝶飞');
    

    有图片。

    2 . 插入第二个数据,不插入id的值

    insert into a12(name) values('老蝴蝶');
    

    有图片

    3 . 查询数据

    有图片。

    九. 外键约束 Foreign Key

    外键约束不像上面的那些约束,是发生在一个表之间的, 外键约束 Foreign Key 是发生在两个表之间的, 这两个表,一个叫主表(父表), 一个叫从表(子表)。 其中,在子表里面定义外键约束, 引用主表中的主键。 外键可以是一列也可以是多列, 但一般都是一列。 一个表里面可以给多个列都定义外键。 就像 员工的课程成绩表一样, 员工编号是员工表的外键, 课程编号是课程表的外键。 外键是参数完整性, 里面的值可以为null值, 但如果不为null值, 则必须是主表主键的某个值。 注意,子表的外键必须引用的是主表的主键,主表的 unqiue 属性都不行,必须是主键。

    九.一 创建外键约束 Foreign Key

    命令:

    	[constraint 外键约束名] foreign key (列名)  references 主表名(主键列名)
    

    是表级别的约束条件。

    建议是用户自己手动添加外键约束名, constraint 外键约束名 不省略。

    常见的部门和员工表。 即员工表里面的部门编号一定是部门表的主键。

    1 . 创建部门表 dept

    create table dept(
        id int(11) primary key,
        name varchar(20)
        );
    

    有图片。

    2 .创建员工表 user

    create table user(
        id int(11) primary key,
         name varchar(20),
         description varchar(100),
         deptId int(11),
         constraint fk_user_deptId foreign key(deptId) references dept(id)
        );
    

    有图片。

    创建外键成功。

    九.二 外键约束演示

    1 . 先往部门表里面插入两条数据

    insert into dept(id,name) values(1,'信息部'),(2,'开发部');
    

    有图片。

    2 .往user 表里面插入 部门编号为 1的数据, 是正确的数据

     insert into user(id,name,description,deptId) values(1,'两个蝴蝶飞','一个快乐的程序员',1);
    

    有图片。

    3 . 往user 表里面插入部门编号为3的数据。 没有这个部门,是错误的数据。

     insert into user(id,name,description,deptId) values(2,'老蝴蝶','一个快乐的程序员',3);
    

    有图片。

    报外键约束的错误。 子表中插入父表中主键没有的属性值会报错。

    4 . 删除父表中的数据, 即删除父表中 部门编号为1的那条数据

    delete from dept where id=1;
    

    有图片。

    因为父表中的数据在子表中被引用了,所以是无法直接删除的, 可以先将子表中引用的那条数据删除,或者将deptId 更新成null, 再删除父表中的数据才可以。

    update user set deptId=null where id=1;
    
    delete from dept where id=1;
    

    有图片。

    十. 查看表结构

    十.一 describe 表名/desc 表名 查看

    describe user;
    

    有图片。

    也可以用简写的形式 : desc 表名

    desc user;
    

    有图片。

    侧重点是各个列的信息。

    其中:

    1. filed      指的是列名
    2. type     指的是列名的数据类型
    3. null     表示该列是否可以存储null值
    4. key     是否已经编制索引。 PRI 表示主键,UNI 表示 unique 索引的一部分, MUL 表示可允许出现多次
    5. Default      是否有默认值
    6. extra:     该列的附加信息, 如AUTO_INCREMENT

    十.一 show create table 表名 查看

    show create table user\G	
    

    有图片。

    会将创建 table 时的sql 语句打印出来, 还包括引擎和编码格式。

    侧重点是sql 创建语句。

    加\G 不加 \G 都可以, 加\G 可以使显示结果更加直观。



    谢谢!!!
    展开全文
  • 数据库设计三大范式和五大约束

    千次阅读 多人点赞 2020-08-30 11:20:00
    一、三范式: 什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中...

    一、三大范式:

    什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法,以下就是对这三个范式的基本介绍:

    第一范式(1NF):

    1、数据表中的每一列(字段),必须是不可拆分的最小单元,也就是确保每一列的原子性。满足第一范式是关系模式规范化的最低要求,否则,将有很多基本操作在这样的关系模式中实现不了。

     

    如果需求知道那个省那个市并按其分类,那么显然第一个表格是不容易满足需求的,也不符合第一范式。

    2、两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据。

     

    显然第一个表结构不但不能满足足够多物品的要求,还会在物品少时产生冗余。也是不符合第一范式的。

     第二范式(2NF):

    满足1NF后要求表中的所有列,每一行的数据只能与其中一列相关,即一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来。

    一个人同时订几个房间,就会出来一个订单号多条数据,这样子联系人都是重复的,就会造成数据冗余。我们应该把他拆开来。

     

    这样便实现啦一条数据做一件事,不掺杂复杂的关系逻辑。同时对表数据的更新维护也更易操作。

    第三范式(3NF):

    满足2NF后,要求:表中的每一列都要与主键直接相关,而不是间接相关(表中的每一列只能依赖于主键)。

    数据不能存在传递关系,即没个属性都跟主键有直接关系而不是间接关系。像:a-->b-->c  属性之间含有这样的关系,是不符合第三范式的。

    注意事项:

    1.第二范式与第三范式的本质区别:在于有没有分出两张表。

    第二范式是说一张表中包含了多种不同实体的属性,那么必须要分成多张表,第三范式是要求已经分好了多张表的话,一张表中只能有另一张标的ID,而不能有其他任何信息,(其他任何信息,一律用主键在另一张表中查询)。

    2.必须先满足第一范式才能满足第二范式,必须同时满足第一第二范式才能满足第三范式。

    三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。

    二、五大约束:

    数据库中的五大约束包括:

    1.主键约束(Primay Key Coustraint) 唯一性,非空性;

    2.唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个;

    3.默认约束 (Default Counstraint) 该数据的默认值;

    4.外键约束 (Foreign Key Counstraint) 需要建立两表间的关系;

    5.非空约束(Not Null Counstraint):设置非空约束,该字段不能为空。

    五大约束的语法示例:

    1. 添加主键约束

    Alter table 表名 add Constraint 主键名 primary key(字段)

    2.  添加唯一约束

    Alter table 表名 add Constraint 约束名 unique(字段)

    3.  添加默认约束

    Alter table 表名 add Constraint 约束名 default(默认内容) for 字段名

    4.  添加检查约束

    Alter table 表名 add Constraint 约束名 check (字段表达)

    5.  添加外键约束

    Alter table 表名 add Constraint 约束名 foreign key(字段) references 表名(字段名)

    详细介绍:

    (1)[外键约束 (Foreign Key Counstraint) ]

    1.设置外键的注意事项:
      ①:只有INNODB的数据库引擎支持外键,修改my.ini文件设置default-storage-engine=INNODB;
      ②:外键与参照列的数据类型必须相同。(数值型要求长度和无符号都相同,字符串要求类型相同,长度可以不同);
      ③:设置外键的字段必须要有索引,如果没有索引,设置外键时会自动生成一个索引;

    2.设置外键的语法:

    [CONSTRAINT 外键名] FOREIGN KEY(外键字段) REFERENCES 参照表(参照字段)  [ON DELETE SET NULL ON UPDATE CASCADE] -- 设置操作完整。

    3、外键约束的参照操作:
    当对参照表的参照字段进行删除或更新时,外键表中的外键如何应对。
    参照操作可选值:
      RESTRICT: 拒绝对参照字段的删除或修改(默认);
      NO ACTION:与RESTRICT相同,但这个指令只在MySql生效;
      CASCADE:  删除或更新参照表的参照字段时,外键表的记录同步删除或更新;
      SET NULL: 删除删除或更新参照表的参照字段时,外键表的外键设为NULL (此时外键不能设置为NOT NULL)。

    (2)[主键约束](Primay Key Coustraint) 
    1.主键的注意事项:主键默认非空,默认唯一性约束,只有主键可以设置自动增长(主键不一定自增,自增一定是主键)。
    2.设置主键的方式:

      ①:在定义列时设置:id     INT UNSIGNED PRIMARY KEY。
      ②:在列定义完成后设置:PRIMARY KEY(id)。

    展开全文
  • mysql约束

    2020-07-01 17:43:14
    mysql约束 什么是约束?什么是非空约束,唯一约束,默认值约束,检查约束,主键约束,外键约束
  • 数据库设计三范式 1.1第一范式(1NF) 原子性、 数据不可再分。 原地址表 ID StuAddress 1 天津 10080 2 上海 10082 3 杭州 10083 4 深圳 10084 ... ... 调整之后的表 ID ...
  • 为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改、删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效、相容。...
  • 带你走进MySQL数据库(MySQL入门详细总结一)

    千次阅读 多人点赞 2020-04-20 19:49:12
    MySQL数据库的安装:(这里就不细讲了,建议百度)。 MySQL的使用 MySQL的登录: 1.在doc窗口下输入:mysql -uroot -p加密码。(也可以敲回车后输入密码,这样密码不可见)。 2.MySQL服务默认端口号:3306。 3.修改...
  • Mysql数据库&五大常用数据引擎

    千次阅读 2020-02-29 21:08:54
    MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。 MySQL是一种关系型数据库管理系统,关系数据库将...
  • MySQL数据库—SQL汇总

    万次阅读 多人点赞 2019-10-19 12:40:09
    下文整理常见SQL语句的用法,使用MySQL5.7测试,参考了尚硅谷MySQL教程及用例。用例sql: 链接: https://pan.baidu.com/s/1tb3-12MRNFjV8drFlN6wzg&shfl=sharepset 密码: fc2h 为了方便查阅可从右侧目录快速索引...
  • MySQL数据库学习

    万次阅读 多人点赞 2018-08-13 20:41:03
    虽然笔者从事的是Android客户端的开发,平时和数据库打的交道并不多,但是我们对于数据库这一块的学习还是很重要的,今天笔者想总结下MySQL关系型数据库的一些常用知识点 数据库概述 一、常见的概念 数据库...
  • MySql数据库介绍及常用SQL语句(整理)【数据库介绍】1、关系...【MySQL数据库数据类型】【字符串类型】【数值类型】【布尔类型】【日期类型】datetime 和 timestamp 的区别【约束】【主键约束】【唯一约束】【默认...
  • 数据库MySQL详解

    万次阅读 多人点赞 2018-07-24 20:03:47
    全网最详细MySQL教程,2021.1再次更新70%的内容,MySQL 8.0 + Navicat 15
  • 前言 ´・ᴗ・` 约束(constrain) 介绍常用六大约束 外键 foreign key 列级约束与表级约束 彩蛋 总结 ´◡`
  • MySQL 数据库数据库约束及数据表的设计思想

    多人点赞 热门讨论 2021-11-23 16:42:10
    文章目录1. 数据库约束1.1 介绍1.2 约束类型1.3 not null1.4 unique1.5 default1.6 primary key1.7 foreign key... 这样就幅度地提高了数据库中数据的质量,节省了数据库的空间和调用数据的时间。 之前介绍过 My
  • ① SQL 对小写不敏感:如SELECT 与 select 是相同的。 ② SQL语句需要加上分号表示语句结束。 下面从最基本的创建数据库和创建表进行SQL语法的学习。 1.数据库的创建、查看、删除 创建一个新的数据库: create ...
  • 数据库三四 一、三范式 为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,...
  • MySQL数据库入门教程超详细

    千次阅读 多人点赞 2018-04-09 22:23:05
    点击查看MySQL优化文章一、写在前面 黑窗口启动mysql服务: net start mysql 登录:mysql -u root -p 备份数据库: mysqldump -uroot -p1234 store28 &gt; g:/1.sql 建议使用Navicat工具操作MySQL二、SQL语句的...
  • MYSQL数据库原理与应用-个人总结(上)

    千次阅读 多人点赞 2020-12-26 20:18:40
    此复习为个人整理的有关MySql的复习,大量知识点来自老师上课复习、个人总结、以及部分网上资料,以便能够提供给自己复习时的内容。此资料含有大量的执行语句,并且每一条都是自己亲自试验,只得没问题之后才敢放...
  • 数据库中的约束

    千次阅读 2018-06-08 11:21:58
    数据库中的五种约束五大约束1.—-主键约束(Primay Key Coustraint) 唯一性,非空性 2.—-唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个 3.—-检查约束 (Check Counstraint) 对该列数据的范围、...
  • 1、连接数据库 mysql -uroot -p -hlocalhost -P3306 -u 用户名 root 默认的管理员用户 -p 密码 -h 是服务端的ip地址 连接的本地服务 localhost -P 端口号 默认端口3306 连接本地服务可以省略 -h 和 -P,简写成...
  • MySQL数据库增删改查(基础操作命令详解)

    千次阅读 多人点赞 2021-01-26 14:49:01
    文章目录一、MySQL数据库管理(基本命令)(一)、查看数据库结构(二)、创建及删除数据库和表(三)、管理表中的数据记录(四)、修改表名和表结构()、数据表高级操作(六)、数据库用户管理(七)、数据库...
  • MySQL数据库常见面试题

    万次阅读 2019-04-18 19:21:48
    1. 怎么优化数据库的查询? 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 应尽量避免在 where 子句中使用!=或<>操作符。 应尽量避免在 where 子句中对字段进行...
  • 前言100道MySQL数据库经典面试题解析,已经上传github啦https://github.com/whx123/JavaHome/tree/master/Java%E9%9D%A2...
  • MySQL数据库基本知识

    2019-01-18 12:07:33
    1.MySQL数据库 ###01数据库概念 * A: 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。 * B: 什么...
  • 文章目录SQL SQL SQL是一种结构化查询语言,是一种所以关系型数据库都支持的语言...SQL语句主要分为三类 DQL:数据查询语言 DML:数据操作语言 DDL:数据定义语言 熟练掌握crud(增删改查)是使用数据库的基础 ...
  • mysql数据库入门教程

    千次阅读 2019-05-15 00:50:25
    Markdown database notebook Markdown database notebook 1.1. Mysql知识/基础 1.1.1. Msyql的基本知识 1.2. Mysql知识/深入 1.2.1. Mysql的储存引擎 ...1.3.1. MySQL数据库的安装和运行(实践) 1.3.2....
  • MySQL 面试题

    万次阅读 多人点赞 2019-09-02 16:03:33
    MySQL 面试题 MySQL 涉及的内容非常非常非常多,所以面试题也容易写的杂乱。当年,我们记着几个一定要掌握的重心: 重点的题目添加了【重点】前缀。 索引。 锁。 事务和隔离级别。 因为 MySQL 还会有部分内容和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,327
精华内容 12,130
关键字:

mysql数据库五大约束

mysql 订阅