mysql修改表
mysql修改表
修改表结构:?
1 | alter [ignore] table <table specification> <table structure change> |
包括表属性改变,列属性改变,完整性约束改变。
1.表属性改变
1.1重命名表名
?
1 2 | mysql> alter table student rename to s; Query OK, 0 rows affected (0.03 sec) |
也可以直接使用rename命令改名:
?
1 2 | mysql> rename table s to student; Query OK, 0 rows affected (0.13 sec) |
1.2表排序改变
?
1 2 3 4 5 6 7 8 9 10 | mysql> alter table student order by stu_id desc; mysql> select * from student; +--------+----------+---------+-----------+ stu_id | stu_name | stu_tel | stu_score | +--------+----------+---------+-----------+ 4 | d | 154 | 63 | 3 | c | 153 | 62 | 2 | b | 152 | 61 | 1 | a | 151 | 60 | +--------+----------+---------+-----------+ |
2列属性改变
2.1 添加列
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | mysql> alter table student -> add sex char(1) after stu_name; Query OK, 4 rows affected (0.34 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> select * from student; +--------+----------+------+---------+-----------+ stu_id | stu_name | sex | stu_tel | stu_score | +--------+----------+------+---------+-----------+ 1 | a | NULL | 151 | 60 | 2 | b | NULL | 152 | 61 | 3 | c | NULL | 153 | 62 | 4 | d | NULL | 154 | 63 | +--------+----------+------+---------+-----------+ 4 rows in set (0.02 sec) |
新添加的列默认放在最后一列,且默认填充空值。这里使用after指定了新增列sex放在stu_name后面.如果新增列设置不能为空,那么mysql将根据列的数据类型填入实际的值:对于数值填入0,对于字符串填入空字符串,对于日期填入0000-00-00,对于时间填入00:00:00.
2.2删除列
?
1 2 3 4 | mysql> alter table student -> drop sex; Query OK, 4 rows affected (0.33 sec) Records: 4 Duplicates: 0 Warnings: 0 |
2.3修改列属性
初始列属性:
?
1 2 3 4 5 6 7 8 | +-------------+-----------+ column_name | data_type | +-------------+-----------+ stu_id | int | stu_name | varchar | stu_tel | int | stu_score | int | +-------------+-----------+ |
将stu_tel列修改为tel char型,并放在stu_score后面。
?
1 2 3 4 5 6 7 8 9 10 11 | mysql> alter table student -> change stu_tel tel char(3) after stu_score;; Query OK, 4 rows affected (0.23 sec) +-------------+-----------+ column_name | data_type | +-------------+-----------+ stu_id | int | stu_name | varchar | stu_score | int | tel | char | +-------------+-----------+ |
如果仅仅是更改列其他属性而不改列名时,可以使用modify参数。
将tel列改回int型
?
1 2 3 4 5 6 7 8 9 10 11 12 | mysql> alter table student -> modify tel int(3); Query OK, 4 rows affected (0.25 sec) Records: 4 Duplicates: 0 Warnings: 0 +-------------+-----------+ column_name | data_type | +-------------+-----------+ stu_id | int | stu_name | varchar | stu_score | int | tel | int | +-------------+-----------+ |
3.完整性约束改变
?
1 2 3 4 5 6 7 8 | <integrity constraint change>:= add primary key<index name> add unique <index name> add foreign key <index name>(column list) referencing <specification> add check <condition> drop primary key drop foreign key <index name> drop constraint <constraint name> |
在add后面可以添加[constraint ] 为完整性约束定义名字。
删除主键:
?
1 | mysql> alter table student drop primary key; |
添加主键:
?
1 | mysql> alter table student add primary key(stu_id); |