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 ...
随机推荐
- Django命令
(venv) E:\Py_CODE\myapp>python manage.py --help Type 'manage.py help <subcommand>' for help ...
- ETL工具Datax、sqoop、kettle 的区别
一.Sqoop主要特点: 1.可以将关系型数据库中的数据导入到hdfs,hive,hbase等hadoop组件中,也可以将hadoop组件中的数据导入到关系型数据库中: 2.sqoop在导入导出数据时 ...
- 虚拟线程 - VirtualThread源码透视
前提 JDK19于2022-09-20发布GA版本,该版本提供了虚拟线程的预览功能.下载JDK19之后翻看了一下有关虚拟线程的一些源码,跟早些时候的Loom项目构建版本基本并没有很大出入,也跟第三方J ...
- (数据科学学习手札144)使用管道操作符高效书写Python代码
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,一些比较熟悉pandas的读者 ...
- C语言实现扫雷游戏(完整版)
头文件定义.函数声明 下面就是扫雷中使用到的所有函数,为了省事我把所有的代码都放在一个C文件中实现 宏定义中设置了游戏的界面布局,以及设置地雷的个数(这里默认的是10个地雷),界面是一个9*9的方格布 ...
- GO编译时不避免引入外部动态库的解决方法
简介 最近碰到一个问题,有一个流量采集的组件中使用到了github.com/google/gopacket 这个库,这个库使用一切正常,但是唯独有一个缺点,编译后的二进制文件依赖于libpcap.so ...
- 面向对象day02,作业学生类,电脑类
学生类,电脑类,测试类 学生类:解释都写在注释里面 public class Student { public String name; public int id; public char gend ...
- 如何使用IDEA创建一个简单的java工程?
文章目录 1.创建新工程 1.1 新建项目 1.2 在src目录下创建package 1.3 在包下创建类 2.编写代码.运行项目 2.1 编写代码 2.2 运行结果 3.开心的从eclipse转移到 ...
- Mysql入门练习题
1.在students表中,查询年龄大于25岁,且为男性的同学的名字和年龄 mysql> select name,age from students where age>25 and ge ...
- DTSE Tech Talk | 第9期:EiPaaS驱动企业数字化转型
摘要: 揭秘华为企业集成新模式. 本期直播详解 组装式概念解析 EiPaaS的核心技术能力 华为实践经验分享 EiPaaS未来的技术趋势 直播讲师:华为云PaaS DTSE布道师 傅翌伟 tips:E ...