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)

 


相关文章
拿php写个原生增删改查案例出来(提供全部代码+sql)
拿php写个原生增删改查案例出来(提供全部代码+sql)
拿php写个原生增删改查案例出来(提供全部代码+sql)
|
7月前
|
SQL 测试技术 数据处理
软件测试|SQL DEFAULT约束怎么用?
软件测试|SQL DEFAULT约束怎么用?
64 0
|
7月前
|
SQL 数据采集 关系型数据库
软件测试|一篇文章带你深入理解SQL约束
软件测试|一篇文章带你深入理解SQL约束
72 0
|
6月前
|
SQL 关系型数据库 MySQL
Python 与 MySQL 进行增删改查的操作以及防止SQL注入
Python 与 MySQL 进行增删改查的操作以及防止SQL注入
133 0
|
2月前
|
SQL 开发框架 .NET
ASP.NET Web——GridView完整增删改查示例(全篇幅包含sql脚本)大二结业考试必备技能
ASP.NET Web——GridView完整增删改查示例(全篇幅包含sql脚本)大二结业考试必备技能
33 0
|
3月前
|
SQL 存储 关系型数据库
MySQL索引原理(索引、约束、索引实现、索引失效、索引原则)以及SQL优化
MySQL索引原理(索引、约束、索引实现、索引失效、索引原则)以及SQL优化
135 1
|
4月前
|
SQL Oracle 关系型数据库
SQL PRIMARY KEY 约束- 唯一标识表中记录的关键约束
SQL NOT NULL 约束用于强制确保列不接受 NULL 值。这意味着该字段始终包含一个值,而不允许插入新记录或更新记录时不提供此字段的值。
95 0
|
4月前
|
SQL Oracle 关系型数据库
SQL FOREIGN KEY 约束- 保障表之间关系完整性的关键规则
SQL FOREIGN KEY 约束用于防止破坏表之间关系的操作。FOREIGN KEY 是一张表中的字段(或字段集合),它引用另一张表中的主键。具有外键的表称为子表,具有主键的表称为被引用表或父表。
87 0
SQL FOREIGN KEY 约束- 保障表之间关系完整性的关键规则
|
7月前
|
SQL
删除SQL表数据时存在约束的解决方法
删除SQL表数据时存在约束的解决方法
138 0
|
7月前
|
SQL 关系型数据库 MySQL
SQL进阶之约束、索引
本实验带您学习SQL约束、索引、ALTER TABLE语句和AUTO INCREMENT字段的使用方法。
57 0