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

文章介绍了SQL数据库中的六种主要约束,包括主键、外键、检查、非空、默认值和唯一约束,并详细讲解了如何创建数据库、表以及添加约束。此外,还阐述了数据管理的基本操作,如插入、查询、更新和删除数据,以及在处理这些操作时需要注意的事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sql数据库

文章目录

一、六大约束是什么?

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)

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑶大头*^_^*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值