完整性约束

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; #一般用它来清空表

posted @ 2018-04-23 16:05  哈哈大圣  阅读(238)  评论(0编辑  收藏  举报