表的操作:



1.表的创建:



create table if not exists table_name(字段定义);



例子:



create table if not exists user(id int auto_increment,



uname varchar(20),



address varchar(200),



updateTime datetime,



primary key(id)); // 设置主键



2.表(show tables;)定义查看:



show create table table_name;



DESC table_name;



show full columns from table_name;



3.表的更新:



(1) 表的重命名:alter table old_user_name rename to new_user_name;



rename table old_user_name to new_user_name ;



(2) 增加列:alter table table_name add column column_nname(修饰);



在表的第一个位置增加字段,在语句最后加上FIRST,在表的指定字段之后添加,在最后加上AFTER 属性名;



例子:alter table user add column age int not null default 0 after uname;//在uname列后增加age列,并且不为空,默认为0.



(3) 删除列:alter table table_name drop (column) column_name;



(4).字段修改:alter table table_name change cloumn old_column_name new_cloumn_name 属性名 数据类型;



例子:alter table user change column adddress address varchar(1024) not null default 'beijing';// 将adddress重新命名为address,范围为1024,不为空,默认值为beijing



(5).表的删除:drop table table_name;



(6):复制表:create table new_table_name like old_table_name ;



4.操作表的约束:



(1).非空约束(not null); 直接跟在字段后,比如:name varchar(20) not null;



(2).设置字段默认值(default 默认值); 直接跟在字段后,比如:name varchar(20) default 'name';



(3).设置唯一约束(unique); 唯一约束指的是不能添加重复值 ;直接跟在字段后,比如:name varchar(20) unique;



(4).设置主键约束(primary key);



单字段主键:constraint pk_name primary key(name);直接跟在字段后,比如:id int primary key;



多字段主键:constraint pk_name1_name2 primary key(name1, name2);这个语句放在创建表的最后就可以.



(5).设置值自动增加(auto_increment);直接跟在字段后,比如:id int auto_increment;



(6).设置外键约束(foreign key):



语法:constraint 外键约束名 foreign key(属性名1) references 表名(属性名2);设置外键只能放在外键存在的表中,放在建表的最后一句,设置之后 不能插入父表中不存在的值.



语法例子:constraint fk_deptno foreign key(deptno) references t_dept(deptno);



上面6个中除了外间约束和多字段主键约束只能放在创建表的最后一句,其余都应该放在创建表时的字段之后,多个约束条件直接紧随其后.比如:name varchar(20) not null default 'name';//设置name不为空默认值为name.



 



索引的操作:



1.索引的创建



(1).普通索引:



create index index_name on table_name(属性名);



例子: create index idx_name on users(username);



查询时:通过explain select * from users where username = "条件";可以看出type为rel,而普通查询是ALL,也就是全盘扫描,降低效率,建立索引可以提高查找效率.



(2).唯一索引(值唯一不可以重复):



create unnqiue index index_unique_name on table_name(属性名);



例子:create unique index idx_unique_name on users(username); // 不可以添加姓名相同的记录.



(3).主键索引(一定是唯一索引,但唯一索引不一定是主键索引):



alter table table_name add primary key(属性名);



(4).复合索引:



alter table table_name add index index_name(属性名1,属性名2....);



复合索引只有在复合查找中才起作用,也就是说多条件查询时起作用.



(5).全文索引(innodb不支持全文索引):



create fulltext index index_name on table_name(属性名);



2.索引的查看:



show create table table_name;



show index from table_name;



3.索引的删除:



drop index index_name on table_name;



索引是不能直接更新的,只有通过先删除再添加来模仿更新.通过mysql workbench中的索引操作可以详细看出执行的语句,来加深理解.