2.6 修改和删除数据表字段
修改表
alter TABLE 旧表名 RENAME AS 新表名
(修改表名)alter TABLE 表名 ADD 字段名 字段类型(大小或显示长度)
(添加字段)alter TABLE 表名 MODIFY 字段名 新类型(新大小或新显示长度)
(修改字段的约束,不能修改字段名)alter TABLE 表名 CHANGE 旧字段名 新字段名 类型(大小或显示长度)
(修改字段名,不能修改字段的约束)alter table 表名 drop 字段名
(删除字段)
删除表
DROP TABLE IF EXISTS 表名
(如果表存在就删掉!)
注意点
- `` 字段名,尽量都用 这个 包含,避免出现 关键字冲突。
- 注释是 – 和 /**/
- sql 关键字 大小写不敏感,建议大家 写 小写。(大写的话也得练,但是一般 是在 数据库软件里 练习 大写的。)
3.1 数据库级别的外键
物理外键:就类似于把其它表的字段引入过来,比如说一个学生表里面有个年级字段,而这个年级字段,它指的是 grade 表里的gradeid字段。所以我们就需要把年级字段声明为外键,但是声明外键后,必须要起一个外键名!
SQL 代码:CONSTRAINT `外键名` FOREIGN KEY (`需要声明为外键的字段`) REFERENCES `数据库名`.`外键关系的表` (`外键关系的表的待引入字段`)
create table if not exists `grade`(
`gradeid` int(10) not null auto_increment comment '年级ID',
`gradename` varchar(50) not null default '大一' comment '年级名称',
primary key(`gradeid`)
)engine=innodb default charset=utf8mb4;
/*CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `school`.`grade` (`gradeid`)*/
create table if not exists `student`(
`id` int(10) not null auto_increment comment '学号',
`name` varchar(100) not null default '匿名' comment '名字',
`age` int(3) not null default '1' comment '年龄',
`gradeid` int(10) not null comment '年级',
PRIMARY key(`id`),
CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `school`.`grade` (`gradeid`)
)engine=innodb default charset=utf8mb4;
删除有外键关系的表的时候,必须要先删除 引用别人的表。否则外键关系的表 删不掉!
第二种方式
SQL 代码:ALTER TABLE ADD CONSTRAINT `外键名` FOREIGN KEY (`需要声明为外键的字段`) REFERENCES `数据库名`.`外键关系的表` (`外键关系的表的待引入字段`)
这种操作 属于 物理外键,是数据库级别的外键。我们不是很建议使用!(第一个是建表麻烦,删表麻烦,增加数据还会有关联。等等各种问题。)
最佳实践
- SQL数据库其实就是单纯的表呀,只用来存数据就行了,也就是行和列。
- 我们如果想使用多张表,为啥不用 后台程序去逻辑操控呢?(比如 我用 Java 写个 操作数据库的程序,我现在想要用其它表里面的内容,我完全可以 把当前表的这个字段的数据取出来,然后 再去根据这个数据 查询 其它表里面的数据,这就实现了 逻辑上的外键!!!还非常的灵活,玩法极多!!)
切记:物理外键的 耦合性太强太强了,千万别 建立物理外键,别让自己 好不容易写的程序 变成一堆问题的乱麻。