MYSQL数据库知识

一、ADO主要包括Connection,Recordset和Command三个对象
主要功能如下:
Connection对象: 打开或连接数据库或数据文件;
Recordset对象: 存取数据库的内容
Command对象: 对数据库下达行动查询指令(SELECT,INSERT,UPDATE,DELETE),或调用存储过程。

二、系统数据库:
master数据库:是数据库管理系统中最重要的数据库.该数据库包含:所有用户的登录信息,用户所在的组,所有系统的配置选项,服务器中本地数据库的名称和信息等.
model数据库:是数据库管理系统中创建的一个数据库模板,希望所有的数据库中都有一个相同的数据表,创建的数据库以model数据库中的数据为模板进行创建.
msdb数据库:是一个windows服务,该服务用来运行制定计划任务.
tmpdb数据库:是一个临时数据库,用于存放临时对象和中间结果,当关闭SQL Server时,该数据库中的内容被清空,当重新启动后,该数据库被重建.

主数据库:mdf
次数据文件:ndf
日志文件:ldf

三、SQL示例代码
/* 


  * 绘制E-R图
  *               姓名                          姓名
  *                |                             |
  *            +--------+                    +--------+
  *    年龄<<--| 教师表 | -->>性别   年龄<<--  | 学生表 | -->> 性别
  *            +--------+                    +--------+
  *                 \                   /--------/
  *                  \1                N
  *                   /\              /\
  *                  /  \            /  \
  *                 |授课|          |上课|
  *                  \  /            \  /
  *                   \/              \/
  *                    N +--------+ 1_/
  *                     \| 班级表 |/
  *                      +--------+  
  *
  */


-- 创建数据库
Create Database DB_DATA
on primary   -- 定制数据库主文件的属性
(
	name	 = 'DB_DATA'   
	,filename = 'c:\database\DB_DATA.mdf' -- 主文件的文件路径
	,size = 10MB  -- 主文件的起始字节数
	,maxSize = 20MB -- 主文件的最大字节数
	,FileGrowth=5% -- 主文件的增长大小,可百分比,也可使用字节数
)
log on -- 定制日志文件的属性,参数的含义和主文件的参数一样
(
	name	 = 'DB_DATALog'   
	,filename = 'c:\database\DB_DATALog.ndf' 
	,size = 10MB
	,MaxSize = 20MB
	,FileGrowth=10%
)


use DB_DATA
go



/** 非空约束 : not null      语法: 直接使用
  * 主键约束 : primary key   语法: 直接使用
  * 默认约束 : default       语法: default(默认值)
  * 检查约束 : check         语法: check(表达式)
  * 外键约束 : foreign key   语法: constraint 约束名 foreign key references 其他表名(其他表字段)
  * 唯一约束 : unique        语法:直接使用
  */

-- 创建教师表
Create Table Teacher
(
	id  int primary key identity(0,1), -- int 类型的id,主键约束, identity是一个默认的增量,从0开始,每添加一行记录就会增加1
	姓名 char(20) not null,   -- char类型的姓名, 非空约束
	性别 char(2) check(性别='男' or 性别='女'),  -- char类型的性别,检查约束,
	年龄 int default(18) -- int 类型的年龄, 默认约束
)

-- 为Teacher添加约束
-- Constraint:约束关键字,
-- DK_默认约束 : 约束的标识符
Alter Table Teacher
 Add Constraint DK_默认约束 default('男') for 性别  -- 默认约束

 
Alter Table Teacher 
 Add Constraint CK_检查约束 check(年龄>=18 and 年龄 <= 45) -- 检查约束


-- 创建班级表
Create Table Class
(
	id  int primary key identity(0,1),
	班级名 char(20) ,
	班级人数 int,
	教师id int 
)

-- 为班级表添加约束
Alter Table Class
 Add Constraint  UK_唯一约束 unique(班级名) -- 唯一性约束

-- -- 所属班级的id ,属于外键,为班机表添加外键约束
Alter Table Class
 Add constraint FK_CLassToTeacher foreign key(教师id)  references Teacher(id)


-- 创建学生表
Create Table Student
(
	id int primary key identity(0,1),   -- 学生id
	姓名 char(20) not null ,    
	性别 char(2) default('男') check(性别='男' or 性别='女'), 
	年龄 int default(18) check(年龄>=12 and 年龄 <= 50), 
    
    -- 所属班级的id ,属于外键
	班级id int constraint FK_StudentToClass foreign key references Class(id)
)


-- 插入数据到教师表
insert into Teacher
(姓名,性别,年龄)
values('杨老师','男',35),
('张老师','男',40),
('李老师','男',30),
('王老师','男',28),
('韦老师','男',18)

Select * from Teacher


Insert into Class
(班级名,班级人数,教师id)
Values('17期',23,1)

-- 插入数据到班级表
-- 声明要使用的变量
Declare @杨老师id int
Declare @张老师id int
Declare @李老师id int
Declare @王老师id int
Declare @韦老师id int
-- 获取对应老师的id 
select @杨老师id=id from Teacher where 姓名='杨老师'
select @张老师id=id from Teacher where 姓名='张老师'
select @李老师id=id from Teacher where 姓名='李老师'
select @王老师id=id from Teacher where 姓名='王老师'
select @韦老师id=id from Teacher where 姓名='韦老师'


-- 开始插入数据
insert into Class
(班级名,班级人数,教师id)
values('18期',6, @杨老师id),
('19期',7,@张老师id),
('20期',8,@王老师id),
('21期',5,@杨老师id)



-- 插入信息到学生表
-- 声明要用到的变量
declare @班级18ID int
declare @班级19ID int
declare @班级20ID int
declare @班级21ID int

-- 得到对应班级别的id 
-- 使用select语句查询表中的18期,并将查询好的记录中的id字段的值赋值给局部变量
Select @班级18ID = id From Class where 班级名='18期'
Select @班级19ID = id From Class where 班级名='19期'
Select @班级20ID = id From Class where 班级名='20期'
Select @班级21ID = id From Class where 班级名='21期'

-- 开始插入数据
insert into Student
(姓名,性别,年龄,班级id)
values('杨二狗','男',18,@班级18ID),
('芙蓉','女',28,@班级18ID),
('赵四','男',20,@班级18ID),
('麻五','男',41,@班级18ID),
('工人1','女',23,@班级18ID) ,
('工人2','男',13,@班级19ID) ,
('工人3','男',41,@班级19ID) ,
('工人4','女',42,@班级19ID) ,
('工人5','男',36,@班级19ID) ,
('工人6','男',34,@班级19ID) ,
('工人7','男',24,@班级19ID) ,
('工人8','女',16,@班级21ID) ,
('工人9','女',37,@班级20ID) ,
('大神1','男',41,@班级20ID) ,
('大神2','男',42,@班级20ID) ,
('大神3','男',34,@班级20ID) ,
('大神4','女',33,@班级20ID) ,
('大神5','男',27,@班级20ID)


-- 普通查询
Select * From Student



-- 查询指定的列
select 姓名,性别,年龄 From Student



-- 在查询时,对字段进行改名输出
Select 姓名 as  name , Sex = 性别 , Age = 年龄 From Student

-- 使用等于号也能够完成和上一行相同的功能
Select name = 姓名 , Sex = 性别 , Age = 年龄 From Student



-- 在查询时,过滤部分内容,只输出符合条件的内容
Select * From Student
	where 年龄>=20 and 年龄<=25 and 性别 = '女'



-- 过滤查询,输出名字中姓大的,并且年龄在30到40岁之间的学生。
Select * From Student
	where 姓名 like '大%' and 年龄>=30 and 年龄<= 40 

-- _ 只通配一个字符
-- [abcd] 
-- 过滤查询, 输出20,25,30岁的学生
Select * From Student
	where 年龄 in(20,25,30) 


-- 多表查询 : 简单地将两个表的所有内容输出(输出的条目数一共是表1条目数 * 表2条目数)
Select * From Student , Class


-- 多表过滤查询 (输出的条目数是表1的条目数,靠近 from 关键字的表是表1,也叫作左表)
Select * From Student , Class
	where Student.班级Id = Class.id


-- 多表查询,只输出指定字段
select Student.姓名,Student.性别,Student.年龄,Class.班级名,Class.班级人数,Teacher.姓名,Teacher.性别,Teacher.年龄 
	from Student,Class,Teacher
		where Student.班级Id = Class.id and Class.教师id = Teacher.id


-- 嵌套查询 , 只输出20期的学生,且
-- 先执行最内层的查询,最内层的查询把班级名对应的id找到
select * From Student 
	where Student.班级Id in 
	(
		select id From Class where 班级名 =  '20期'
	)

-- 下面这行代码等同于上一条语句
select * From Student 
	where Student.班级Id in(4)


-- 多表查询
-- 查询所有学生的信息(本人信息,所属班级信息,班级所属教师信息
select Student.姓名,Student.性别,Student.年龄,Class.班级名,Class.班级人数,Teacher.姓名,Teacher.性别,Teacher.年龄 
	from Student,Class,Teacher
		where Student.班级Id = Class.id and Class.教师id= Teacher.id


-- 排序输出:按姓名的拼音排序输出
select * From Student
	Order By Student.姓名




-- 排序输出:按年龄排序输出,升序
select * From Student
	Order By  Student.年龄 ASC

-- 排序输出:按年龄排序输出,降序
select * From Student
	Order By  Student.年龄 DESC



-- 分组输出(用于配合聚合函数)
-- 统计表中各个班级id出现的次数
select 班级Id , count(*) From Student 
	group by 班级Id


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值