一、六大约束是什么?
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)