MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

2つのテーブルがMySQLFOREIGNKEYに接続されている場合、データの整合性が子テーブルで維持されているとどのように言えますか?


実際、外部キーは参照整合性を強制し、データの整合性と整合性を自動的に維持するのに役立ちます。これは、「customer」と「orders」という名前の2つのテーブルの例で理解できます。ここで、「customer」は親テーブルであり、「orders」は子テーブルです。存在しないお客様の注文はできません。次のように両方のテーブルに値を挿入することで実証できます-

mysql> Select * from Customer;
+----+--------+
| id | name   |
+----+--------+
| 1  | Gaurav |
| 2  | Raman  |
| 3  | Harshit|
| 4  | Aarav  |
+----+--------+
4 rows in set (0.00 sec)
mysql> Select * from orders;
+-----------+-------------+------+
| order_id  | product     | id   |
+-----------+-------------+------+
| 100       | Notebook    | 1    |
| 110       | Pen         | 1    |
| 120       | Book        | 2    |
| 130       | Charts      | 2    |
+-----------+-------------+------+
4 rows in set (0.00 sec)

ここで、存在しない顧客(ID 10が「customer」テーブルに存在しない)の「orders」テーブルに値を挿入しようとすると、外部キー制約の失敗により、MySQLが次のようなエラーをスローするとします。 。

mysql> insert into orders values(400, 'Notebook',10);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`query`.`orders`, CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`id`) REFERENCES `customer` (`id`))

  1. テーブルの動的データを使用するMySQLストアド関数を作成するにはどうすればよいですか?

    MySQL Stored関数はテーブルを参照できますが、結果セットを返すステートメントを利用することはできません。したがって、結果セットを返すSELECTクエリはないと言えます。しかし、それを取り除くためにSELECTINTOを持つことができます。たとえば、次のレコードを持つ「Student_marks」という名前のテーブルの動的データを使用して、マークの平均を計算する関数「Avg_marks」を作成しています。 mysql> Select * from Student_marks; +-------+------+---------+---------+---------+ | Nam

  2. MySQLテーブルの最大IDに関連付けられたデータを取得するにはどうすればよいですか?

    最初にDESCで注文し、次に最大IDに関連付けられた値をフェッチします- select *from yourTableName order by yourColumnName DESC LIMIT 1,1; まずテーブルを作成しましょう- mysql> create table DemoTable    -> (    -> Alldata int    -> ); Query OK, 0 rows affected (0.63 sec) 挿入コマンド-を使用して、テーブルにいくつかのレコードを挿入します