SQL 6大约束 以及 数据管理(增删改查)

本文涉及的产品
数据管理 DMS,安全协同 3个实例 3个月
推荐场景:
学生管理系统数据库
简介: SQL 6大约束 以及 数据管理(增删改查)

一、六大约束是什么?

1.主键约束(pk:primary key):能够唯一标识这行记录 必须唯一且不能为空

   一个表只能有1个主键 但是这个主键可以由多个列名共同组成

   标识列:自动增长 不能手动维护(作用于int类型的数据)

2.外键约束(fk:foreign key) 表与表之间的关系

3.检查约束(ck:check):性别只能为男或者女 年龄在1-120之间

4.非空约束(not null):地址不能为空

5.默认值约束(default):性别默认为男

6.唯一约束(unique):姓名不能重复

二、学会建库

1.--建库

--建库
create database db_1108
use db_1108
select * from tb_stu--查询全部
--如何代码建班级表 如何代码加约束?
create table tb_class(
    cid int primary key,--班级编号
    cname varchar(50) --班级名称
)
--用脚本创建外键 check(ssex='男' or ssex='女')
create table tb_stu1(
    sid int primary key,
    sname varchar(50) unique null default('aa'),
    cid int references tb_class(cid) --外键
)
/*
插入数据必须先插主表 后从表
删除数据必须先删从表 后主表
*/
-----表与表之间的关系-----
--要分清楚主表和从表
--去从表中设置
-创建db_1110的库
create database db_1110
use db_1110
--创建tb_stu的表
create table tb_stu(
    sid int primary key,
    sname varchar(50),
    ssex varchar(10),
    sage int,
    saddress varchar(100)
)

2.数据管理(增删改查)

代码如下(示例):

--1.增加(插入)
--insert into 表名(你要插入的列名,列名) values(数据,数据)
/*
1.要插入的列名和实际插入的数据要保持个数、顺序以及数据类型一致
2.如果主键设置了标识列,那么不能维护(不能手动赋值)
3.除非你插入的是全部数据,那么列名就可以省略不写(根据表定义顺序)
*/
insert into tb_stu(sid,sname,ssex,sage,saddress)
values(3,'我去波波','女',38,'浪琴湾厕所')
insert into tb_stu(sid,sname,ssex,sage)
values(2,'大毛','女',39)
insert into tb_stu
values('朱小','男',19,'小易易旁边的坑位')
--查询【基础查询】
/*
1.from后面接表名
2.select后面接你要查询的列名,多个列名之间用逗号隔开
3.where后面接要查询的条件,多个条件之间用and/or连接
select 要查询的列名 from 表名 where 条件
between..and:在两者之间
in/not in:在/不在
is null/is not null:为空/不为空
order by 列名 asc/desc
like '%(任意字符)_(单个字符)'
distinct:去除重复
top:前....
50 percent:50%
取别名三种方式:as 空格 姓名=
*/
--查询全部 *代表所有 全部
select * from tb_stu
--查询姓名和性别
select sname,ssex from tb_stu
--查询所有的女生姓名
select sname from tb_stu where ssex='女'
--查询住在浪琴湾厕所的女生信息
select * from tb_stu where ssex='女' and saddress='浪琴湾厕所'
--查询学号为1、3、5的学生姓名 in/not in:在/不在
select sname from tb_stu where sid=1 or sid=3 or sid=5
select sname from tb_stu where sid in(1,3,5)
--查询年龄在10-30之间的学生信息 between..and:在...之间
select * from tb_stu where sage>=10 and sage<=30
select * from tb_stu where sage between 10 and 30
--模糊查询 like  %:代表任意字符 _:代表单个字符
--查询名字中含有'小'的学生信息
select * from tb_stu where sname like '%小%'
--查询姓小的学生信息
select * from tb_stu where sname like '小%'
--查询以小结尾的学生姓名
select sname from tb_stu where sname like '%小'
--查询名字中第二个字为小的学生信息
select * from tb_stu where sname like '_小%'
--排序
--按照年龄升序 order by后面接要按照什么排序 asc:升序(默认) desc:降序
select * from tb_stu order by sage
--按照学号降序
select * from tb_stu order by sid desc
--查询前三条记录 
select top 3 * from tb_stu
--查询后三条记录
select top 3 * from tb_stu order by sid desc
--查询前一半记录  50%
select top 50 percent * from tb_stu
--查询地址为空的学生信息 is null/is not null:为空/不为空
select * from tb_stu where saddress is null
--取别名 查询所有学生的姓名
select sname as 姓名 from tb_stu
select sname 姓名 from tb_stu
select 姓名=sname from tb_stu
--查询所有学生的性别 去重复
select distinct ssex from tb_stu
--修改
/*
update 表名 set 列名=要改成什么 where 要改谁
*/
select * from tb_stu
--把学号为1的学生姓名改成'游乐王子'
update tb_stu set sname='游乐王子' where sid=1
--把住在含有'厕所'地址的男生姓名改成'化石',年龄改成10 
update tb_stu set sname='化石',sage=10
where ssex='男' and saddress like '%厕所%'
--把所有人的年龄增加1岁
update tb_stu set sage=sage+1
--删除
/*
drop:删库/表等对象
delete:删数据
delete from 表名 where 条件
*/
--删除学号为7的学生
delete from tb_stu where sid=7
delete tb_stu where sid=8
增:insert into 表名(列名,列名) values(数据,数据)
删:delete from 表名 where 条件
改:update 表名 set 列名=要修改成谁 where 条件
查:select 要查询的列名(用逗号隔开) from 表名 where 条件

2.1插入注意事项

Student表结构:

列名解释

列名

数据类型

允许空

说明

学员姓名

SName

varchar(10)

学员编号

SCode

int

主键

性别

SSex

char(2)

地址

SAddress

nvarchar(50)

生日

SBirth

Datetime

年级

SGrade

varchar(2)

默认值“1”

邮箱

SEmail

nvarchar(50)

包含“@”符号

--列数和值数要相同。

insert into Student(sname, scode, saddress)

values('范超', 13)

--数据值的摆放顺序要和列的顺序要对应,相对应的类型要匹配

insert into Student(sname, scode, saddress)

values(13, '周干强', '湖南')

--字符和时间类型的列作为数值的时候,必须使用单引号。

insert into Student(sname, scode)

values(凌张, 13)

insert into Student(sname, scode, sbirth)

values('韩生明', 13, 2007-01-01 12:12:12)

--如要获取当天日期和时间可以使用getdate()函数

insert into Student(sname, scode, sbirth)

values('胡兵兵', 13,getdate())

--对于允许为空的字段,可以使用null关键字进行插入

insert into Student(sname, scode, saddress)

values('唐国君', 13, null)

insert into Student(sname, scode)

values('唐国君', 13)

--不能违反主键约束

-- scode已经存在1-10的值

insert into Student(sname, scode, saddress)

values('田帅', 1, '湖南')

--不能违反非空约束

insert into Student(sname, scode, saddress)

values(null, 13, '湖南')

insert into Student(scode, saddress)

values(13, '湖南')

--不能违反检查约束

insert into Student(sname, scode, semail)

values('朱双杏', 13, 'erre.er')

--具有缺省值的列,可以使用DEFAULT关键字,或不往该列插入值

insert into Student(sname, scode, sgrade)

values('吴壕峰', 13, default)

--文俏

--往子表中插入数据的时候,不能违反外键约束

--Score表和Student表通过Studentid字段关联。

--Student表内只有1-10的Studentid

insert into score(studentid, courseid, score, scoreid)

values(100, 1, 80, 3)

--当遇到标识列的时候,不用插入对应的数据值。

--表Test中有字段sid为标识列,现在往表内插入一条数据

insert into test(sid, sname)

values(1, '叶树荣')

--最好明确指定要插入值的列名

insert into Student(sname, scode, saddress, sgrade, semail)

values('朱绩磊', 13, '湖南', null, null)

insert into Student

values('朱绩磊', 13, '湖南', null, null)

 


相关实践学习
MySQL基础-学生管理系统数据库设计
本场景介绍如何使用DMS工具连接RDS,并使用DMS图形化工具创建数据库表。
相关文章
|
3月前
|
SQL 关系型数据库 MySQL
mysql 简单的sql语句,入门级增删改查
介绍MySQL中的基本SQL语句,包括数据的增删改查操作,使用示例和简单的数据表进行演示。
mysql 简单的sql语句,入门级增删改查
|
1月前
|
SQL 数据库
如何应用SQL约束条件?
【10月更文挑战第28天】如何应用SQL约束条件?
67 11
|
1月前
|
SQL 存储 Oracle
sql约束条件
【10月更文挑战第28天】sql约束条件
46 8
|
2月前
|
SQL 存储 数据库
SQL学习一:ACID四个特性,CURD基本操作,常用关键字,常用聚合函数,五个约束,综合题
这篇文章是关于SQL基础知识的全面介绍,包括ACID特性、CURD操作、常用关键字、聚合函数、约束以及索引的创建和使用,并通过综合题目来巩固学习。
62 1
|
2月前
|
数据库
SQL_语句常见的操作创建,使用,删除表和表级约束
SQL_语句常见的操作创建,使用,删除表和表级约束
38 0
|
3月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
70 1
|
4月前
|
SQL 数据管理 关系型数据库
《SQL转换秘籍:Vanna+Qwen双剑合璧,轻松实现私有模型转换》——揭秘如何利用Vanna和Qwen这两款神级工具,让你的SQL数据管理和转换如虎添翼!
【8月更文挑战第17天】Vanna与Qwen是两款优秀的开源数据库管理工具,助力用户高效管理及转换SQL数据。先安装Vanna和Qwen,随后在Vanna中创建并编辑私有模型,定义表结构等。完成模型构建后,导出为SQL文件。接着,在Qwen中导入此文件,并根据目标数据库类型(如MySQL)转换SQL语句。例如,生成创建`users`表的SQL代码。这两款工具显著提升了数据库管理工作流程的便捷性与效率。
206 1
|
4月前
|
Java 测试技术 容器
从零到英雄:Struts 2 最佳实践——你的Web应用开发超级变身指南!
【8月更文挑战第31天】《Struts 2 最佳实践:从设计到部署的全流程指南》深入介绍如何利用 Struts 2 框架从项目设计到部署的全流程。从初始化配置到采用 MVC 设计模式,再到性能优化与测试,本书详细讲解了如何构建高效、稳定的 Web 应用。通过最佳实践和代码示例,帮助读者掌握 Struts 2 的核心功能,并确保应用的安全性和可维护性。无论是在项目初期还是后期运维,本书都是不可或缺的参考指南。
55 0
|
4月前
|
SQL 数据管理 关系型数据库
SQL与云计算:利用云数据库服务实现高效数据管理——探索云端SQL应用、性能优化、安全性与成本效益,为企业数字化转型提供全方位支持
【8月更文挑战第31天】在数字化转型中,企业对高效数据管理的需求日益增长。传统本地数据库存在局限,而云数据库服务凭借自动扩展、高可用性和按需付费等优势,成为现代数据管理的新选择。本文探讨如何利用SQL和云数据库服务(如Amazon RDS、Google Cloud SQL和Azure SQL Database)实现高效的数据管理。通过示例和最佳实践,展示SQL在云端的应用、性能优化、安全性及成本效益,助力企业提升竞争力。
80 0