diff --git a/docs/mysql/primaryKey.md b/docs/mysql/primaryKey.md index faecae5..e4aed2e 100644 --- a/docs/mysql/primaryKey.md +++ b/docs/mysql/primaryKey.md @@ -15,3 +15,59 @@ ```sql insert into class(name,sex,age) value("李四","男",21); ``` + +![图 1](../../images/843b7985265bdaaba9b61d061a462f32f6b599bb651b0a635313d9ed789f4ce9.png) + +现在添加进去了,但是如果我想让10岁的李四的年龄改成11,那么我们应该怎么改呢?现在只有他的年龄是10,我们可以直接使用年龄来修改 + +```sql +updaet class set age = 11 where age = 10; +``` + +但是如果又来了一个同学年龄又是10,是不是更难确定到一行的数据了。 + +再极端一点 名字性别年龄都是一样的,那么是不是就无法区分这两行数据了。 + +所以有个很重要的约束,就是任意两条记录不能重复。不能重复不是指两条记录不完全相同,而是指能够通过某个字段唯一区分出不同的记录,这个字段被称为主键。 + +例如,假设我们把name字段作为主键,那么通过名字小明或小红就能唯一确定一条记录。但是,这么设定,就没法存储同名的同学了,因为插入相同主键的两条记录是不被允许的。 + +对主键的要求,最关键的一点是:记录一旦插入到表中,主键最好不要再修改,因为主键是用来唯一定位记录的,修改了主键,会造成一系列的影响。 + +所以,选取主键的一个基本原则是:不使用任何业务相关的字段作为主键。 + +因此,身份证号、手机号、邮箱地址这些看上去可以唯一的字段,均不可用作主键。 + +作为主键最好是完全业务无关的字段,我们一般把这个字段命名为id。 + +而且主键一般都是自增整数类型:数据库会在插入数据时自动为每一条记录分配一个自增整数,这样我们就完全不用担心主键重复,也不用自己预先生成主键 + +所以下面将看一下如何定一一个带有主键的表,和什么叫自增。 + +## 定义一个含有主键的表 + +前面我们创建的class表并没有主键,那么我们如何创建一个带有主键的表呢? + +比如要创建一个名字叫 `articles` 的表,表的结构像下面一样 + +| id | name | author | +|----|-----|-----| + +- id 作为主键 +- name 放文章的名字 +- author 放作者的名字 + +```sql +create table articles( + id int auto_increment, + name varchar(100), + author varchar(10), + primary key(id) +); +``` + +![图 2](../../images/f69e4725abae353880556f34846c807da14e67a928ebd858ec3f0164e8266bce.png) + +创建成功了,查看一下 + +![图 3](../../images/4fbfe8a92c8540c4c01c4c9c26ef90e06edb0489b704a481ae9cb2588251df16.png) diff --git a/images/4fbfe8a92c8540c4c01c4c9c26ef90e06edb0489b704a481ae9cb2588251df16.png b/images/4fbfe8a92c8540c4c01c4c9c26ef90e06edb0489b704a481ae9cb2588251df16.png new file mode 100644 index 0000000..52b188a Binary files /dev/null and b/images/4fbfe8a92c8540c4c01c4c9c26ef90e06edb0489b704a481ae9cb2588251df16.png differ diff --git a/images/843b7985265bdaaba9b61d061a462f32f6b599bb651b0a635313d9ed789f4ce9.png b/images/843b7985265bdaaba9b61d061a462f32f6b599bb651b0a635313d9ed789f4ce9.png new file mode 100644 index 0000000..ee4da22 Binary files /dev/null and b/images/843b7985265bdaaba9b61d061a462f32f6b599bb651b0a635313d9ed789f4ce9.png differ diff --git a/images/f69e4725abae353880556f34846c807da14e67a928ebd858ec3f0164e8266bce.png b/images/f69e4725abae353880556f34846c807da14e67a928ebd858ec3f0164e8266bce.png new file mode 100644 index 0000000..d1ad55e Binary files /dev/null and b/images/f69e4725abae353880556f34846c807da14e67a928ebd858ec3f0164e8266bce.png differ