mysql建表約束
mysql的約束主要有主鍵約束,外鍵約束,唯一約束,非空約束,默認約束;
主鍵約束
它能夠唯一確定一張表中的一條記錄.也就是我們通過給某個字段添加約束,就使得該字段不重複且不爲空;
mysql> create table texts(
-> id int primary key,
-> name varchar(20));
–>聯合主鍵
聯合主鍵中的每個字段都不能爲空,並且加起來不能和已設置的聯合主鍵重複。
CREATE TABLE user (
id INT,
name VARCHAR(20),
password VARCHAR(20),
PRIMARY KEY(id, name)
);
–>自增約束
自增約束的主鍵由系統自動遞增分配。
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20)
);
# 如果忘記設置主鍵,還可以通過SQL語句設置(兩種方式):
ALTER TABLE user ADD PRIMARY KEY(id);
ALTER TABLE user MODIFY id INT PRIMARY KEY;
#刪除主鍵
ALTER TABLE user drop PRIMARY KEY;
唯一約束
-- 建表時創建唯一主鍵
CREATE TABLE user (
id INT,
name VARCHAR(20),
UNIQUE(name)
);
-- 添加唯一主鍵
-- 如果建表時沒有設置唯一建,還可以通過SQL語句設置(兩種方式):
ALTER TABLE user ADD UNIQUE(name);
ALTER TABLE user MODIFY name VARCHAR(20) UNIQUE;
-- 刪除唯一主鍵
ALTER TABLE user DROP INDEX name;
非空約束
就是修飾的字段不能爲空 null;
-- 建表時添加非空約束
-- 約束某個字段不能爲空
CREATE TABLE user (
id INT,
name VARCHAR(20) NOT NULL
);
-- 移除非空約束
ALTER TABLE user MODIFY name VARCHAR(20);
默認約束
就是當我們插入字段的時候,如果沒有傳值,就會使用默認值;
-- 建表時添加默認約束
-- 約束某個字段的默認值
CREATE TABLE user2 (
id INT,
name VARCHAR(20),
age INT DEFAULT 10
);
-- 移除非空約束
ALTER TABLE user MODIFY age INT;
外鍵約束
涉及到兩個表 :父表,子表;
-- 班級
CREATE TABLE classes (
id INT PRIMARY KEY,
name VARCHAR(20)
);
-- 學生表
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(20),
-- 這裏的 class_id 要和 classes 中的 id 字段相關聯
class_id INT,
-- 表示 class_id 的值必須來自於 classes 中的 id 字段值
FOREIGN KEY(class_id) REFERENCES classes(id)
);
-- 1. 主表(父表)classes 中沒有的數據值,在副表(子