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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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数据库。


20191114134534725.png


查询所具有的表 show tables;


20191115140927178.png


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


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


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

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


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


 create table t2(
    name varchar(10)
   );


20191115140937837.png


一.三 创建一个复杂的表 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)
   );


20191115140944432.png


一.四 展示所有的表


用 show tables; 命令进行展示


20191115140950470.png


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


一.五 创建表时常见错误


1 . 表名已经存在, 会报 表已经存在的错误


20191115140959452.png


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


20191115141005383.png


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


20191115141011396.png


要想 用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)
    );


20191115141024597.png


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


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


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


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


20191115141029168.png


三.二 多字段联合主键


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


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


也常常省略 constraint 约束名。


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


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


20191115141043357.png


三.三 演示主键约束


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


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


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


20191115141050275.png


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


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


20191115141102598.png


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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
SQL 关系型数据库 MySQL
Mysql基础第二十四天,创建表和操纵表
Mysql基础第二十四天,创建表和操纵表
34 0
Mysql基础第二十四天,创建表和操纵表
|
1月前
|
存储 关系型数据库 MySQL
【MySQL】6. 表的约束
【MySQL】6. 表的约束
19 0
|
4月前
|
关系型数据库 MySQL 数据库
MySQL数据库——约束
MySQL数据库——约束
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL 数据库】2、MySQL 的数据控制语言、函数和约束
【MySQL 数据库】2、MySQL 的数据控制语言、函数和约束
33 0
|
1月前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
|
1月前
|
存储 关系型数据库 MySQL
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
|
5天前
|
SQL 关系型数据库 MySQL
MySQL数据库的约束+进阶版新增与查询-2
MySQL数据库的约束+进阶版新增与查询
12 1
|
5天前
|
关系型数据库 MySQL 测试技术
MySQL数据库的约束+进阶版新增与查询-1
MySQL数据库的约束+进阶版新增与查询
15 1
|
15天前
|
关系型数据库 MySQL 数据库
【MySQL】:约束全解析
【MySQL】:约束全解析
24 0
|
16天前
|
NoSQL 关系型数据库 MySQL
【MySQL探索之旅】MySQL数据表的增删查改——约束
【MySQL探索之旅】MySQL数据表的增删查改——约束