# общие ограничения
/*
Значение: ограничение, используемое для ограничения данных в таблице, чтобы обеспечить точность и надежность данных в таблице.
Классификация: шесть основных ограничений.
NOT NULL: непустое, используется для обеспечения того, чтобы значение поля не могло быть пустым,
например имя, номер учащегося и т. д.
DEFAULT: по умолчанию, используется для обеспечения того, чтобы поле имело значение по умолчанию,
например пол
ПЕРВИЧНЫЙ КЛЮЧ: первичный ключ, используемый для обеспечения уникальности значения поля и не пустого значения,
например, номер студента, номер сотрудника и т. д
. УНИКАЛЬНЫЙ: уникальный, используется для обеспечения уникальности значения поля. , может быть пустым,
например номер места.
CHECK: проверка ограничения [не поддерживается в mysql]
, например возраст, пол.
FOREIGN KEY: внешний ключ, используемый для ограничения связи между двумя таблицами, используемый для обеспечения того, чтобы значение этого поля было обязательным. берутся из значения связанного столбца основной таблицы. Добавьте ограничение внешнего ключа
к подчиненной таблице, используемое для ссылки на столбец в основной таблице. Значение,
например, профессиональный номер таблицы студентов, номер отдела таблица сотрудников и номер типа работы таблицы сотрудников
Когда добавлять ограничения:
1. При создании таблицы.
2. При изменении таблицы.
Категории добавления ограничений:
ограничения на уровне столбца:
все шесть ограничений синтаксически поддерживаются, но ограничения внешнего ключа не имеют эффекта. Ограничения
уровня таблицы:
за исключением ненулевых значений по умолчанию, поддерживаются и другие.
Первичный ключ и сравнение уникальных значений:
Гарантированная уникальность Разрешается ли быть пустым Сколько может быть в таблице Разрешено ли объединение
первичных ключей √ × Максимум 1 √,
уникальность не рекомендуется √ √ Может быть несколько √, но не рекомендуется
Внешний ключ:
1. Требуется в подчиненной таблице. Установите связь внешнего ключа.
2. Тип столбца внешнего ключа вторичной таблицы соответствует или совместим с типом связанного столбца основной таблицы, и имя не требуется. 3
. Связанный столбец основной таблицы должен быть ключом (обычно первичным ключом или уникальным)
4. При вставке данных сначала вставьте основную таблицу, а затем вставьте подчиненную таблицу.
При удалении данных сначала удалите подчиненную таблицу, а затем удалить главную таблицу
*/
CREATE TABLE имя таблицы (
имя поля, тип поля, ограничения на уровне столбца,
тип поля имени поля,
ограничения на уровне таблицы
)
СОЗДАНИЕ БАЗЫ ДАННЫХ, студенты
№ 1. Добавьте ограничения при создании таблицы.
# 1. Добавить ограничения на уровне столбца
/*
Синтаксис:
Просто добавьте тип ограничения непосредственно после имени и типа поля.
Поддерживаются только: по умолчанию, ненулевой, первичный ключ, уникальный.
*/
ИСПОЛЬЗОВАТЬ студентов;
DROP TABLE stuinfo;
CREATE TABLE stuinfo(
id INT PRIMARY KEY, #primary key --- ограничение — номер студента
stuName VARCHAR(20) NOT NULL UNIQUE, #непустой
пол CHAR(1) CHECK(gender='male ' ИЛИ гендер = 'женский'), #check ------на самом деле, место INT UNIQUE не поддерживается в mysql
, #уникальный
возраст INT DEFAULT 18, #ограничение по умолчанию
majorId INT REFERENCES major(id)#foreign key- --- --На самом деле, столбцы ограничений не поддерживаются в MySQL
);
CREATE TABLE major(
id INT PRIMARY KEY,
majorName VARCHAR(20)
);
#Просмотр всех индексов в stuinfo, включая первичный ключ, внешний ключ, уникальный
SHOW INDEX FROM stuinfo;
№ 2. Добавьте ограничения на уровне таблицы
/*
Синтаксис: Внизу каждого поля
[имя ограничения ограничения] тип ограничения (имя поля) --- [имя ограничения ограничения] означает, что его можно опустить. Если имени нет, будет имя по умолчанию, то есть имя поля по умолчанию*
/
УДАЛИТЕ ТАБЛИЦУ, ЕСЛИ СУЩЕСТВУЕТ stuinfo;
CREATE TABLE stuinfo(
id INT,
имя stuVARCHAR(20),
пол CHAR(1),
место INT,
возраст INT,
majorid INT,
CONSTRAINT pk PRIMARY KEY(id), #primary key --- первичный ключ имя фиксировано Да, изменение имени не будет иметь никакого эффекта.
CONSTRAINT uq UNIQUE(seat), #unique key
CONSTRAINT ck CHECK(gender = 'male' OR пол = 'female'), #check ------ фактически,
CONSTRAINT не поддерживается в mysql fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)#foreign key
);
ПОКАЗАТЬ ИНДЕКС ИЗ stuinfo;
#Общий способ написания:★
СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ stuinfo(
id INT PRIMARY KEY,
имя stuVARCHAR(20),
пол CHAR(1),
возраст INT DEFAULT 18,
место INT UNIQUE,
majorid INT,
CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)#外键
);
№ 2. Добавляйте ограничения при изменении таблицы
/*
1. Добавить ограничения на уровне столбца
изменить имя таблицы изменить имя поля столбца тип поля новое ограничение;
2. Добавьте ограничения на уровне таблицы.
Измените имя таблицы. Добавьте [имя ограничения ограничения] Тип ограничения (имя поля) [ссылка на внешний ключ];
*/
DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(
id INT, stunname
VARCHAR(20),
пол CHAR(1),
место INT,
возраст INT,
majorid INT
)
DESC stuinfo;
# 1. Добавить ненулевое ограничение
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL;
# 2. Добавить ограничения по умолчанию
ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;
# 3. Добавить первичный ключ
#① Ограничения на уровне
столбца ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;
#②Table- ограничения уровня
ALTER TABLE stuinfo ADD PRIMARY KEY(id);
№ 4. Добавьте уникальность
#①Ограничения уровня столбца
ALTER TABLE stuinfo MODIFY COLUMN Seat INT UNIQUE
#②Ограничения уровня таблицы
ALTER TABLE stuinfo ADD UNIQUE(seat);
#5. Изменение таблицы
ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id);
№ 3. Удалить ограничения при изменении таблицы
# 1. Удалить ненулевое ограничение
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;
# 2. Удалить ограничение по умолчанию
ALTER TABLE stuinfo MODIFY COLUMN age INT ;
# 3. Удалить первичный ключ
ALTER TABLE stuinfo DROP PRIMARY KEY;
# 4. Удалить единственное
место ALTER TABLE stuinfo DROP INDEX;
# 5. Удалить внешний ключ
ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;
ПОКАЗАТЬ ИНДЕКС ИЗ stuinfo;