目次
约束定义
常见的约束
not null
unique
primary key
foreign key
check

Mysql中约束详解

Jun 07, 2016 pm 02:50 PM
mysql 意味 データ 制約 テーブルの中で 詳しい説明

约束定义 约束是用来限定表中数据准确性、完整性、一致性、联动性的一套规则。在Mysql中,约束保存在information_schema数据库的table_constraints中,可以通过该表查询约束信息。如下图: 常见的约束 not null not null为非空约束,指定某一行的值不能为nul

约束定义

约束是用来限定表中数据准确性、完整性、一致性、联动性的一套规则。在Mysql中,约束保存在information_schema数据库的table_constraints中,可以通过该表查询约束信息。如下图:
这里写图片描述

常见的约束

not null

not null为非空约束,指定某一行的值不能为null。
我在t2表中添加了一列id3,设置varchar类型,not null约束。当执行插入INSERT INTO t2 (id1,id2) VALUES(1,2); 操作的时候,出现了警告,但是插入数据成功。
这里写图片描述
很显示,没有达到我们预期的效果,不是说varchar/char/test等默认的是null吗?既然我没有赋值,针对默认的值,应该插入不成功啊?但是查看数据如下:
这里写图片描述
于是我想,那么我将id3设置为一个null试试,结果如下图,很显然Mysql对Not NULL 约束,是建立在判断插入语句里面赋的值是不是null。如果限制为not null的列在插入语句没有赋值null,则允许插入,否则禁止插入。(如果默认值NULL,且该列没出现在插入语句,则会产生一个警告信息,但是仍然能插入Okey)
这里写图片描述
备注:所有的类型的值都可以是null,包括int、float、dateTime等数据类型 空字符串(”)是不等于null,0也不等于null 。

unique

unique代表唯一约束。唯一约束是指定table的列或列组合不能重复,保证数据的唯一性。虽然唯一约束不允许出现重复的值,但是可以为多个null,同一个表可以有多个唯一约束,多个列组合的约束。在创建唯一约束的时候,如果不给唯一约束名称,就默认和列名相同。 MySQL会给唯一约束的列上默认创建一个唯一索引;
添加约束
ALTER TABLE t2 ADD CONSTRAINT uq_id2_id3 UNIQUE(id2,id3) ;
可以看到Mysql会自动添加一个唯一索引。
这里写图片描述
有没有感觉,觉得唯一索引和唯一约束貌似就是一种东东。其实,两者还是有区别的。首先从大的概念来说,索引是一个树用来快速搜索的,约束是一个逻辑限制。唯一约束是通过唯一索引实现的,换句说,唯一索引是实现唯一约束的基础。所以,会发生这种情况:建唯一约束,会自动建唯一索引,但建唯一索引,不会自动创建唯一约束。但创建了唯一索引,会产生和唯一约束相同的效果,即不能插入重复值(但唯一索引和唯一约束允许出现多个空值),否则会报错。
当建立唯一索引后,表的结果图下图
这里写图片描述
连续执行INSERT INTO t2 (id1,id2,id3) VALUES(1,3,NULL); 插入成功。说明对于,当为空值时候,唯一索引是不进行判断唯一性的。
这里写图片描述

primary key

主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值;如果的多列组合的主键约束, 那么这些列都不允许为空值,并且组合的值不允许重复。 每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别上创建。
MySQL的主键名总是PRIMARY, 当创建主键约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。

foreign key

外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系。 也就是说从表的外键值必须在主表中能找到或者为空。 当主表的记录被从表参照时,主表的记录将不允许删除,如果要删除数据,需要先删除从表中依赖该记录的数据, 然后才可以删除主表的数据。还有一种就是级联删除子表数据。
注意:外键约束的参照列,在主表中引用的只能是主键或唯一键约束的列,假定引用的主表列不是唯一的记录, 那么从表引用的数据就不确定记录的位置。同一个表可以有多个外键约束。

check

check约束针对Mysql数据库来说,没有起作用。通过检索网上信息,说check约束,仅仅是一个摆设而已,好吧,期待新版本添加此功能。
创建表t3

<code class=" hljs sql"><span class="hljs-operator"><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> <span class="hljs-string">`t3`</span> (
  <span class="hljs-string">`id1`</span> <span class="hljs-keyword">INT</span>(<span class="hljs-number">11</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-keyword">NULL</span> <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'0'</span>,
  <span class="hljs-string">`id2`</span> <span class="hljs-keyword">INT</span>(<span class="hljs-number">3</span>) UNSIGNED  ZEROFILL  <span class="hljs-keyword">DEFAULT</span> <span class="hljs-string">'0'</span>,
   <span class="hljs-keyword">CHECK</span>(id1><span class="hljs-number">3</span>)
) ENGINE=MYISAM <span class="hljs-keyword">DEFAULT</span> CHARSET=utf8</span></code>
ログイン後にコピー

这里写图片描述
执行INSERT INTO t3 VALUES(1,3);,发现其确实没有起到作用。
这里写图片描述

备注:以上信息主要是参考以下博文。在此感谢博主的分享。
http://blog.csdn.net/kqygww/article/details/8882990。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MySQL:簡単な学習のためのシンプルな概念 MySQL:簡単な学習のためのシンプルな概念 Apr 10, 2025 am 09:29 AM

MySQLは、オープンソースのリレーショナルデータベース管理システムです。 1)データベースとテーブルの作成:createdatabaseおよびcreateTableコマンドを使用します。 2)基本操作:挿入、更新、削除、選択。 3)高度な操作:参加、サブクエリ、トランザクション処理。 4)デバッグスキル:構文、データ型、およびアクセス許可を確認します。 5)最適化の提案:インデックスを使用し、選択*を避け、トランザクションを使用します。

phpmyadminを開く方法 phpmyadminを開く方法 Apr 10, 2025 pm 10:51 PM

次の手順でphpmyadminを開くことができます。1。ウェブサイトコントロールパネルにログインします。 2。phpmyadminアイコンを見つけてクリックします。 3。MySQL資格情報を入力します。 4.「ログイン」をクリックします。

Navicatプレミアムの作成方法 Navicatプレミアムの作成方法 Apr 09, 2025 am 07:09 AM

NAVICATプレミアムを使用してデータベースを作成します。データベースサーバーに接続し、接続パラメーターを入力します。サーバーを右クリックして、[データベースの作成]を選択します。新しいデータベースの名前と指定された文字セットと照合を入力します。新しいデータベースに接続し、オブジェクトブラウザにテーブルを作成します。テーブルを右クリックして、データを挿入してデータを挿入します。

MySQL:世界で最も人気のあるデータベースの紹介 MySQL:世界で最も人気のあるデータベースの紹介 Apr 12, 2025 am 12:18 AM

MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

NavicatでMySQLへの新しい接続を作成する方法 NavicatでMySQLへの新しい接続を作成する方法 Apr 09, 2025 am 07:21 AM

手順に従って、NAVICATで新しいMySQL接続を作成できます。アプリケーションを開き、新しい接続(CTRL N)を選択します。接続タイプとして「mysql」を選択します。ホスト名/IPアドレス、ポート、ユーザー名、およびパスワードを入力します。 (オプション)Advanced Optionsを構成します。接続を保存して、接続名を入力します。

なぜMySQLを使用するのですか?利点と利点 なぜMySQLを使用するのですか?利点と利点 Apr 12, 2025 am 12:17 AM

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

単一のスレッドレディスの使用方法 単一のスレッドレディスの使用方法 Apr 10, 2025 pm 07:12 PM

Redisは、単一のスレッドアーキテクチャを使用して、高性能、シンプルさ、一貫性を提供します。 I/Oマルチプレックス、イベントループ、ノンブロッキングI/O、共有メモリを使用して同時性を向上させますが、並行性の制限、単一の障害、および書き込み集約型のワークロードには適していません。

SQLが行を削除した後にデータを回復する方法 SQLが行を削除した後にデータを回復する方法 Apr 09, 2025 pm 12:21 PM

データベースから直接削除された行を直接回復することは、バックアップまたはトランザクションロールバックメカニズムがない限り、通常不可能です。キーポイント:トランザクションロールバック:トランザクションがデータの回復にコミットする前にロールバックを実行します。バックアップ:データベースの定期的なバックアップを使用して、データをすばやく復元できます。データベーススナップショット:データベースの読み取り専用コピーを作成し、データが誤って削除された後にデータを復元できます。削除ステートメントを使用して注意してください:誤って削除されないように条件を慎重に確認してください。 WHERE句を使用します:削除するデータを明示的に指定します。テスト環境を使用:削除操作を実行する前にテストします。

See all articles