创建了一个这样的数据表,想把id放到第一列,因为是主键,并且是自增的:
-
mysql> select * from student
-
-> ;
-
+-------+-------+-------+----+
-
| class | name | score | id |
-
+-------+-------+-------+----+
-
| 1 | user1 | 100 | 1 |
-
| 1 | user | 45 | 2 |
-
| 1 | user1 | 80 | 3 |
-
| 1 | user | 62 | 4 |
-
| 1 | user1 | 100 | 5 |
-
| 2 | user | 108 | 6 |
-
| 2 | user1 | 90 | 7 |
-
| 2 | user | 24 | 8 |
-
+-------+-------+-------+----+
-
8 rows in set (0.00 sec)
原来的顺序如上所示,怎么把id放在在前面,并且数据不动,属性不变呢?
废话不多说,直接上句子:
-
mysql> alter table student modify id int(10) unsigned auto_increment first;
-
Query OK, 8 rows affected (0.02 sec)
-
Records: 8 Duplicates: 0 Warnings: 0
-
mysql> desc student;
-
+-------+------------------+------+-----+---------+----------------+
-
| Field | Type | Null | Key | Default | Extra |
-
+-------+------------------+------+-----+---------+----------------+
-
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
-
| score | int(10) | YES | | NULL | |
-
| class | int(10) | NO | | NULL | |
-
| name | varchar(10) | NO | | NULL | |
-
+-------+------------------+------+-----+---------+----------------+
-
4 rows in set (0.00 sec)
-
mysql> select * from student;
-
+----+-------+-------+-------+
-
| id | score | class | name |
-
+----+-------+-------+-------+
-
| 1 | 100 | 1 | user1 |
-
| 2 | 45 | 1 | user |
-
| 3 | 80 | 1 | user1 |
-
| 4 | 62 | 1 | user |
-
| 5 | 100 | 1 | user1 |
-
| 6 | 108 | 2 | user |
-
| 7 | 90 | 2 | user1 |
-
| 8 | 24 | 2 | user |
-
+----+-------+-------+-------+
-
8 rows in set (0.00 sec)
这是放到第一位,如果要把name放到id之后呢?这样写就可以了(first 换成 after即可):
-
mysql> alter table student modify name varchar(10) after id;
-
Query OK, 8 rows affected (0.03 sec)
-
Records: 8 Duplicates: 0 Warnings: 0
-
mysql> select * from student;
-
+----+-------+-------+-------+
-
| id | name | score | class |
-
+----+-------+-------+-------+
-
| 1 | user1 | 100 | 1 |
-
| 2 | user | 45 | 1 |
-
| 3 | user1 | 80 | 1 |
-
| 4 | user | 62 | 1 |
-
| 5 | user1 | 100 | 1 |
-
| 6 | user | 108 | 2 |
-
| 7 | user1 | 90 | 2 |
-
| 8 | user | 24 | 2 |
-
+----+-------+-------+-------+
-
8 rows in set (0.00 sec)
完美解决问题!
mysql命令更改表结构:添加、删除、修改字段、调整字段顺序
原文出处:http://www.phpernote.com/mysql/1120.html
常用的通过mysql命令来更改表结构的一些sql语句,包括添加、删除、修改字段、调整字段顺序。
添加字段:
alter table `user_movement_log` Add column GatewayId int not null default 0 AFTER `Regionid`; (在哪个字段后面添加)
删除字段:
alter table `user_movement_log` drop column Gatewayid;
调整字段顺序:
ALTER TABLE `user_movement_log` CHANGE `GatewayId` `GatewayId` int not null default 0 AFTER RegionID;
//主键
alter table tabelname add new_field_id int(5) unsigned default 0 not null auto_increment ,add primary key (new_field_id);
//增加一个新列
alter table t2 add d timestamp;
alter table infos add ex tinyint not null default '0';
//删除列
alter table t2 drop column c;
//重命名列
alter table t1 change a b integer;
//改变列的类型
alter table t1 change b b bigint not null;
alter table infos change list list tinyint not null default '0';
//重命名表
alter table t1 rename t2;
加索引
mysql> alter table tablename change depno depno int(5) not null;
mysql> alter table tablename add index 索引名 (字段名1[,字段名2 …]);
mysql> alter table tablename add index emp_name (name);
加主关键字的索引
mysql> alter table tablename add primary key(id);
加唯一限制条件的索引
mysql> alter table tablename add unique emp_name2(cardnumber);
删除某个索引
mysql>alter table tablename drop index emp_name;
修改表:
增加字段:
mysql> ALTER TABLE table_name ADD field_name field_type;
修改原字段名称及类型:
mysql> ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;
删除字段:
mysql> ALTER TABLE table_name DROP field_name;