ALTER TABLE 表名 操作集锦
add --> 增加列
modify —> 修改列名和列类型
ALTER TABLE stu
MODIFY sid int;
change ----> 修改列名
DROP —> 删除列 或者 主键
RENAME TO —> 修改表名
主键自增长
关键字 AUTO_INCREMENT 约束 主键是整型
一定重复不了
内部有计数的东西。
不建议使用 建议是由uuid 做主键
唯一约束 非空约束
关键字
unique notnull 非空和唯一型
主键不用加
因为主键本身就有非空性,唯一性和被引用性。
外键的指定
foreign key (属性名) reference 另一个表(参照的列);
一对一关系
从表的主键就是外键。
多对多关系
引入中间表
两张表都是主表
得专门创建一个主表
这里引入一个问题
#修改一下列得类型
ALTER TABLE stu
MODIFY sid int;
#创建中间表实现多对多得关系 关联表
CREATE TABLE STU_TEA(
SID INT,
TID INT,
CONSTRAINT FK_STU FOREIGN KEY(SID) REFERENCES stu(SID),
CONSTRAINT fk_teacher FOREIGN KEY(tid) REFERENCES teacher(tid)
);
DROP TABLE STU_TEA;
INSERT INTO stu VALUES(1,'ZM');
INSERT INTO stu VALUES(2,'WF');
INSERT INTO stu VALUES(3,'SDZ');
INSERT INTO stu VALUES(4,'LTY');
INSERT INTO stu VALUES(5,'LK');
INSERT INTO TEACHER VALUES (1,'贾老师');
INSERT INTO teacher VALUES (2,'李老师');
INSERT INTO teacher VALUES (3,'张老师');
SELECT * FROM stu;
INSERT INTO stu_tea VALUES(1,1);
INSERT INTO stu_tea VALUES(2,1);
INSERT INTO stu_tea VALUES(3,1);
INSERT INTO stu_tea VALUES(4,1);
INSERT INTO stu_tea VALUES(5,1);
SELECT * FROM stu_tea;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mN3SIx6j-1635865062499)(C:\Users\张猛\AppData\Roaming\Typora\typora-user-images\image-20211102220401987.png)]
MySQL创建外键时报Can’t create table (errno: 150)错误解决办法
**第一种情况,很简单,就是列的类型不匹配,**比如用int类型的列去关联varchar的列:
最后一种情况则是,找不到外键引用的列。列在增加外键的时候,可能已经存在数据了(历史数据,或者更新数据库表时设置的默认值),但这些数据并不一定能在外键关联表中找到对应的行记录。这种情况也会导致外键创建失败。