结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以 及查询、更新和管理关系数据库系统。
SQL优点:
不是某个特定数据库供应商专有的语是言,几乎所有DBMS都支持SQL 简单易学,灵活使用可以进行非常复杂和高级的数据库操作
DDL
数据(结构)定义语言DDL(Data Definition Language),是用于创 建和修改数据库表结构的语言。
常用的语句:create(创建) ,alter(修改),drop(删除),rename
数据类型
字符类型
char(n) 长度为n的定长字符串,最大长度255个字符
varchar(n) 最大长度为n的可变长字符串
日期时间类型
date 日期, 包含年月日
datetime 年月日 时分秒
整数类型:
TINYINT 1字节
SMALLINT 2字节
MEDIUMINT 3字节
INT 4字节
BIGINT 8字节
浮点型
decimal(a,b) a是该数有几位,b是小数点后有几位
TEXT列字符字符串
TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT
表中操作
约束
-- 主键约束,一个表只能有一个主键,AUTO_INCREMENT可以设置INT型主键自动增长
-- not null 不可为空约束
-- unique 唯一约束,被设置的目标不可以为空
-- check 检查约束,满足检查条件的数据才能成功添加
--外键约束
设置部分功能
1.comment
设置注释
2.default
设置默认值
于是id,name和gender有了注释
gender被默认设置为男
3.删除表
drop
4.修改表名
rename
5.修改表的编码集
alter
6.复制表结构
create table,创建一个结构和原来表相同的新表
由是获得stu0
DML
数据操纵语言DML(Data Manipulation Language)
常用语句: insert,delete,update
1..在指定表中插入数据
insert into
2.修改表中语句
update
3.删除表中语句
delete
DQL
1.符号
在数据库中+-*/只能进行算术,没有其他作用
如此,查询结果中的id大小比原本多了10.
2.concat
拼接函数
3.为查询结果起别名
在此为id加10后的结果取名newid
4.distinct
删除选项中的重复行,并返回结果
单行函数
字符函数
length():获取参数值的字节个数
char_length()获取参数值的字符个数
concat(str1,str2,.....):拼接字符串
upper()/lower():将字符串变成大写/小写
substring(str,pos,length):截取字符串 位置从1开始
instr(str,指定字符):返回子串第一次出现的索引,如果找不到返回0
trim(str):去掉字符串前后的空格或子串,trim(指定子串 from 字符串)
lpad(str,length,填充字符):用指定的字符实现左填充将str填充为指定长度
rpad(str,length,填充字符):用指定的字符实现右填充将str填充为指定长度
replace(str,old,new):替换,替换所有的子串
逻辑处理函数
数学函数
round(数值):四舍五入
ceil(数值):向上取整,返回>=该参数的最小整数
floor(数值):向下取整,返回<=该参数的最大整数
truncate(数值,保留小数的位数):截断,小数点后截断到几位
mod(被除数,除数):取余,被除数为正,则为正;被除数为负,则为负
rand():获取随机数,返回0-1之间的小数
日期函数
now():返回当前系统日期+时间(年月日时分秒)
curdate():返回当前系统日期,不包含时间(年月日)
curtime():返回当前时间,不包含日期(时分秒)
获取指定的部分,年、月、日、小时、分钟、秒
YEAR(日期列),MONTH(日期列),DAY(日期列) ,HOUR(日期列) ,MINUTE(日期列) SECOND(日期列)
str_to_date(字符串格式日期,格式):将日期格式的字符转换成指定格式的日期
date_format(日期列,格式):将日期转换成字符串
datediff(big,small):返回两个日期相差的天数
分组函数
分组函数用来做统计作用
sum 求和、avg 平均值、max 最大值、min 最小值、count 计数 (非空)
其中,sum,avg只能用于处理数值型
max,min,count可以处理任何数据类型 2.以上分组函数都忽略null值
分组函数查询的字段要求是group by分组后的字段
逻辑运算符
and(与) or(或) not(非)
基础查询
模糊查询 LIKE : 一般和通配符搭配使用,用来判断是否包含某些字符.
通配符: %
between and: and左右两个值,判断是都在该区间内;
in 判断某字段的值是否属于in列表中的某一项
IS NULL(为空的)或 IS NOT NULL(不为空的)
union和union All
union和unionall都会将两个查询的结果链接起来,但是区别在于union会去除重复项,而union不会.
order by子句
order用来对结果进行排序,desc是降序,asc是升序,默认不写也是升序
limit子句
对查询的显示结果限制数目 (sql语句最末尾位置)前面的数字是起始位置,后面的是查几个数据)
多表设计
数据库设计三范式
第一范式:所有的元素都不能再分解
第二范式:有主键,其他元素都依赖于主键
第三范式:每列都和主键列直接相关,不可以间接相关,并且表中不能包含其他表中的非主键值
添加外键
CONSTRAINT 约束名 foreign key(外键在本表的名字) references 外键表名(外键在外表的名字)
约束名规则::FK_外键表名字_本表名字_On_外键在本表名字
添加约束后,会有以下效果:
主表指的是外键来源的表,从表是本表
1、当主表中没有对应的记录时,不能将记录添加到从表
2、不能更改主表中的值而导致从表中的记录孤立
3、从表存在与主表对应的记录,不能从主表中删除该行
4、删除主表前,先删从表
如果是创建表完成后添加,格式如下:
fk_外表名_本表名_on_本表外键 FOREIGN KEY(本表外键) REFERENCES 外表名(外表外键)
ALTER TABLE stu03 ADD CONSTRAINT fk_stu03_major_on_majorhaoma FOREIGN KEY(majorhaoma) REFERENCES major(haoma)
关联查询
自连接
在该查询中,相当于是开辟了一样的自己,然后分而比较
内连接
只将满足条件的内容筛选出来
左外连接
右外连接
子查询
出现在其他语句中的select语句,称为子查询或内查询;外部的查询语句,称为主查询或外查询.
分类:按子查询出现的位置
from后面:支持表子查询
where:支持标量子查询,列子查询
按功能、结果集的行列数不同:
标量子查询(结果集只有一行一列)
结果集中只有一行一列,一个1.75m的人
列子查询(结果集只有一列多行)
表子查询(结果集一般为多行多列)
子查询结果为多行多列,该查询中,子查询查询出几个专业号和该专业最高的个子,再通过内连接进行筛选.
JDBC
JDBC搭建
1.导入mysql的jar文件
2.加载驱动类
加载驱动类有两种方式,二选一即可
3.建立与数据库的连接,获取数据库对象
4.发送数据
5.关闭连接
JDBC增删改
方法一Statement
Connection对象调用createStatement()方法创建Statement对象,Statement对象调用excuteUpdate()方法对数据库进行操作
对传来的数据要用'"++"'框起来
增加
修改
删除
方法二PreparedStatement
Collection对象调用prepareStatement()方法创建PreparedStatement对象,并在构造器中选择要进行的操作,然后对操作进行赋值,最后调用executeUpdate()方法执行程序.
这种方法,传来的参数不需要拼接,先在预编译中用?占位,再在赋值操作中添加即可
新增
修改
删除
Statement和PreparedStatement的区别
二者都是向数据库发送sql,但是Statement是直接将参数拼接到sql中,要拼接字符串,安全性差(可拼接or 1=1来对数据库数据进行攻击);PreparedStatement先用?占位,然后通过setObject()方法赋值.在赋值时会进行检测,防止通过sql注入攻击,是安全可靠的
JDBC查询
根据编号查询结果只有一个的信息.
在做好配置后,仍然使用PreparedStatement来发送文件,PreparedStatement的对象调用executeQUery()方法查询结果,将查询结果封装在ResultSet对象中.再用Result调用next()方法判断是否查询到结果.因为我们查询的是学生信息,所以最后将结果封装在Student类的对象中返回.
查询返回结果为多个的信息
与返回一个结果不同的是,该情况将查询的结果一一存储在集合中,然后将集合返回.