因为关于数据库建表和约束这块,在公司中是有一个规范 CLI 来跑的。
由于长时间不用,导致了自己对这一块知识有一些陌生。
于是再回头,边学习边记录。
建表相关:
1:自动增量必须和主键约束在一起才生效。反之主键约束可以没有自动增量。
例如:建立一个INT型无符号自增ID主键
CREATE TABLE `user`( `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY);
2:唯一约束可以创建多个。
需要注意的是,当在字段一/字段二同时存在唯一约束的时候。
并不是 字段一/字段二 发生同时重复时才出错,而是一个字段重复就会出粗,和设置几个唯一约束字段没关系,之前因为用的少,所以一直搞混了。
例如:建立一个 INT 型 无符号 不能为空 的 唯一约束字段
CREATE TABLE `user`(`year` INT UNSIGNED NOT NULL UNIQUE KEY);
3:尽量不要去使用外键约束
主表更新之后会再去更新子表,耗费性能,浪费资源
外键约束目前只有 innodb 引擎支持,移植性和扩展性并不好,在实际中大多数使用逻辑上的外键,而不是物理上的外键约束。
4:alter :添加单列:(默认列位置为表末)
语法:ALTER TABLE 表名 ADD 列名 定义类型 [FIRST(列将加入最上方) | AFTER 字段名(列加入某某字段之后) ]
例如:新加入 `age` 字段为第一个字段
ALTER TABLE `user` ADD `age` INT FIRST;
例如:新加入 `year` 字段,在 `id` 字段之后
ALTER TABLE `user` ADD `year` INT AFTER `id`;
5:alter 删除单列
语法:ALTER TABLE 表名 DROP 列名
这个就什么说的了。言简意赅。
6:alter 添加约束
语法:ALTER TABLE 表名 ADD 约束条件 (约束字段);
例如:设置一个主键(之前表未有主键)
ALTER TABLE `user` ADD PRIMARY KEY (`id`);
例如:新增一个唯一约束
ALTER TABLE `user` ADD UNIQUE KEY (`name`);
7:alter 删除约束
语法:ALTER TABLE 表名 DROP 约束条件;
例如:删除一个主键(因为一张表中只有一个主键,所以不需要指定具体字段)
ALTER TABLE `user` DROP PRIMARY KEY;
例如:删除一个唯一约束
这里可能有点不太一样,唯一约束其实就是在该列上面写了一个唯一的索引,而不是具体的字段。
所以,应该是找到该字段唯一索引
SHOW INDEX FROM `user`;
之后:
ALTER TABLE `user` DROP INDEX `索引名`;
8:alter 修改字段类型
语法:ALTER TABLE 表名 MODIFY 字段 条件;
注意:
在确认字段后最好不要进行字段类型的修改。
可能造成数据的丢失和因为修改类型导致的服务异常
例如:修改一列的数据类型
ALTER TABLE `user` MODIFY `token` VARCHAR(100);
9:alter 修改字段名称
语法:ALTER TABLE 表名 CHANGE 老字段名 新字段名 类型[约束];
例如:更改一列的名称和类型
ALTER TABLE `user` CHANCE `name` `name2` VARCHAR(100);