写在开头:
在创建表时,主键id的类型一旦确定,后续要更改,会非常麻烦,所以为了避免麻烦,尽量在创建表时,将主键id的类型设置为bigint类型
除了主键id的类型不好修改外,其他字段的类型,均可方便修改
PS: 发现一个比较取巧的方法,直接对要操作的表复制粘贴,就可以对复制出来的表修改主键id的类型,不知道啥原理(建议备份后操作)
当需要修改表中某些字段的类型时,比如将某些字段类型(除了主键id)由int改为bigint,报如下错误:
主要原因是:该表引用了外键(FOREIGN KEY)约束
可以通过命令行界面,查看
SHOW CREATE TABLE product;
结果如下:其中 CONSTRAINT `product_ibfk_1` FOREIGN KEY (`dir_id`) REFERENCES `productdir` (`id`) 表示product表中引入了外键约束,即product表中的dir_id等于productdir表中的id
| product | CREATE TABLE `product` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`productName` varchar(50) DEFAULT NULL,
`dir_id` int(11) DEFAULT NULL,
`salePrice` double(10,2) DEFAULT NULL,
`supplier` varchar(50) DEFAULT NULL,
`brand` varchar(50) DEFAULT NULL,
`cutoff` double(2,2) DEFAULT NULL,
`costPrice` double(10,2) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `dir_id` (`dir_id`),
CONSTRAINT `product_ibfk_1` FOREIGN KEY (`dir_id`) REFERENCES `productdir` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8 |
解决办法:
通过命令行取消外键约束(其中product_ibfk_1指的是外键约束名,在创建外键约束时会自动生成,无需定义)
ALTER TABLE product DROP FOREIGN KEY product_ibfk_1;
出现Query OK表示操作成功
然后就可以返回设计表中,修改相应的属性值了
如果修改完属性之后,还想要恢复之前的外键约束,那么可以通过命令行或者设计表模式下通过软件手动添加
方式一:命令行
ALTER TABLE product ADD CONSTRAINT product_ibfk_1 FOREIGN KEY (dir_id) REFERENCES productdir (id);
格式:
格式:(大小写无所谓)
alter table 表名
add constraint 外键约束名
foreign key (字段名)
references 关联的表名 (关联的字段名)
方式二:手动添加
# SQL基本语法
登录数据库: mysql -uroot -p
退出数据库: quit 或者 exit 或者 ctr + d
创建数据库: create database 数据库名 charset=utf8;
使用数据库: use 数据库名;
删除数据库: drop database 数据库名;
创建表: create table 表名(字段名 字段类型 约束, ...);
修改表-添加字段: alter table 表名 add 字段名 字段类型 约束
修改表-修改字段类型: alter table 表名 modify 字段名 字段类型 约束
修改表-修改字段名和字段类型: alter table 表名 change 原字段名 新字段名 字段类型 约束
修改表-删除字段: alter table 表名 drop 字段名;
删除表: drop table 表名;
查询数据: select * from 表名; 或者 select 列1,列2,... from 表名;
插入数据: insert into 表名 values (...) 或者 insert into 表名 (列1,...) values(值1,...)
修改数据: update 表名 set 列1=值1,列2=值2... where 条件
删除数据: delete from 表名 where 条件