MySQL约束条件(主键-自增-默认值)
一: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约束条件(主键-自增-默认值)的更多相关文章
- SQL Server2000导出数据时包含主键、字段默认值、描述等信息
时经常用SQL Server2000自带的导出数据向导将数据从一台数据库服务器导出到另一台数据库服务器: 结果数据导出了,但表的主键.字段默认值.描述等信息却未能导出,一直没想出什么方法,今天又尝试了 ...
- mysql联合主键自增、主键最大长度小记
前言 一. 联合主键自增问题 今天上午闲来无事翻看了下数据库分类表的设计,看到这样一幕: 当时我好奇的是怎么cateId自增会存在重复值的问题,然后翻看了下主键是由siteId和cateId组成.所以 ...
- mysql iot 主键自增列问题
mysql 如何避免热点块? 主键按sn自增列 Oracle 可以通过翻转索引 比如 插入101 102 103 104 变成101 201 301 401 分散数据 反转索引坏处,无法index r ...
- mysql——非主键自增
今天遇到一个问题: 要创建一张表,其中我想将ip和date这两列作为一个复合主键,可以通过如下语句修改表结构: alter table tb_name add primary key (字段1,字段2 ...
- mySQL 中主键值自动增加
转 http://stevenjohn.iteye.com/blog/976397 MySql 主键自动增长 博客分类: DataBase MySQLSQL 创建数据库,创建表. mysql> ...
- mysql 设置自增主键id的起始值
修改user表,主键自增从20000开始 alter table user AUTO_INCREMENT=20000;
- mysql设置主键自增长和自增长初始值
本文主要向大家介绍MySQL数据库之Mysql创建表实现主键自增并且初始值为200,希望对大家学习MySQL数据库有所帮助. 假设已经创建表test,并且主键为id.Mysql ...
- com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'portal.hibernate_sequence' doesn't exist, 谈谈主键自增的方式
最近几天几天做项目用到了Spring Data JPA,确实是个好东西,省了很多力气.但是由于刚开始用,也遇到不少头疼的问题,如下,调用JpaRepository接口的save方法保存一个对象到数据库 ...
- mysql数据库单表只有一个主键自增id字段,ibatis实现id自增
mysql数据库单表只有一个主键自增id字段,ibatis实现id自增 <insert id="autoid"> insert into user_id ...
- 【mybatis】mybatis中insert 主键自增和不自增的插入情况【mysql】
主键不自增:返回值是插入的条数 <insert id="add" parameterType="EStudent"> insert into TSt ...
随机推荐
- Compose 命令说明
命令对象与格式 对于 Compose 来说,大部分命令的对象既可以是项目本身,也可以指定为项目中的服务或者容器.如果没有特别的说明,命令对象将是项目,这意味着项目中所有的服务都会受到命令影响. 执行 ...
- RDS MySQL内存管理
官方文档地址:https://help.aliyun.com/product/26090.html?spm=5176.7920929.1290474.7.2c6f4f7bACaToi 官方文档地址:h ...
- SonarQube 插件之 Issues Report & SonarLint 的配置及使用
转载自:https://cloud.tencent.com/developer/article/1010599 1.Issues Report Plugins 介绍 使用 Issues Report ...
- CF600E Lomsat gelral (线段树合并)
相当于是线段树合并的模板题,比(雨天的尾巴)还要板. 唯一注意的是线段树的更新,因为同一子树中可能有多种颜色占主导地位,要输出编号和,比如一颗子树中,1出现3次(最多),3出现3次,那么应该输出4. ...
- GitHub 供应链安全已支持 Dart 开发者生态
通过 Dart 和 GitHub 团队的共同努力,自 10 月 7 日起,GitHub 的 Advisory Database (安全咨询数据库).Dependency Graph (依赖项关系图) ...
- 使用 Apache Hudi 实现 SCD-2(渐变维度)
数据是当今分析世界的宝贵资产. 在向最终用户提供数据时,跟踪数据在一段时间内的变化非常重要. 渐变维度 (SCD) 是随时间推移存储和管理当前和历史数据的维度. 在 SCD 的类型中,我们将特别关注类 ...
- Linux基础_7_文本显示
注:实质是针对标准输出文本的各种骚操作! 简单查看 注:初略加工后进行显示. cat -n 文件名 #查看文件内容并显示行号 tac 文件名 #逆序查看 more 文件名 less 文件名 #按?搜索 ...
- 如何实现一个SQL解析器
作者:vivo 互联网搜索团队- Deng Jie 一.背景 随着技术的不断的发展,在大数据领域出现了越来越多的技术框架.而为了降低大数据的学习成本和难度,越来越多的大数据技术和应用开始支持SQL进 ...
- win10操作系统下Android环境配置
Windows命令行调试unity(Android)应用环境变量配置准备步骤:先下载好我们需要的Android SDK和JDK. Android SDK推荐地址:http://tools.androi ...
- Day3:学习Java的第一步:Hello World!
HelloWorld 新建一个文件夹存放代码 新建一个JAVA文件 文件后缀名为.java Hello.java 打开文件扩展名,即可查看到文件类型 运行文件:右键Hello.java文件用notep ...