MySQL创建表和约束条件(四)下

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL创建表和约束条件(四)

七 检查约束 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 ('男','女'))
   );


20191115141700860.png


插入性别是男 数据。


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


20191115141710130.png


插入性别是保密的数据


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


20191115141715896.png


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

去谷歌一下, 里面提到了 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,'老蝴蝶','保密'); -- 会提示错误


20191115141726126.png


检查约束好使。


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); --会提示错误


20191115141726126 (1).png


检查约束好使。


七.三 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)
   );


20191115141802142.png


八.二 演示自增约束


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


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


20191115141806462.png


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


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


20191115141820164.png


3 . 查询数据


20191115141825839.png


九. 外键约束 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)
    );


20191115141834451.png


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)
    );


20191115141841818.png


创建外键成功。


九.二 外键约束演示


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


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


20191115141849962.png


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


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


20191115141855538.png


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


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


20191115141901872.png


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


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


delete from dept where id=1;


20191115141907423.png


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


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


20191115141914252.png


十. 查看表结构


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


describe user;


20191115141920988.png


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


desc user;


20191115141925117.png


侧重点是各个列的信息。


其中:


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  


20191115141932666.png


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


侧重点是sql 创建语句。


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


谢谢!!!

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
2月前
|
存储 安全 关系型数据库
MySQL数据库约束条件概述及其重要性讨论。
正确地实现并管理好各类紧缩条件将直接影响到企业信息管理水平与服务质量,在当今大数据背景下更显得格外重要;任何设计师都需要深刻理解其原理与运作机晰承担起责任使得所托管资料安全稳固同时又具备良好伸缩灵活度迎合日益复杂商务需求变动.
105 11
|
关系型数据库 MySQL 数据库
mysql 里创建表并插入数据
【10月更文挑战第5天】
679 1
|
11月前
|
NoSQL 关系型数据库 MySQL
2024Mysql And Redis基础与进阶操作系列(4-2)作者——LJS[含MySQL非空、唯一性、PRIMARY KEY、自增列/自增约束举例说明等详解步骤及常见报错问题对应的解决方法]
24MySQL非空、唯一性、PRIMARY KEY、自增列/自增约束举例说明等详解步骤及常见报错问题对应的解决方法(4-2) 学不会你来砍我!!!
|
关系型数据库 MySQL
MYSQL-多表操作-外键约束
MYSQL-多表操作-外键约束
|
关系型数据库 MySQL
MYSQL:约束(主键约束)
MYSQL:约束(主键约束)
|
10月前
|
存储 SQL 关系型数据库
【MySQL基础篇】MySQL约束语法
文章介绍了MySQL中表的约束概念,包括非空、唯一、主键、默认和外键约束,以及如何在创建和修改表时指定这些约束。外键约束用于保持数据的一致性和完整性,文章通过示例展示了添加、删除外键的语法,并讨论了不同的删除/更新行为,如CASCADE和SETNULL。
【MySQL基础篇】MySQL约束语法
|
11月前
|
关系型数据库 MySQL 数据处理
MySQL函数与约束
MySQL 提供了丰富的函数和强大的约束机制,用于数据处理和完整性维护。通过掌握这些工具,可以有效地管理和分析数据库中的数据,确保数据的一致性和准确性。无论是在日常数据查询中使用内置函数,还是在数据库设计中应用各种约束,都是确保数据库系统稳定、高效运行的关键。希望本文对您理解和应用 MySQL 函数与约束有所帮助。
136 1
|
10月前
|
存储 关系型数据库 MySQL
MySQL(条件约束)
为了校验数据,让数据的正确性能够得到保证,约束,能够引进更多的检查操作,但是也会增加系统的成本开销
|
Ubuntu 关系型数据库 MySQL
ubuntu使用aliyun源+mysql删除有外键约束的数据+查看特定目录的大小
ubuntu使用aliyun源+mysql删除有外键约束的数据+查看特定目录的大小
167 4
|
SQL 关系型数据库 MySQL
MySQL中外键的使用及外键约束策略
这篇文章讨论了MySQL中使用外键的重要性,包括外键的概念、不使用外键可能导致的问题、如何设置外键约束以及不同的外键约束策略(如CASCADE和SET NULL),并通过示例演示了这些概念。
MySQL中外键的使用及外键约束策略

推荐镜像

更多