<p>1.普通索引。</p><p/><p>这是最基本的索引,它没有任何限制。它有以下几种创建方式:</p><p/><p>(1)创建索引:create index indexname on tablename(tablecolumns(length));如果是char,varchar类型,length可以小于字段实际长度;如果是blob 和 text 类型,必须指定length,下同。</p><p/><p>(2)修改表结构:alter tablename add index [indexname] on (tablecolumns(length)) </p><p/><p>(3)创建表的时候直接指定:create table tablename ( [...], index [indexname] (tablecolumns(length)) ;</p><p/><p>2.唯一索引。</p><p/><p>它与前面的"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:</p><p/><p>(1)创建索引:create unique index indexname on tablename(tablecolumns(length))</p><p/><p>(2)修改表结构:alter tablename add unique [indexname] on (tablecolumns(length))</p><p/><p>(3)创建表的时候直接指定:create table tablename ( [...], unique [indexname] (tablecolumns(length)) </p><p/><p> </p>
<p/><p>查看索引 show index from 数据库表名</p><p/><p>alter table 表名 add index 索引名称(数据库字段名称)</p><p/><p>primary key(主键索引)</p><p/><p>alter table
table_name
add primary key ( column
)</p><p/><p>unique(唯一索引)</p><p/><p>alter table table_name
add unique (column
)</p><p/><p>index(普通索引)</p><p/><p>alter table table_name
add index index_name ( column
)</p><p/><p>fulltext(全文索引)</p><p/><p>alter table table_name
add fulltext ( col
)</p><p/><p>多列索引</p><p/><p>alter table table_name
add index index_name ( column1
, column2
)</p><p/><p>-- 创建约束</p><p/><p>alter table table_name
add unique(col
);</p><p/><p>默认该约束的名称等于该列的名称,但是如果修改了这列的名称,而约束的名称确是不会改变的,这样在修改的时候容易引起问题,最好的方法是查看该表的约束再进行操作。</p><p/><p>alter table table_name
add constraint index_name2 unique(col
);</p><p/><p>create unique index index_name2 on table_name(col);</p><p/><p> -- 删除没有显式命名的约束</p><p/><p>show index from table_name; --查看 key_name 。如key_name 是 index_name</p><p/><p>alter table table_name drop index index_name; -- 隐式</p><p/><p>-- 删除带显式命名的约束</p><p/><p>alter table table_name drop index index_name2; -- 显式</p><p/><p>alter table table_name drop primary key; 直接就可以删除该表中的主键</p><p/><p>show keys from table_name;</p><p/><p>alter table table_name add constraint forkey_name foreign key (col) references table_name2(col); </p><p/><p>或:</p><p/><p>alter table table_name add foreign key (col) references table_name2(col); </p><p/><p>(需要通过 show create table table_name)来查看外键名称</p><p/><p>如果table_name2上没有主键约束和唯一性约束的列是没有资格作为列建立外键约束,否则会报错:“error 1215 (hy000): cannot add foreign key constraint”</p><p/><p>alter table table_name2 add primary key (col);</p><p/><p>删除外键:</p><p/><p>首先查看外键名称:</p><p/><p>show create table table_name</p><p/><p>alter table table_name drop foreign key forkey_name; </p><p/><p> </p><p/><p>check约束</p><p/><p>建立约束alter table table_name add check(sex in ('男','女'));没有报错</p><p/><p>但是insert into table_name values("a"); 不会报错,这是因为mysql 对于check会进行解析,但check约束实际无效。而要实际实现check约束的功能一般使用enum类型或者触发器来实现。</p><p>
</p>
网友评论