SQL 约束:
NOT NULL约束 - 确保列不能有NULL值
默认值约束 default - 提供未指定时为列的值时的默认值
唯一值约束 unique - 确保了在一列中的所有的值是唯一的
主键 primary key - 唯一标识数据库表中的每一行/记录
外键 foreign key - 唯一标识任何其他数据库表中的行/记录
检查约束 check - CHECK约束可以确保列中的所有值满足一定的条件
索引 index - 使用非常快速地创建和检索数据库中的数据。
sql唯一值约束
添加约束格式:alter table add constraint 约束名称 约束类型(unique,primary key 等)(column ,可以多个)
表已经存在,修改id为唯一约束
alter table manager modify id int(10) not null unique;
或者:
alter table manager add constraint cmm unique(id,name);
删除:
alter table manager drop contraint cmm;
如果上面sql删除失败,使用以下(我自己操作是把id也设为唯一约束了,表结构里cmm变成了索引,就以删除索引方式删除掉,只有name设置为唯一约束时,以上sql执行ok;网上说,mysql应该使用以下的):
alter table manager drop index cmm;
主键约束
新建:create table manager ( id int(10),name(20),primary key(id,name));
修改:ALTER TABLE manager add PRIMARY KEY(id); ALTER TABLE manager add CONSTRAINT mana PRIMARY KEY (id,name);
删除:alter table manager drop primary key;
主键设计:1.不允许null;2.不允许重复;3.不能是其他表的外键;4.表包含应用于自身的 PRIMARY XML 索引
外键约束
CREATE TABLE manager (id INT(10),NAME varchar(20), sex INT(10),address VARCHAR(20) );
CREATE TABLE staff ( id INT(20),NAME varchar(20),sex INT(10), manaid INT(10) REFERENCES manager(id) )
修改:
ALTER TABLE staff ADD FOREIGN KEY(manaid) REFERENCES manager(id);
新建或者修改失败原因:两个字段的类型长度约束不一致等
检查约束
CREATE TABLE staff1 (id INT(10),sex INT (2) NOT NULL ,CHECK (sex<=2))
ALTER TABLE staff ADD CHECK (sex<=1);
alter table staff drop check;
索引
ALTER TABLE manager ADD INDEX INX_SCH (sex) USING BTREE;
备注:建议在需要搜索的字段加索引;更新有索引的表会比较慢,索引本身也需更新