1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
| * 怎么给一张表添加主键约束呢? drop table if exists t_user; create table t_user( id int primary key, // 列级约束 username varchar(255), email varchar(255) ); insert into t_user(id,username,email) values(1,'zs','zs@123.com'); insert into t_user(id,username,email) values(2,'ls','ls@123.com'); insert into t_user(id,username,email) values(3,'ww','ww@123.com'); select * from t_user; +----+----------+------------+ | id | username | email | +----+----------+------------+ | 1 | zs | zs@123.com | | 2 | ls | ls@123.com | | 3 | ww | ww@123.com | +----+----------+------------+
insert into t_user(id,username,email) values(1,'jack','jack@123.com'); ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
insert into t_user(username,email) values('jack','jack@123.com'); ERROR 1364 (HY000): Field 'id' doesn't have a default value 根据以上的测试得出:id是主键,因为添加了主键约束,主键字段中的数据不能为NULL,也不能重复。 主键的特点:不能为NULL,也不能重复。
* 主键相关的术语? 主键约束 : primary key 主键字段 : id字段添加primary key之后,id叫做主键字段 主键值 : id字段中的每一个值都是主键值。
* 主键有什么作用? - 表的设计三范式中有要求,第一范式就要求任何一张表都应该有主键。 - 主键的作用:主键值是这行记录在这张表当中的唯一标识。(就像一个人的身份证号码一样。)
* 主键的分类? 根据主键字段的字段数量来划分: 单一主键(推荐的,常用的。) 复合主键(多个字段联合起来添加一个主键约束)(复合主键不建议使用,因为复合主键违背三范式。) 根据主键性质来划分: 自然主键:主键值最好就是一个和业务没有任何关系的自然数。(这种方式是推荐的) 业务主键:主键值和系统的业务挂钩,例如:拿着银行卡的卡号做主键,拿着身份证号码作为主键。(不推荐用) 最好不要拿着和业务挂钩的字段作为主键。因为以后的业务一旦发生改变的时候,主键值可能也需要 随着发生变化,但有的时候没有办法变化,因为变化可能会导致主键值重复。
* 一张表的主键约束只能有1个。(必须记住)
* 使用表级约束方式定义主键: drop table if exists t_user; create table t_user( id int, username varchar(255), primary key(id) ); insert into t_user(id,username) values(1,'zs'); insert into t_user(id,username) values(2,'ls'); insert into t_user(id,username) values(3,'ws'); insert into t_user(id,username) values(4,'cs'); select * from t_user;
insert into t_user(id,username) values(4,'cx'); ERROR 1062 (23000): Duplicate entry '4' for key 'PRIMARY'
以下内容是演示以下复合主键,不需要掌握: drop table if exists t_user; create table t_user( id int, username varchar(255), password varchar(255), primary key(id,username) ); insert .......
* mysql提供主键值自增:(非常重要。) drop table if exists t_user; create table t_user( id int primary key auto_increment, // id字段自动维护一个自增的数字,从1开始,以1递增。 username varchar(255) ); insert into t_user(username) values('a'); insert into t_user(username) values('b'); insert into t_user(username) values('c'); insert into t_user(username) values('d'); insert into t_user(username) values('e'); insert into t_user(username) values('f'); select * from t_user;
提示:Oracle当中也提供了一个自增机制,叫做:序列(sequence)对象。
|