目录

一:MySQL约束条件

1.什么是约束条件?

1.约束条件相当于是在字段类型之上添加的额外约束(条件)

2.限制表中的数据,保证添加到数据表中的数据准确和可靠性

二:unsigned(去除正负号)

  • unsigned
作用:
使整型范围无正负号
格式:
create table t1(id int unsigned);

三:zerofill(不够位数零填充)

  • zerofill
作用:
不够位数使用0填充
格式:
create table t1(id int(8) unsigned zerofill)
insert into t1 values(2222);

四:not null(非空)

  • not null
作用:
非空(不能为空) 不使用约束条件测试(id字段为空)
create table t3(id int,name varchar(16));
指定给表内字段name插入数据
insert into t3(name) values('jason'); id : NULL(空)
name : jason

1.使用约束条件(不添加会报错)
限制id字段不能为空
create table t4(id int not null,name varchar(16));
不添加id字段添加(报错)
insert into t4(name) values('jason');
正常添加不报错
insert into t4(name) values('jason');

五:default(默认值)

作用:
默认值(用户给了就用用户的 用户不给就是要默认的) create table t5(id int,name varchar(16) default '匿名用户');
正常传值
insert into t5(id,name) values(2,'jason');
只给id添加值(name默认传值)
insert into t5(id) values(1);
  • 注意:
默认值前面(字段是字符串类型)就给字符串
默认值前面(字段是int类型)就给个int类型(1)

六:unique(唯一数据)

作用:
唯一(保证字段(一个、多个)在整个表中没有重复的数据) unique分为单列唯一和多列唯一。
1.单列唯一(只能控制单列不能重复)
  • 案例:
限制name字段不能有重复数据
create table t6(id int,name varchar(16) unique);
向t6表内添加数据
insert into t6 values(1,'jason'),(2,'jason');

2.联合唯一(多个字段组合之后的结果(不能有重复项)单个单个可以有重复项)
  • 案例
    	create table server(
id int,
host varchar(32) comment 'ip地址',
port varchar(32) comment '端口',
unique(host,port)
);
3.添加数据
insert into server values(1,'127.0.0.1','3306'),(2,'127.0.0.1','3307'),(3,'127.0.0.2',3306);
向server表内添加数据(多个字段组合之后结果重复)
insert into server valuse(4.'127.0.0.1',3306);

4.总结
host与port字段结合不重复可以存储(才不会报错)

七:primary key(主键)

1.primary key(主键)
1.但从约束条件上而言主键相当于not null + unique(非空且唯一)
2.主键的功能目前简单的理解为能够加快数据的查询速度相当于书的目录
3.InnoDB存储引擎规定每张表都必须有且只有一个主键
情况1.表中没有任何的主键和其他约束条件
InnoDB默认会采用一个隐藏字段作为表的主键
情况2.表中没有主键但是有非空且唯一的字段
InnoDB会自动将该字段升级为主键

结论:每张表都必须要有一个id(sid nid uid)字段并且该字段就是主键

2.单列主键(验证是否非空且唯一)
create table t7(
id int primary key,
name varchar(32)
);
3.表内添加数据(验证是否为空且唯一)
insert into t9(name) values('gary');   # 报错
insert into t9 values(1,'gary'),(2,'tom'); # 报错

4.验证 (表中没有主键但是有非空且唯一的字段,InnoDB会自动将该字段升级为主键)
create table t8(
id int,
name varchar(32),
age int not null unique,
phone bigint not null unique,
num int not null unique
);

5.多列主键(联合主键)
create table t9(
id int,
age int,
name varchar(16),
primary key(id,age)
);

八:auto_increment(自增)

1.auto_increment作用
自增(专门配合主键一起使用的 让主键能够自增)
2.创建表(验证自增效果)
由于主键类似于数据的唯一标识 并且主键一般都是数字类型
我们在添加数据的时候不可能记住接下来的序号是多少 太麻烦
create table t10(
id int primary key auto_increment,
name varchar(32)
);
3.向t10表内添加指定name字段的数据(不添加id字段数据)
mysql> insert into t10(name) values('jason'),('tony'),('kevin');

九:主键自增特性

1.自增带来的影响
1.主键的自增是不会收到delete from删除操作的影响
2.如果删除某一个字段的话他还是保持原来的自增顺序依次自增。
  • 比如:
当我们删除的是字段id为3的位置,再次添加数据字段id就为4,并不会占用被删除3的位置。
就算我们把表内的数据都删除了,再次添加表内数据,也是以原来的字段顺序保存依次自增。

4.解决主键自增问题(truncate)
truncate
作用:
既可以清空表数据也会重置主键值
使用格式:
truncate 表名称;

MySQL约束条件(主键-自增-默认值)的更多相关文章

  1. SQL Server2000导出数据时包含主键、字段默认值、描述等信息

    时经常用SQL Server2000自带的导出数据向导将数据从一台数据库服务器导出到另一台数据库服务器: 结果数据导出了,但表的主键.字段默认值.描述等信息却未能导出,一直没想出什么方法,今天又尝试了 ...

  2. mysql联合主键自增、主键最大长度小记

    前言 一. 联合主键自增问题 今天上午闲来无事翻看了下数据库分类表的设计,看到这样一幕: 当时我好奇的是怎么cateId自增会存在重复值的问题,然后翻看了下主键是由siteId和cateId组成.所以 ...

  3. mysql iot 主键自增列问题

    mysql 如何避免热点块? 主键按sn自增列 Oracle 可以通过翻转索引 比如 插入101 102 103 104 变成101 201 301 401 分散数据 反转索引坏处,无法index r ...

  4. mysql——非主键自增

    今天遇到一个问题: 要创建一张表,其中我想将ip和date这两列作为一个复合主键,可以通过如下语句修改表结构: alter table tb_name add primary key (字段1,字段2 ...

  5. mySQL 中主键值自动增加

    转  http://stevenjohn.iteye.com/blog/976397 MySql 主键自动增长 博客分类: DataBase MySQLSQL  创建数据库,创建表. mysql> ...

  6. mysql 设置自增主键id的起始值

    修改user表,主键自增从20000开始 alter table user AUTO_INCREMENT=20000;

  7. mysql设置主键自增长和自增长初始值

          本文主要向大家介绍MySQL数据库之Mysql创建表实现主键自增并且初始值为200,希望对大家学习MySQL数据库有所帮助.       假设已经创建表test,并且主键为id.Mysql ...

  8. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'portal.hibernate_sequence' doesn't exist, 谈谈主键自增的方式

    最近几天几天做项目用到了Spring Data JPA,确实是个好东西,省了很多力气.但是由于刚开始用,也遇到不少头疼的问题,如下,调用JpaRepository接口的save方法保存一个对象到数据库 ...

  9. mysql数据库单表只有一个主键自增id字段,ibatis实现id自增

    mysql数据库单表只有一个主键自增id字段,ibatis实现id自增 <insert id="autoid">        insert into user_id ...

  10. 【mybatis】mybatis中insert 主键自增和不自增的插入情况【mysql】

    主键不自增:返回值是插入的条数 <insert id="add" parameterType="EStudent"> insert into TSt ...

随机推荐

  1. 使用Docker Compose部署SpringCloud项目docker-compose.yml文件示例

    注意各组件之间的依赖关系 microservice-discovery-eureka: image: reg.itmuch.com/microservice-discovery-eureka port ...

  2. Elasticsearch中字段的类型

    在Elasticsearch中,每一个字段都有一个类型(type).以下为Elasticsearch中可以使用的类型:

  3. ElastAlert监控日志告警Web攻击行为---tomcat和nginx日志json格式

    一.ELK安装 1.2 elk配置 logstash自定义配置文件,取名为filebeat_log.conf : input { beats { port => 5044 client_inac ...

  4. Python(二)常用的正则表达式

    表单字段验证常用正则表达式 1.姓名 /^[\u4e00-\u9fa5]{2,4}$/ //2-41 2.手机号码 /^(13[0-9]|14[01456879]|15[0-35-9] 3.座机号码 ...

  5. 文件内再分类到各txt文件

    当老师叫我们帮他做事,比如文件内内容再分类,我们就可以建个面板,里面有各要导入文件按钮,先把分类内容copy下,再点按钮导入进txt文件就行啦. 以下为java代码,使用了tableLayout布局 ...

  6. 洛谷P3243 [HNOI2015]菜肴制作 (拓扑排序/贪心)

    这道题的贪心思路可真是很难证明啊...... 对于<i,j>的限制(i必须在j之前),容易想到topsort,每次在入度为0的点中选取最小的.但这种正向找是错误的,题目要求的是小的节点尽量 ...

  7. POJ3041 小行星 (二分图匹配模板)

    学了这么久连模板都没有写过,我来补个坑...... 将行看成集合X,列看成Y,障碍看成是X到Y的一条边. 消除次数最少,等价于最小点覆盖问题,最小点覆盖=最大匹配数,跑一遍匈牙利就行了 #includ ...

  8. git中 gitignore 忽略文件操作

    通常,.gitignore文件被放置在存储库的根目录中.根目录也称为父目录和当前工作目录.根文件夹包含组成项目的所有文件和其他文件夹.也就是说,您可以将它放在存储库中的任何文件夹中.你甚至可以有多个. ...

  9. 日志处理logging

    前言 什么是日志?有什么作用?日志是跟踪软件运行时所发生的事件的一种方法,简单来说它可以记录某时某刻运行了什么代码,当出现问题时可以方便我们进行定位. 由python内置了一个logging模块,用户 ...

  10. k8s运维之pod排错

    k8s运维之pod排错 K8S是一个开源的,用于管理云平台中多个主机上的容器化应用,Kubernetes的目标是让部署容器化变得简单并且高效 K8S的核心优势: 1,基于yaml文件实现容器的自动创建 ...