Mysql整合性制約
34853 ワード
一、制約条件
制約条件は、データ型の幅と同様にオプションです.
役割:データの整合性と一貫性を保証するために、主に次のように分けられます.
説明:
二、not nullとdefault
空にできるかどうか、nullは空を表し、文字列not null-空にできないnull-空にできる
「≪デフォルト|Defaults|Essbase_Studio≫」列の作成時にデフォルト値を指定できます.データの挿入時にプロアクティブに設定しない場合、デフォルト値が自動的に追加されます.
三、unique(一意)
連合は唯一で、単一の記録は繰り返すことができて、複数の記録は繰り返すことができなくて、例えばIPは繰り返すことができて、ポートも繰り返すことができて、しかしいっしょに繰り返すことができなくて、
四、primary key
primary keyフィールドの値は空ではなく一意です
1つのテーブルで次のことができます.
単一列をプライマリ・キーとし、複数列をプライマリ・キーとする(複合プライマリ・キー)
ただし、1つのテーブルにプライマリ・キーprimary keyは1つしかありません.
ここはすべての空白だけではなくて、みんなはきっとnot null+uniqueを考えて、実はprimary keyはこの2つの方法の結合です
複数列のプライマリ・キー
五、auto_increment
コンストレイントフィールドは自動的に増加します.コンストレイントされたフィールドはkeyコンストレイントされる必要があります.
ステップの表示
六、foreign key外部キー
foreign keyの迅速な理解
従業員情報テーブルには、工番氏名部門の3つのフィールドがあります.
会社には3つの部門がありますが、1億人の従業員がいます.それは、部門というフィールドを繰り返し保存する必要があることを意味します.部門の名前が長ければ長いほど、浪費されます.
解決方法:
部門表を完全に定義できます
次に、従業員情報テーブルにテーブルを関連付ける方法、すなわちforeign key
2どのように2枚の表の間の関係を探し出します
転載先:https://www.cnblogs.com/mjiu/p/9132350.html
制約条件は、データ型の幅と同様にオプションです.
役割:データの整合性と一貫性を保証するために、主に次のように分けられます.
PRIMARY KEY (PK) ,
FOREIGN KEY (FK)
NOT NULL
UNIQUE KEY (UK)
AUTO_INCREMENT ( , )
DEFAULT
UNSIGNED
ZEROFILL 0
説明:
1. , NULL, NOT NULL, ,
2. , NULL, ,
sex enum('male','female') not null default 'male'
age int unsigned NOT NULL default 20 ( ) 20
3. key
primary key
foreign key
(index,unique...)
二、not nullとdefault
空にできるかどうか、nullは空を表し、文字列not null-空にできないnull-空にできる
「≪デフォルト|Defaults|Essbase_Studio≫」列の作成時にデフォルト値を指定できます.データの挿入時にプロアクティブに設定しない場合、デフォルト値が自動的に追加されます.
create table t1 (
id int not null default 2 ,
num int not null
);
MariaDB [task]> desc t4
-> ;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | NO | | 2 | |
| num | int(11) | NO | | NULL | |
+-------+---------+------+-----+---------+-------+
==================default====================
# id , id null not null, , default
三、unique(一意)
============ UNIQUE===============
create table t5 (
id int ,
name varchar(50) unique #
);
MariaDB [task]> create table t6 (
-> id int,
-> name varchar(50),
-> constraint test_name unique(name) , , , ( )
-> );
MariaDB [task]> insert into t5 values (1,' ');
Query OK, 1 row affected (0.00 sec)
MariaDB [task]> insert into t5 values (1,' ');
ERROR 1062 (23000): Duplicate entry ' ' for key 'name'
MariaDB [task]>
連合は唯一で、単一の記録は繰り返すことができて、複数の記録は繰り返すことができなくて、例えばIPは繰り返すことができて、ポートも繰り返すことができて、しかしいっしょに繰り返すことができなくて、
create table service(
id int primary key auto_increment,
name varchar(20),
host varchar(15) not null,
port int not null,
unique(host,port) #
);
MariaDB [task]> desc service ;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | NULL | |
| host | varchar(15) | NO | MUL | NULL | |
| port | int(11) | NO | | NULL | |
四、primary key
primary keyフィールドの値は空ではなく一意です
1つのテーブルで次のことができます.
単一列をプライマリ・キーとし、複数列をプライマリ・キーとする(複合プライマリ・キー)
ただし、1つのテーブルにプライマリ・キーprimary keyは1つしかありません.
ここはすべての空白だけではなくて、みんなはきっとnot null+uniqueを考えて、実はprimary keyはこの2つの方法の結合です
、
MariaDB [task]> create table t7 (
id int primary key, # primary key not null unique
name varchar(50) not null
);
Query OK, 0 rows affected (0.00 sec)
MariaDB [task]> desc t7;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(50) | NO | | NULL | |
+-------+-------------+------+-----+---------+-------+
、
create table t8(
id int,
name varchar(20),
comment varchar(100),
constraint pk_name primary key(id); # pk_name
複数列のプライマリ・キー
MariaDB [task]> create table t8 (
-> ip varchar(15),
-> port char(5),
-> service_name varchar(10) not null ,
-> primary key(ip,port) # IP , , IP+ 。
-> );
Query OK, 0 rows affected (0.01 sec)
MariaDB [task]>
MariaDB [task]> desc t8 ;
+--------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| ip | varchar(15) | NO | PRI | | |
| port | char(5) | NO | PRI | | |
| service_name | varchar(10) | NO | | NULL | |
+--------------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
MariaDB [task]> insert into t8 values
-> ('127.0.0.1','80','httpd'),
-> ('127.0.0.2','80','apache')
-> ;
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
MariaDB [task]> insert into t8 values
-> ('127.0.0.1','80','httpd');
ERROR 1062 (23000): Duplicate entry '127.0.0.1-80' for key 'PRIMARY'
MariaDB [task]>
五、auto_increment
コンストレイントフィールドは自動的に増加します.コンストレイントされたフィールドはkeyコンストレイントされる必要があります.
MariaDB [task]> insert into t8 values
-> ('127.0.0.1','80','httpd');
ERROR 1062 (23000): Duplicate entry '127.0.0.1-80' for key 'PRIMARY'
MariaDB [task]> create table t9 (
-> id int primary key auto_increment,
-> name varchar(10)
-> );
MariaDB [task]> insert into t9(name) values
-> ('xiaojiu') ;
MariaDB [task]> insert into t9(name) values
-> ('xiao') ;
MariaDB [task]> select *from t9 ;
+----+---------+
| id | name |
+----+---------+
| 1 | xiaojiu |
| 2 | xiao |
+----+---------+
ステップの表示
MariaDB [(none)]> show variables like 'auto_incre%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
+--------------------------+-------+
#
sqlserver:
create table t1(
id int。。。
)engine=innodb,auto_increment=2 =2 default charset=utf8
mysql :
show session variables like 'auto_inc%';
#
set session auth_increment_increment=2 #
#
set global auth_increment_increment=2 # ( )
#!!! !!!
If the value of auto_increment_offset is greater than that of auto_increment_increment, the value of auto_increment_offset is ignored.
: auto_increment_offset auto_increment_increment , auto_increment_offset
: auto_increment_offset=3,auto_increment_increment=2
六、foreign key外部キー
foreign keyの迅速な理解
従業員情報テーブルには、工番氏名部門の3つのフィールドがあります.
会社には3つの部門がありますが、1億人の従業員がいます.それは、部門というフィールドを繰り返し保存する必要があることを意味します.部門の名前が長ければ長いほど、浪費されます.
解決方法:
部門表を完全に定義できます
次に、従業員情報テーブルにテーブルを関連付ける方法、すなわちforeign key
# innodb , , references ,
create table t11 ( #
id int primary key ,
name varchar(50) not null
);
create table t12(
id int primary key,
name varchar(10),
t10_id int,
constraint t11_name foreign key(t10_id) #
references t12(id) #
on delete cascade # ,
on update cascade # ,
)engine=innodb; # innodb
insert into t11 values
(1,' '),
(2,' '),
(3,' ');
insert into t12 values
(1,'hha',1),
(2,'hehe',2),
(3,'gaga',2)
;
2どのように2枚の表の間の関係を探し出します
:
#1、
, , foreign key ( id)
#2、
, , foreign key ( id)
#3、 :
# :
1 ,
2 ,
#
1 2 , , ,
# :
1 2 , , 。 , foreign key , unique
転載先:https://www.cnblogs.com/mjiu/p/9132350.html