データベースデータ制約


1ユーザー操作テーブルのデータを制約するデータ制約とは何ですか2デフォルト値:ユーザーがデフォルト値を使用するフィールドに値を挿入しない場合、デフォルト値を使用します.注:1)デフォルト値フィールドにnullを挿入できます.2)デフォルト値フィールドにnull以外を挿入できる
-- 1.1    
CREATE TABLE student( id INT, NAME VARCHAR(20), address VARCHAR(20) DEFAULT '    ' --     ) DROP TABLE student;
--            ,mysql           
INSERT INTO student(id,NAME) VALUES(1,'  ');

--   :         null
INSERT INTO student(id,NAME,address) VALUE(2,'  ',NULL);
INSERT INTO student(id,NAME,address) VALUE(3,'  ','    ');

3非空の役割:制限フィールドに値を付ける必要があります注意:1)非空の文字に値を付ける必要があります2)非空の文字にnullを割り当てることはできません
-- 1.2   
--   : gender      (  null)
CREATE TABLE student( id INT, NAME VARCHAR(20), gender VARCHAR(2) NOT NULL --    ) --          INSERT INTO student(id,NAME) VALUES(1,'  ');
--         null
INSERT INTO student(id,NAME,gender) VALUES(1,'  ',NULL);

4一意の役割:フィールドの値に注意を繰り返すことはできません:1)一意のフィールドはnullを挿入できます2)一意のフィールドは複数のnullを挿入できます
-- 1.3   
CREATE TABLE student( id INT UNIQUE, --    NAME VARCHAR(20) ) INSERT INTO student(id,NAME) VALUES(1,'zs');
INSERT INTO student(id,NAME) VALUES(1,'lisi'); -- ERROR 1062 (23000): Duplicate entry '1' for key 'id'

INSERT INTO student(id,NAME) VALUES(2,'lisi');

5プライマリ・キーの役割:空でない+一意の注意:1)通常、テーブルごとにプライマリ・キー・フィールドが設定されます.テーブル内の各レコードの一意性をマークします.2)テーブルのビジネス意味を含むフィールドをプライマリ・キーとして選択しないことを推奨し、各テーブルにビジネス意味以外のidフィールドを独立して設計することを推奨します.
-- 1.4   (  +  )
DROP TABLE student;

CREATE TABLE student( id INT PRIMARY KEY, --    NAME VARCHAR(20) ) INSERT INTO student(id,NAME) VALUES(1,'  ');
INSERT INTO student(id,NAME) VALUES(2,'  ');
-- INSERT INTO student(id,NAME) VALUES(1,'  '); --       : Duplicate entry '1' for key 'PRIMARY'

-- insert into student(name) value('  '); --       : ERROR 1048 (23000): Column 'id' cannot be null

6自己成長:自動増加
-- 1.5    
CREATE TABLE student( id INT(4) ZEROFILL PRIMARY KEY AUTO_INCREMENT, --    , 0   ZEROFILL     NAME VARCHAR(20) ) --           ,     INSERT INTO student(NAME) VALUES('  ');
INSERT INTO student(NAME) VALUES('  ');
INSERT INTO student(NAME) VALUES('  ');

SELECT * FROM student;
--          
DELETE FROM student;
--          
TRUNCATE TABLE student;

7外部キーの作用:2種類の表のデータを制約して2種類の表の情況が現れます:データの冗長性の高い問題を解決します:独立して1枚の表を出します例えば:従業員の表と部門の表の問題が現れます:従業員の表のデータを挿入する時、従業員の表の部門IDのフィールドは勝手に挿入することができます!外部キー制約の使用:制約従業員テーブルの部門IDフィールド値を挿入する解決方法:従業員テーブルの部門IDフィールドに外部キー制約を追加する
--    (  )
CREATE TABLE dept( id INT PRIMARY KEY, deptName VARCHAR(20) ) --      (  /  ) CREATE TABLE employee( id INT PRIMARY KEY, empName VARCHAR(20), deptId INT,--          ID --          CONSTRAINT emlyee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id) --            (    ) )

注意:1)拘束されたテーブルをサブテーブル,拘束されたテーブルをメインテーブル,外部キーをサブテーブルにセットする!!!2)プライマリ・テーブルの参照フィールドは、プライマリ・キーとして一般的に使用されます.3)追加データ:メインテーブルを追加してから、サブテーブルを追加する4)修正データ:サブテーブルを修正してから、メインテーブルを修正する5)削除データ:サブテーブルを削除してから、メインテーブルを削除する
-- 1.6     
--    
CREATE TABLE employee( id INT PRIMARY KEY, empName VARCHAR(20), deptName VARCHAR(20) --      ) INSERT INTO employee VALUES(1,'  ','     ');
INSERT INTO employee VALUES(2,'  ','     ');
INSERT INTO employee VALUES(3,'  ','     ');

SELECT * FROM employee;

--     ,          
INSERT INTO employee VALUES(4,'  ','     ');

--           :              
--          
CREATE TABLE dept( id INT PRIMARY KEY, deptName VARCHAR(20) ) DROP TABLE employee;

--      
CREATE TABLE employee( id INT PRIMARY KEY, empName VARCHAR(20), deptId INT,--          ID --          CONSTRAINT emlyee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE -- ON CASCADE UPDATE :    --           (    ) ) INSERT INTO dept(id,deptName) VALUES(1,'     ');
INSERT INTO dept(id,deptName) VALUES(2,'     ');
INSERT INTO dept(id,deptName) VALUES(3,'   ');

INSERT INTO employee VALUES(1,'  ',1);
INSERT INTO employee VALUES(2,'  ',1);
INSERT INTO employee VALUES(3,'  ',2);
INSERT INTO employee VALUES(4,'  ',3);

--   :          ,               
INSERT INTO employee VALUES(5,'  ',4); --       : Cannot add or update a child row: a foreign key constraint fails (`day16`.`employee`, CONSTRAINT `emlyee_dept_fk` FOREIGN KEY (`deptId`) REFERENCES `dept` (`id`))

-- 1)       ,       :      ,       
-- 2)       ,       :      ,       
-- 3)       ,       :      ,       
--     (        )
UPDATE dept SET id=4 WHERE id=3;
--       
UPDATE employee SET deptId=2 WHERE id=4;

--     
DELETE FROM dept WHERE id=2;

--       
DELETE FROM employee WHERE deptId=2;

SELECT * FROM dept;
SELECT * FROM employee;

8カスケード操作の問題:プライマリ・テーブルを変更または削除するには、外部キー制約がある場合は、サブテーブル内のすべての関連データを変更または削除する必要があります.ただし、プライマリ・テーブル・データを直接変更または削除して、セカンダリ・テーブル・データに影響を与えることを望んでいます.カスケード操作で実装できます!!!カスケード修正:ON UPDATE CASCADEカスケード削除:ON DELETE CASCADE
CREATE TABLE employee( id INT PRIMARY KEY, empName VARCHAR(20), deptId INT,--          ID --          CONSTRAINT emlyee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE -- ON CASCADE UPDATE :    --            (    ) )   :                --     (  ) --        UPDATE dept SET id=5 WHERE id=4;

--     
--        
DELETE FROM dept WHERE id=1;