1、修改数据库(比如修改字符集)
mysql> alter database `DB` character set utf8;
2、根据查询结果建立数据表,注意这样复制的数据表是不能将主键也复制过来的,也就是说此时的新表示没有主键的
mysql> create table student_bak select ID,name from student where ID=2;
mysql> create table student_bak2 select * from student;
3、修改数据表名(两种方式都可以)
mysql> rename table student_bak to stu_bak;
mysql> alter table stu_bak rename student_bak;
4、修改列名(字段名)以及类型,注意修改类型的时候不能少于现有字段数据的大小,而且必须得兼容(把Name改为int类型是不允许的)
mysql> alter table student_bak2 change Name Stu_Name varchar(10);
5、增加主键(一个表中只能有一个主键),在初期创建表时没有建立主键的话可以增加
mysql> alter table student_bak2 add constraint stu_id primary key(ID); //其中stu_id是主键名称,也可以不加
6、删除主键
mysql> alter table student_bak2 drop primary key;
7、复合主键(可以管理两列),比如我吧student_bak2表的Age和Stu_Name两列设置为复合主键
mysql> alter table student_bak2 add constraint stu_id primary key(Age,Stu_Name); //也就是说姓名或年龄可以相同,但是姓名和年龄同时相同就不可以了
8、增加字段
mysql> alter table student_bak2 add Address varchar(30) not null; //这样增加的字段在表的最后
mysql> alter table student_bak2 add Address varchar(30) not null first; //first表示增加到第一列
mysql> alter table student_bak2 add Address varchar(30) not null after Age; //after表示添加到某列之后
9、删除字段
mysql> alter table student_bak2 drop column Address;
10、建立唯一键
mysql> create table student(
ID int unsigned auto_increment,
Name varchar(10) not null unique, //unique代表唯一键,表示Name字段也不能出现重复,例如添加两个"张三"是不允许的
Age tinyint unsigned, primary key(ID)
)engine=InnoDB default charset=utf8;
如果创建表时没有建立唯一键,后续可以添加:
mysql> alter table student add constraint UK unique (Name); //其中UK是唯一键的名称
11、删除唯一键
mysql> alter table student drop index UK; //UK为唯一键名称
12、创建外键(一般指向另一个表的主键或者唯一键),首先创建两个表,然后创建外键把student表中的T_ID和teacher表中的ID进行关联
mysql> create table student(
ID int unsigned auto_increment,
Name varchar(10) not null,
Age tinyint unsigned,T_ID int unsigned,
primary key(ID)
)engine=InnoDB default charset=utf8;
mysql> create table teacher(
ID int unsigned auto_increment primary key,
Name varchar(20) not null
) engine=InnoDB default charset=utf8;
mysql> alter table student add constraint WJ foreign key (T_ID) references teacher(ID); //创建外键,references表示关联
13、删除外键
mysql> alter table student drop foreign key WJ; //WJ是创建外键时指定的名称
mysql> alter table student drop index WJ; //有时删除键后索引还在,所以还要删除索引
添加外键后的作用,小例子:
mysql> insert into teacher values (null,"王老师"),(null,"彭老师"); //在teacher表中添加两个老师,现在的ID分别是1和2
mysql> insert into student (Name,Age,T_ID) values ("张三",20,3); //此时在student的T_ID字段添加3会报错,因为teacher表中只有1和2
14、删除某一行,注意带有约束的行不能删除
mysql> delete from teacher where ID=3;
mysql> delete from teacher where ID=2; //此时会报错,因为在student中有外键关联
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`DB`.`student`, CONSTRAINT `WJ` FOREIGN KEY (`T_ID`) REFERENCES `teacher` (`ID`))
如果换一种方式,就是把T_ID换掉,再来删除,例如:
mysql> update student set T_ID=4 where ID in(2,3); //表示把student表中ID是2和3行的T_ID字段改为4
mysql> delete from teacher where ID=2;
Query OK, 1 row affected (0.00 sec)
还有一种创建外键的方式后可以直接删除被关联的老师,删除老师后学生表的T_ID字段自动成为null
mysql> alter table student add constraint WJ foreign key (T_ID) references teacher(ID) on delete set null; //on delete set null就是删除后自动变为null
mysql> alter table student add constraint WJ foreign key (T_ID) references teacher(ID) on delete cascade; //on delete cascade是如果把某一个老师删除,那这个老师关联的学生也跟着删除
mysql> alter table student add constraint WJ foreign key (T_ID) references teacher(ID) on delete set null on update cascade; //添加多个外键条件,意思是如果老师表的ID改变,那么与之关联的 student表中的T_ID也会跟着改变,删除的时候会设置为空
原文地址:http://blog.51cto.com/12730062/2073530