특정 열의 저장 공간이 null 값이 될 수 없도록 지정
create table student (id int not null,name varchar(20)); Query OK, 0 rows affected (0.01 sec) mysql> desc student; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | | NULL | | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec)
특정 열이 고유한 값을 가져야 함을 보장하세요. 중복된 값을 삽입하면 오류가 발생합니다. Reported
열에 값을 할당할 때 기본값
create table student(id int,name varchar(20) default '匿名');
기본 키 제약 조건은 Not Null과 고유의 조합으로, 열에 값을 할당할 수 없도록 지정됩니다. null이며 고유합니다
auto_increment 자동 증가 기능:
1. 테이블 레코드에 값이 없으면 1
2부터 자동 증가가 시작됩니다. 데이터가 있으면 이전부터 자동 증가합니다. 기록 다운
3. 데이터를 삽입한 후 삭제하면 자동 증가된 값은 재사용되지 않고 삭제된 값부터 시작됩니다. 자동 증가
create table student (id int primary key auto_increment,name varchar(20)); Query OK, 0 rows affected (0.01 sec) mysql> desc student; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+----------------+ 2 rows in set (0.00 sec) mysql> insert into student values(null,'张三'); Query OK, 1 row affected (0.00 sec) mysql> select * from student; +----+--------+ | id | name | +----+--------+ | 1 | 张三 | +----+--------+ 1 row in set (0.00 sec)
외래 키 제약 조건, 테이블 1의 데이터 테이블 2에 있어야 합니다. 무결성 기준을 참조하세요.
외래 키 제약 조건은 두 테이블의 두 열 사이의 관계를 설명합니다. "종속성"
외래 키 제약 조건은 테이블 삭제에 영향을 미칩니다. 다음 인스턴스는 연결되어 있어서 쉽게 삭제가 되지 않습니다
mysql> create table class ( -> id int primary key, -> name varchar(20) not null -> ); Query OK, 0 rows affected (0.04 sec) mysql> create table student ( -> id int primary key, -> name varchar(20) not null, -> email varchar(20) default 'unknow', -> QQ varchar(20) unique, -> classId int , foreign key (classId) references class(id) -> ); Query OK, 0 rows affected (0.03 sec) mysql> desc class; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(20) | NO | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.02 sec) mysql> desc student; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(20) | NO | | NULL | | | email | varchar(20) | YES | | unknow | | | QQ | varchar(20) | YES | UNI | NULL | | | classId | int(11) | YES | MUL | NULL | | +---------+-------------+------+-----+---------+-------+ 5 rows in set (0.00 sec)
조건을 지정하고 조건에 따라 값을 결정하세요
하지만 mysql은
create table test_user ( id int, name varchar(20), sex varchar(1), check (sex ='男' or sex='女') );
One을 지원하지 않습니다. 1대1 설계 테이블은 학생 테이블과 계정 테이블과 같습니다. 하나의 계정은 하나의 학생에 해당하며, 하나의 학생은 하나의 계정만 가집니다
표현 방법
1. 이 두 엔터티는 하나의 테이블로 표현될 수 있습니다
2. 두 개의 테이블로 표현될 수 있으며, 그 중 하나에는 다른 테이블의 ID가 포함됩니다.
학생은 a에 있어야 합니다. 수업에서 수업에는 여러 학생이 포함될 수 있습니다.
표현 방법:
1 . 클래스 테이블에서 이 클래스의 학생 ID를 나타내는 새 열을 추가합니다(mysql에는 배열 유형이 없으며 redis는 가능함)
2. 클래스 테이블에서 classId의 새 열은 변경되지 않습니다.
다대다 설계 테이블은 학생 테이블 및 강좌 일정과 같습니다. 한 학생이 여러 코스를 선택할 수도 있고, 하나의 코스를 여러 학생이 선택할 수도 있습니다.
표현 방법:
연관 테이블을 사용하여 두 엔터티 간의 관계를 나타냅니다.
다대다 테이블 생성 인스턴스
-- 学生表 mysql> create table test_student ( -> id int primary key, -> name varchar(10) default 'unknow' -> ); Query OK, 0 rows affected (0.03 sec) -- 选课表 mysql> create table test_course ( -> id int primary key, -> name varchar(20) default 'unknow' -> ); Query OK, 0 rows affected (0.02 sec) -- 成绩表 mysql> create table test_score ( -> studentId int, -> courseId int, -> score int, -> foreign key (studentId) references test_student(id), -> foreign key (courseId) references test_course(id) -> ); Query OK, 0 rows affected (0.02 sec) mysql> desc test_student; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(10) | YES | | unknow | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec) mysql> desc test_coures; ERROR 1146 (42S02): Table 'java_5_27.test_coures' doesn't exist mysql> desc test_course; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(20) | YES | | unknow | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec) mysql> desc test_score; +-----------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+---------+------+-----+---------+-------+ | studentId | int(11) | YES | MUL | NULL | | | courseId | int(11) | YES | MUL | NULL | | | score | int(11) | YES | | NULL | | +-----------+---------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
다대다를 달성하려면 인스턴스에 데이터를 삽입하세요
mysql> insert into test_student values (1, 'listen'); Query OK, 1 row affected (0.01 sec) mysql> insert into test_course values (1, '数学'); Query OK, 1 row affected (0.00 sec) mysql> insert into test_student values (2, 'Faker'); Query OK, 1 row affected (0.00 sec) mysql> insert into test_course values (2, '数学'); Query OK, 1 row affected (0.00 sec) mysql> insert into test_score values(1, 1, 90); Query OK, 1 row affected (0.00 sec) mysql> insert into test_score values (1, 2, 99); Query OK, 1 row affected (0.00 sec) mysql> insert into test_score values (2, 1, 50); Query OK, 1 row affected (0.00 sec) mysql> insert into test_score values (2, 2, 60); Query OK, 1 row affected (0.00 sec) mysql> select * from test_student; +----+--------+ | id | name | +----+--------+ | 1 | listen | | 2 | Faker | +----+--------+ 2 rows in set (0.00 sec) mysql> select * from test_course; +----+--------+ | id | name | +----+--------+ | 1 | 数学 | | 2 | 语文 | +----+--------+ 2 rows in set (0.00 sec) mysql> select * from test_score; +-----------+----------+-------+ | studentId | courseId | score | +-----------+----------+-------+ | 1 | 1 | 90 | | 1 | 2 | 99 | | 2 | 1 | 50 | | 2 | 2 | 60 | +-----------+----------+-------+ 4 rows in set (0.00 sec)
위 내용은 MySQL 데이터베이스 제약조건 분석 및 테이블 디자인 예시의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!