MySQL中6种常见的约束:主键约束(primary key)、外键约束(foreign key)、非空约束(not null)、唯一性约束(unique)、默认值约束(defualt)、自增约束(aoto_increment),下面是添加、删除这几种约束的一些方法。
--我已经建了数据库; 1 -- 添加约束
1 2 -- 1、建表时添加约束: 2 3 CREATE TABLE goodstest ( 3 4 GID INT(10) NOT NULL AUTO_INCREMENT, 4 5 GNAME VARCHAR(20) NOT NULL, 5 6 GPRICE FLOAT NOT NULL, 6 7 GNUM INT(10) NOT NULL, 7 8 PRIMARY KEY (GID), 8 9 UNIQUE KEY (GNAME), 910 FOREIGN KEY (col_name) REFERENCES tab_name(col_name) 1011 ); 1112 1213 1314 -- 2、通过ALTER语句添加约束 1415 -- 主键约束 1516 -- 语法:ALTER TABLE tab_name ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (key_part,...) [index_option] 1617 ALTER TABLE goodstest ADD PRIMARY KEY(GID); 1718 -- 语法:ALTER TABLE tab_name MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]/* 可以更改列定义但不能更改其名称,在不重命名列定义的情况下更改列定义比CHANGE更方便。*/ 1819 -- 通过修改列定义添加或者添加主键,修改约束一般是先删掉原有的后重新添加 1920 ALTER TABLE goodstest MODIFY GID INT(10) PRIMARY KEY; 2021 -- 语法:ALTER TABLE tab_name CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRET | AFTER col_name] /*原始定义中存在但未为新定义指定的属性不会继续使用。即以新定义为准*/ 2122 ALTER TABLE goodstest CHANGE GID GID INT(10) PRIMARY KEY;/* 当不需要重命名时两个相同的列名是必要的*/ 2223 2324 2425 -- 唯一性约束 2526 -- 语法:ALTER TABLE tab_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type] (key_part,...) [index_option] ... 2627 ALTER TABLE goodstest ADD CONSTRAINT GNAME_UNI UNIQUE KEY(GNAME);/*如果没有用CONSTRAINT设置约束名 系统会自动生成*/ 2728 -- 同理可用MODIFY COLUMN及CHANGE COLUMN方法添加 2829 -- 外键约束 2930 -- 语法:ALTER TABLE tab_name ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (col_name,...) reference_definition 3031 ALTER TABLE gsales ADD FOREIGN KEY(GID) REFERENCES goods(GID); 3132 3233 -- 默认约束 3334 -- 语法:AlTER TABLE goodstest ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}/*删除以及设置*/ 3435 3536 3637 -- 非空约束以及自增约束:在定义时设置,或者通过MODIFY COLUMN 和 CHANGGE COLUMN设置及删除 3738 -- 一张表只能有一个自增长列,并且该列必须定义了约束(可以是主键约束,也可以是唯一约束,也可以是外键约束,但是不可以是非空和检查约束) 3839 3940 4041 -- 删除约束 4142 4243 -- 语法:ALTER TABLE tab_name DROP PRIMARY KEY;/*主键是唯一的就这样就行了*/ 4344 -- 语法:ALTER TABLE tab_name DROP [INDEX | KEY] index_name /*删除唯一性约束*/ 4445 -- 语法:ALTER TABLE tab_name DROP FOREIGN KEY fk_name/*删除外键约束*/
参考:https://dev.mysql.com/doc/refman/8.0/en/alter-table.html
参考:https://blog.csdn.net/a909301740/article/details/62887992