首页 > 数据库 >Java登陆第六天——SQL之约束

Java登陆第六天——SQL之约束

时间:2023-11-14 20:13:13浏览次数:30  
标签:insert Java into 第六天 values SQL null com 主键

约束

约束用于确保数据库的数据满足特定的规则,多个约束可以作用于一个字段上。

在mysql中,约束一般有:
primary key(主键)
not null(非空)
unique(唯一)

primary key(主键)

主键是唯一标识每一行的列(行也叫字段)

主键拥有以下特性:

  • 两种指定方式:
    1. 创建表时指定:字段名 字段类型 primary key
    2. 创建表时最后写:primary key(列名)
  • 主键不能重复且不能为null。
  • 一张表最多只能有一个主键,但可以是复合主键

两种指定方式

主键的两种声明方式。

--第一种,创建表时指定
create table t3(
id int primary key,
name varchar(50),
email varchar(50)
);

--第一种,创建表时最后写
create table t4(
id int,
name varchar(50),
email varchar(50),
primary key(id)
);

主键不能重复且不能为null

顾名思义,约束为主键的列,它的行不能重复且不能为null。

准备数据

--id被指定为主键。
create table t1(
id int primary key,
name varchar(50),
email varchar(50)
);

insert into t1 values(1,'阿卡丽','akali@asd.com');
insert into t1 values(2,'手机壳','shoujike@aqwe.com');

栗子:
在t1表中插入数据(1,'大树','dsax@asdas.com')
在t1表中插入数据(null,'莫伊','asd@dqwe.com')

SQL语句:

insert into t1 values(1,'大树','dsax@asdas.com');
insert into t1 values(null,'莫伊','asd@dqwe.com');

程序运行结果:
image

一张表最多只能有一个主键,但可以是复合主键

准备数据

create table t2(
id int primary key,
name varchar(50) primary key,
email varchar(50)
);
--ERROR 1068 (42000): Multiple primary key defined
--复合主键要使用第二种声明方式

create table t2(
id int,
name varchar(50),
email varchar(50),
primary key(id,name)
);

insert into t2 values(1,'阿卡丽','akali@asd.com');
insert into t2 values(2,'手机壳','shoujike@aqwe.com');

栗子:
在t2表中插入数据(1,'大树','dsax@asdas.com')
在t2表中插入数据(1,'阿卡丽','qwe@safsa.com')

SQL语句:

insert into t2 values(1,'大树','dsax@asdas.com');
insert into t2 values(1,'阿卡丽','qwe@safsa.com');

程序运行结果:
image

因为t2表中主键是由id+name组成的复合主键,所以第二条语句无法执行。

not null(非空)和unique(唯一)

非空拥有以下特性:
not null指定的列,行不能为null。

唯一拥有以下特性:
unique指定的列,行不能重复。
行可以为null,如果该列没有被not null约束,可以有多个null。

准备数据

create table t5(
id int primary key,
name varchar(50) unique not null,
email varchar(50) unique
);

insert into t5 values(1,'大树','dsax@asdas.com');
insert into t5 values(2,'阿卡丽','qwe@safsa.com');

栗子:
在t5表中插入数据(3,'明烛',null)
在t5表中插入数据(4,'大树','qwe@saf.com')
在t5表中插入数据(5,null,null)
在t5表中插入数据(6,'玻璃杯',null)

SQL语句:

insert into t5 values(3,'明烛',null);
insert into t5 values(4,'大树','qwe@saf.com');
insert into t5 values(5,null,null);
insert into t5 values(6,'玻璃杯',null);

程序运行结果:
image

第一条成功插入,

第二条name相同,

第三条name为null,

第四条成功插入,因为unique可以为null,且email没有被not null约束,可以有多个null。

标签:insert,Java,into,第六天,values,SQL,null,com,主键
From: https://www.cnblogs.com/Ocraft/p/17832415.html

相关文章

  • Java -- Stream流用法
    1.前言流是Java8API添加的一个新的抽象,称为流Stream,以一种声明性方式处理数据集合,侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式。Stream流是从支持数据处理操作的源生成的元素序列,源可以是数组、文件、集合、函数。流不是集合元素,它不是数据结构并不保存数据......
  • JavaWeb--Servlet执行流程&生命周期
    Servlet的执行流程 Servlet生命周期 1、初始化使用了init()方法,只调用一次。2、提供服务使用service()方法(1)、调用时机:servlet被访问时,调用该方法(2)、调用次数:每一次servlet被访问就调用一次 3、服务中止时使用destory()方法,servlet对象被销毁调用时机:内存释放或者服务关闭的......
  • JavaScript知识点
    JavaScript提供的异步模式1、回调函数(callbacks)2、事件监听3、Promise对象call、apply的区别call和apply都是改变this指向的方法,区别在于call可以写多个参数,而apply只能写两个参数,第二个参数是一个数组,用于存放要传的参数。call和apply的好处用call和apply实现更好的继承和扩展,更......
  • 2023年最新!Java17于win10环境下的安装配置
    2023年最新!Java17于win10环境下的安装配置链接分享:oracle官网,Java17.exe,java17.zip导航目录2023年最新!Java17于win10环境下的安装配置导航一、下载Java17二、安装Java三、配置Java环境变量四、检验一、下载Java17这里使用Java17.exe程序为例,首先我们可以根据上面我给出的链......
  • MYSQL 事务的底层原理
    事务的底层原理在事务的实现机制上,MySQL采用的是WAL:Write-aheadlogging,预写式日志,机制来实现的。在使用WAL的系统中,所有的修改都先被写入到日志中,然后再被应用到系统中。通常包含redo和undo两部分信息。为什么需要使用WAL,然后包含redo和undo信息呢?举个例子,如果一......
  • 前端学习-JavaScript学习-JavaScript高级程序设计-第2章笔记
    在HTML中使用JavaScript元素<script>元素元素属性MDN<script>:脚本元素属性使用状态描述charset可选、少用字符集defer可选、少用表示脚本可以延迟至文档完全被解析后实行,部分浏览器不支持language废弃编写代码使用的语言src可选包含要执行代码的......
  • Windows下如何快速移动MySQL/MariaDB数据库文件
    近期遇到一个要迁移数据库的问题,用户说不希望数据库文件存在于C盘。查了一下资料,这里做个总结。这个方法适用于MySQL和MariaDB。 步骤如下:1、停止数据库服务2、将数据库移动到需要迁移的路径3、修改安装路径data目录下的my.ini文件4、将 datadir=xxx改成需要迁移的路径5......
  • SQL查询是否存在的优化
    sql查询一般都喜欢用 SELECTcount(*)会查询很多数据。建议换成下面这种:SELECT 1 FROM table WHERE a = 1 AND b = 2 LIMIT 1只查询1条数据,让数据库查询时遇到一条就返回,不要再继续查找还有多少条了。 ......
  • mysql5.7安装插件udp(lib_mysqludf_sys)
    项目应用中需要用mysql执行一下命令行.几经搜索可以安装lib_mysqludf_sys插件可以实现本地window环境安装(mysql8.0,64位,使用lib_mysqludf_sys.dll文件)--查看环境中插件目录showvariableslike'%plugin%';--plugin_dir C:/mysql/lib/plugin/--将lib_mysqludf_sys......
  • pgsql 查询对应模式下的表结构语句
    selecttable_name,column_name,data_type,udt_name,table_catalog,table_schema,table_name,column_name,ordinal_position,column_defaultfrominformation_schema.columnswheretable_schema='{schema}'andtab......