-- mysql 表的约束
--
-- 1 主键约束 PRIMARY KEY(主键都会自带索引)
-- 关系型数据库要求一个表只有一个主键
-- 3 非空约束 NOT NULL
-- 4 外键约束 foreign key referenc 要求使用外键的表,必须是InnDB存储引擎
USE AAA;
-- 根据一个表 克隆一个表,没有数据,但是结构一样
CREATE TABLE TTT LIKE TEACHER;
-- 存储引擎 目前两种最常用 MYISAM 速度快,INNODB(默认)事务 外键。
CREATE TABLE T1(
TID INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
TNAME VARCHAR(20)
)ENGINE=MYISAM AUTO_INCREMENT=1 DEFAULT CHARSET=UTF8;
-- 复合主键 是一个主键 必须tid和tname有一个不同。相同则不行因为是一个主键
CREATE TABLE T2(
TID INT UNSIGNED NOT NULL AUTO_INCREMENT,
TNAME VARCHAR(20),
PRIMARY KEY(TID,TNAME)
)ENGINE=MYISAM AUTO_INCREMENT=1 DEFAULT CHARSET=UTF8;
-- 2 默认约束 DEFAULT
CREATE TABLE T3(
TID INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
TNAME VARCHAR(30) NOT NULL,
TAGE TINYINT UNSIGNED DEFAULT 18 -- 默认年龄
)ENGINE=MYISAM AUTO_INCREMENT=1 DEFAULT CHARSET=UTF8;
INSERT INTO T3 VALUES(NULL,'张老师','20');
INSERT INTO T3(TNAME) VALUES('李老师');
SELECT * FROM T3;
-- 3 非空约束 NOT NULL
-- 4 外键约束 foreign key referenc 要求使用外键的表,必须是InnDB存储
USE AAA;
DROP TABLE teacher,stu;
-- 演示外键使用
CREATE TABLE teacher(
TID INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
TNAME VARCHAR(30) NOT NULL,
KEY(TNAME) -- 建立表的时候,同时在tname列上建立索引
)ENGINE=INNODB AUTO_INCREMENT=1 CHARSET=UTF8;
insert INTO teacher VALUES(NULL,'张老师'),(NULL,'李老师'),(NULL,'王老师');
SELECT * FROM student;
CREATE TABLE student(
SID INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
SNAME VARCHAR(30) NOT NULL,
TID INT UNSIGNED,
CONSTRAINT FK FOREIGN KEY(TID) REFERENCES teacher(TID) ON DELETE CASCADE -- 级联删除
)ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=UTF8;
-- CONSTRAINT FK FOREIGN KEY(TID) REFERENCES TEACHER(TID) -- 创建外键 关联到teacher表
-- 级联删除 与想要删除的字段有关的全部删除 但是不能删除表
-- CONSTRAINT FK FOREIGN KEY(TID) REFERENCES teacher(TID) ON DELETE CASCADE
-- 删除之后 自动设置成null
-- CONSTRAINT FK FOREIGN KEY(TID) REFERENCES teacher(TID) ON DELETE SET NULL
DELETE FROM teacher WHERE TID =2;
DELETE FROM student WHERE SID = 2;
INSERT INTO student VALUES(NULL,'张三',1),(NULL,'李四',2),
(NULL,'张三疯',1),(NULL,'赵六',1);
--
-- 1 主键约束 PRIMARY KEY(主键都会自带索引)
-- 关系型数据库要求一个表只有一个主键
-- 3 非空约束 NOT NULL
-- 4 外键约束 foreign key referenc 要求使用外键的表,必须是InnDB存储引擎
USE AAA;
-- 根据一个表 克隆一个表,没有数据,但是结构一样
CREATE TABLE TTT LIKE TEACHER;
-- 存储引擎 目前两种最常用 MYISAM 速度快,INNODB(默认)事务 外键。
CREATE TABLE T1(
TID INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
TNAME VARCHAR(20)
)ENGINE=MYISAM AUTO_INCREMENT=1 DEFAULT CHARSET=UTF8;
-- 复合主键 是一个主键 必须tid和tname有一个不同。相同则不行因为是一个主键
CREATE TABLE T2(
TID INT UNSIGNED NOT NULL AUTO_INCREMENT,
TNAME VARCHAR(20),
PRIMARY KEY(TID,TNAME)
)ENGINE=MYISAM AUTO_INCREMENT=1 DEFAULT CHARSET=UTF8;
-- 2 默认约束 DEFAULT
CREATE TABLE T3(
TID INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
TNAME VARCHAR(30) NOT NULL,
TAGE TINYINT UNSIGNED DEFAULT 18 -- 默认年龄
)ENGINE=MYISAM AUTO_INCREMENT=1 DEFAULT CHARSET=UTF8;
INSERT INTO T3 VALUES(NULL,'张老师','20');
INSERT INTO T3(TNAME) VALUES('李老师');
SELECT * FROM T3;
-- 3 非空约束 NOT NULL
-- 4 外键约束 foreign key referenc 要求使用外键的表,必须是InnDB存储
USE AAA;
DROP TABLE teacher,stu;
-- 演示外键使用
CREATE TABLE teacher(
TID INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
TNAME VARCHAR(30) NOT NULL,
KEY(TNAME) -- 建立表的时候,同时在tname列上建立索引
)ENGINE=INNODB AUTO_INCREMENT=1 CHARSET=UTF8;
insert INTO teacher VALUES(NULL,'张老师'),(NULL,'李老师'),(NULL,'王老师');
SELECT * FROM student;
CREATE TABLE student(
SID INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
SNAME VARCHAR(30) NOT NULL,
TID INT UNSIGNED,
CONSTRAINT FK FOREIGN KEY(TID) REFERENCES teacher(TID) ON DELETE CASCADE -- 级联删除
)ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=UTF8;
-- CONSTRAINT FK FOREIGN KEY(TID) REFERENCES TEACHER(TID) -- 创建外键 关联到teacher表
-- 级联删除 与想要删除的字段有关的全部删除 但是不能删除表
-- CONSTRAINT FK FOREIGN KEY(TID) REFERENCES teacher(TID) ON DELETE CASCADE
-- 删除之后 自动设置成null
-- CONSTRAINT FK FOREIGN KEY(TID) REFERENCES teacher(TID) ON DELETE SET NULL
DELETE FROM teacher WHERE TID =2;
DELETE FROM student WHERE SID = 2;
INSERT INTO student VALUES(NULL,'张三',1),(NULL,'李四',2),
(NULL,'张三疯',1),(NULL,'赵六',1);