完整性约束
3.primary key
在查看表结构时,对应的为PRI(primary key --->Key PRI),primary key 相当于 not null unique,而且对于innodb储存引擎所储存的表来说,一张表内必须有一个主键
如果没有设置主键,innodb会自动从前到后寻找唯一且不为空的字段作主键,如果没有
就自己弄了一个隐藏的主键字段用于组织数据,但是这个隐藏的对于用户来说是不透明的!
单列主键
create table t17(
id int primary key, #没有传int值,这里默认为0,(auto_increment 默认为1)
name char(16)
);
insert into t17 values
(1,'egon'),
(2,'alex');
insert into t17 values
(2,'wxx'); -- 报错,重复
insert into t17(name) values
('wxx'); -- 报错,重复
复合主键
create table t19(
ip char(15),
port int,
primary key(ip,port)
);
insert into t19 values
('1.1.1.1',80),
('1.1.1.1',81);
4.auto_increment
auto_increment 自动增长 必须绑定一个key(primary key | unique)
create table t20(
id int primary key auto_increment, -- 默认初试值为1,步长为1
name char(16)
);
insert into t20(name) values
('egon'),
('alex'),
('wxx');
insert into t20(id,name) values
(7,'yuanhao'); --非要不按照套路来
insert into t20(name) values
('egon1'), --自动增长按照末尾的号递增
('egon2'),
('egon3');
mysql> select * from t20;
+----+------------------+
| id | name |
+----+------------------+
| 1 | egon |
| 2 | alex |
| 3 | wxx |
| 7 | yuanhao |
| 8 | egon1 |
| 9 | egon2 |
| 10 | egon3 |
+----+------------------+
7 rows in set (0.00 sec)
实验(了解)--设置自增初始值及步长
show variables like 'auto_inc%';#查找变量属性%任意字符
#步长:
auto_increment_increment默认为1
#起始偏移量
auto_increment_offset默认1
#设置步长 默认为1
set session auto_increment_increment=5; 每次会话,本次连接有效
set global auto_increment_increment=5; 全局!所有的会话,需重启
#设置起始偏移量
set global auto_increment_offset=3;
#强调:起始偏移量<=步长
create table t21(
id int primary key auto_increment,
name char(16)
);
insert into t21(name) values
('egon'),
('alex'),
('wxx'),
('yxx');
5.清空表(补充)
delete from t20; #不能讲自增长的数据重置!
delete from t20 where id = 3; #delete用于删除固定的记录
truncate t20; #一般用它来清空表