mysql主键,外键,非空,唯一,默认约束及创建表的方法

yizhihongxing

MySQL是一种非常流行的关系型数据库,主键、外键、非空、唯一和默认值是MySQL中常用的约束,以保证数据的准确性和完整性。下面将对这些约束及创建表的方法进行详细讲解。

MySQL主键

在MySQL中,主键是一种用于唯一标识表中每一条记录的字段或一组字段。每一张表都必须有一个主键,主键可以是单个字段或多个字段的组合。主键的值必须唯一,不允许为空。我们一般可以使用PRIMARY KEY来创建主键,例如下面的SQL语句:

CREATE TABLE student (
   id INT NOT NULL,
   name VARCHAR(20),
   age INT,
   PRIMARY KEY (id)
);

以上示例中,我们定义了一个名为“student”的表,其中id字段是主键,可以标识该表中的每一条记录。

MySQL外键

在MySQL中,外键是用于建立两张表之间关联的一种机制。外键表示一个表中的字段,该字段的值是另一张表中特定字段的值。外键可以用来保证表之间的数据一致性,避免数据冗余。我们可以使用FOREIGN KEY来定义一个外键。

例如,在student表中,我们可以定义一个外键来关联class表中的class_id字段:

CREATE TABLE class (
   class_id INT NOT NULL,
   class_name VARCHAR(30),
   PRIMARY KEY (class_id)
);

CREATE TABLE student (
   id INT NOT NULL,
   name VARCHAR(20),
   age INT,
   class_id INT NOT NULL,
   PRIMARY KEY (id),
   FOREIGN KEY (class_id) REFERENCES class(class_id)
);

以上示例中,我们定义了一个名为“class”的表和一个名为“student”的表,其中在student表中有一个外键class_id,它引用了class表中的主键class_id

MySQL非空约束

在MySQL中,非空约束指定某个字段值必须填写,不允许为空。我们可以在创建表时使用NOT NULL来添加非空约束。

例如,在创建student表时,我们可以对name字段添加非空约束:

CREATE TABLE student (
   id INT NOT NULL,
   name VARCHAR(20) NOT NULL,
   age INT,
   PRIMARY KEY (id)
);

以上示例中,我们定义了一个名为“student”的表,其中name字段添加了非空约束。

MySQL唯一约束

在MySQL中,唯一约束用于确保某个字段中的值在表中是唯一的。我们可以在创建表时使用UNIQUE来添加唯一约束。

例如,我们可以在创建student表时,对name字段添加唯一约束:

CREATE TABLE student (
   id INT NOT NULL,
   name VARCHAR(20) UNIQUE,
   age INT,
   PRIMARY KEY (id)
);

以上示例中,我们定义了一个名为“student”的表,其中name字段添加了唯一约束。

MySQL默认约束

在MySQL中,默认约束是指当插入新记录时,如果该字段没有填写值,就会默认使用一个预设的值。我们可以在创建表时使用DEFAULT来添加默认约束。

例如,在创建student表时,我们可以对age字段添加默认约束:

CREATE TABLE student (
   id INT NOT NULL,
   name VARCHAR(20),
   age INT DEFAULT 18,
   PRIMARY KEY (id)
);

以上示例中,我们定义了一个名为“student”的表,其中age字段添加了默认约束,默认值为18。

MySQL创建表的方法

在MySQL中,创建表可以使用CREATE TABLE语句。使用该语句时,必须指定表名,以及每个字段的名称、数据类型、约束等信息。

例如,以下是一个创建一个名为“user”的表的示例:

CREATE TABLE user (
   id INT NOT NULL,
   name VARCHAR(20) NOT NULL,
   age INT DEFAULT 18,
   PRIMARY KEY (id),
   UNIQUE (name)
);

以上示例中,我们定义了一个名为“user”的表,其中包含了idnameage三个字段,其中id字段为主键,name字段添加了非空和唯一约束,age字段添加了默认约束。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:mysql主键,外键,非空,唯一,默认约束及创建表的方法 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • mysql启动报错MySQL server PID file could not be found

    MySQL是一种常用的关系型数据库管理系统,为网站和应用程序提供数据存储和管理功能。在启动MySQL时,有时会遇到MySQL server PID file could not be found的错误,导致MySQL无法正常启动。下面是一份详细的攻略来解决这个问题。 问题原因 MySQL server PID file could not be found的…

    database 2023年5月18日
    00
  • MySQL两种表存储结构MyISAM和InnoDB的性能比较测试

    下面是“MySQL两种表存储结构MyISAM和InnoDB的性能比较测试”的完整攻略: 前置条件 在进行性能比较测试前,需要准备以下环境和工具: MySQL数据库,版本为5.6或以上。 MyISAM和InnoDB两种表存储结构的支持。 Linux或Windows服务器环境。 压力测试工具,如Apache JMeter、Siege等。 步骤一:创建测试表 在M…

    database 2023年5月22日
    00
  • 对PHP新手的一些建议(PHP学习经验总结)

    对PHP新手的一些建议(PHP学习经验总结) 确定学习的目标 学习任何一门语言都需要确定一个明确的目标。PHP的应用范围非常广泛,比如网站开发、后台开发、数据处理等等,因此你需要明确自己想要在什么领域应用PHP。例如,如果你想成为一名网站开发工程师,那么你需要学习PHP基本语法和一些常用的PHP框架,以及对网站的设计和实现有一定的了解。 学习PHP基础知识 …

    database 2023年5月18日
    00
  • 命令行启动mssqlserver服务的方法示例

    下面是详细讲解“命令行启动mssqlserver服务的方法示例”的完整攻略: 命令行启动mssqlserver服务的方法示例 简介 MSSQL Server是一款广泛使用的关系型数据库管理系统,MSSQL Server的服务启动方式有多种,其中通过命令行启动服务是一种常见的方式。 步骤 打开命令行终端 通常可以通过在Windows系统中按下“Win+R”快捷…

    database 2023年5月22日
    00
  • 为什么Mysql 数据库表中有索引还是查询慢

    为什么MySQL数据库表中有索引还是查询慢? MySQL是一种关系型数据库管理系统,为了提高查询性能,我们通常会在表中建立索引。但是,在某些情况下,即使有索引,还是会出现查询慢的问题。本文将探讨这些情况,并提供解决方案。 原因一:使用了错误的索引在MySQL中,我们可以为表的列创建不同类型的索引,如B+树索引、哈希索引等。但是并不是所有类型的索引都适合特定的…

    database 2023年5月22日
    00
  • MySQL 之 索引原理与慢查询优化

    1. 索引介绍 需求:   一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重。说起加速查询,就不得不提到索引了。 索引:    简单的说,相当于图书的目录,可以帮助用户快速的找到需要的内容.    在MySQL中也…

    MySQL 2023年4月13日
    00
  • PostgreSQL 实现快速删除一个用户

    PostgreSQL 是一种开源的关系数据库管理系统,其具有广泛的应用场景和丰富的功能。当我们需要删除一个用户时,可以采取以下操作步骤: 使用超级用户登录到 PostgreSQL 数据库。 sql sudo -u postgres psql 切换到要删除用户的所在数据库,例如 userdb。 sql \c userdb 撤销该用户所有权限。 sql REVO…

    database 2023年5月18日
    00
  • Python操作Redis的5种数据类型

    1.连接redis(两种方式) # decode_responses=True: 解决获取的值类型是bytes字节问题 r = redis.Redis(host=’localhost’, port=’6379′, db=0, decode_responses=True)    pool = redis.ConnectionPool(host=’localho…

    Redis 2023年4月12日
    00
合作推广
合作推广
分享本页
返回顶部