数据库学习笔记
==============================================================================================
数据库基础知识:
概念:用来保存数据的容器
功能:结构化保存数据
组成:服务(提供了对物理库的增删改查)、物理库(保存到硬盘上的数据)
MySql安装:
位置:安装位置有两个
数据库服务位置:MySql Server
数据库数据文件位置:Server data files
选项:Choosing a Setup Type:第二个 Server only
Type and Netwing:Config Type 第一个:Development Machine 会以最小文件存储
配置:将MySql安装目录下的bin文件夹路径添加到path中
MySql存储结构:
概念:在物理库中可以创建逻辑数据库
库中由表组成
表由记录组成
记录由字段构成
MySql常用命令:
语法:登录MySql:mysql -u root -p //注意这里不输入密码,直接回车
显示:show databases //注意这里有个S
;表示一行sql语句的结束
SQL语句:
分类:DDL(数据库定义语言)、DML(数据库操作语言)、DCL(数据库控制语言)
DDL语句:影响数据结构
DML语句:操作数据,对表中的数据进行增删改查
DCL语句:数据库控制语言,如创建用户,管理用户权限,事务控制
SQL库操作语句:
语法:创建一个库:
create database 库名称[character set 码表名称 collate 字符校对集名称]
这里字符校对集:决定数据库排序的
删除一个库:
drop database 数据库文件名;
修改数据库:
只能修改数据库的校对集和码表
alter database 数据库名 character set utf8 collate utf8_bin; 这里为utf8
选择数据库:
use 想要选择使用的数据库名;
查看当前选择数据库:
select database();
显示创建库的语句:
show create database 数据库名;
MySql数据类型:
分类:字符串类型、数字类型、时间日期类
语法:数字类型
TINYINT 1字节 byte[相当于Java中的数据类型]
SMALLINT 2字节 short
MEDIUMINT 3字节
INT 4字节 int [一般都选择int型]
BIGINT 8字节 long
FLOAT 4字节 float
DOUBLE 8字节 double
DECIMAL 无精度损失
注意:DOUBLE和DECIMAL区别?
DOUBLE类型在运算时会有精度缺失
DECIMAL解决精度丢失问题,底层使用字符串来保存计算数字
当单纯想表示小数属性时,使用DOUBLE
当需要频繁计算小数并且要求精度时使用DECIMAL
字符串类型
短字符串类型:CHAR/VARCHAR(最大长度255字节)
注意:CHAR和VARCHAR的区别?
CHAR定长字符串,VARCHAR表示可变长字符串
用例:例如同时指定长度为10,当存储abc时CHAR会存储为:'abc '
VARCHAR类型会存储为:abc
在实际的开发过程中,使用VARCHAR比较多,CHAR用在表示固定长度的枚举
长字符串类型:TEXT/CLOB和BLOB
注意:当要保存的内容操作255字节时使用
TEXT保存文本,字符流,java中的writer字符流
CLOB其他数据库常有,但MySql中没有,相当于MySql的TEXT
BLOB保存字节,字节流,java中的stream字节流
在实际开发中一般用不到字节流
TEXT和BLOB的区别?
TEXT:只能存储字符数据
BLOB:可以存储字符和多媒体信息(图像、声音、图片等)
日期时间类型
日期:date 只记录日期 2015-01-14
时间:time 只记录时间 11:36:25
年份:year 只记录年份 2015
时间日期:datetime 记录使劲日期 2015-01-04 11:36:25
timestamp 同上
datetime和timestamp区别?
这两种类型记录的数据是一模一样的
区别在于插入的时候,如果插入datatime类型时如果不为其赋值则为NULL
插入timestamp的时候,如果不为其赋值默认去插入的时间作为默认值
MySql表语句:
创建:CREATE TABLE table_name
(
列名 列类型 约束/主键 auto_increment,
列名 列类型 约束,
列名 类类型 约束
)[character set 字符集 collate 校对规则]
注意:这里使用的是圆括号而不是花括号
用例:create table t_user
(
id int,
name varchar(20),
sal double(4,3), //这里指定了字段的宽度和精度
birthday datetime,
hiredate timestamp
);
查看:查看当前数据库中有哪些表:show tables;
查看表的结构:desc 表名; //description缩写
删除:drop table 表名;
修改:alter table 表名;
增加一列:alter table 表名 add 列名 列类型;
修改一列:alter table 表名 modify 列名 列类型; //此处为修改列的类型
alter table 表名 change 旧列 新列名 新类型; //此处为修改列的名称
删除一列:alter table 表名 drop 列名;
修改表名:rename table 表名 to 新表名;
约束:保证数据的完整性
类别:非空约束(not null)、唯一约束(unique)、主键约束(primary key)
非空约束:在插入记录时,必须包含值
唯一约束:该列的内容在表中,值是唯一的
主键约束:非空+唯一 约束
语法:主键自增 auto_increment
用例:id int primary key auto_increment,
注意:主键自增的数据类型一定是数字型的
主键自增是不可回退的
注意:唯一约束可以给多个列加而主键约束只能有一个主键约束
用例:
CREATE TABLE t_suer2(
id INT PRIMARY KEY,
NAME VARCHAR(20) UNIQUE NOT NULL
)
可视工具:SQLyog //安装不运行,导入注册表激活,X64版本不稳定
DML语句学习:
功能:增加语句
语法:insert into 表名 [(列1,列2...)] values (值1,值2...)
功能:删除语句
语法:delete from 表名 [条件]
注意:如果不指定条件则将会删除表中的所有的记录
truncate table 表名; //删除整张表
delete和truncate方式删除整张表的区别:
delete:是逻辑上的删除,硬盘文件并不被删除
truncate:是物理删除,将整张表和表结构都删除掉
功能:修改语句
语法:update 表名 set 列1=值1,列2=值2,...[where 条件1,条件2]
注意:如果是工资:可以 update employee set salary = salary+1000 where ...
功能:查询语句
语法:查询全部:select * from 表名[where 条件];
查询指定:select 列1,列2,列3 from 表名[where 条件]; //这个效率高一些
条件查询:=、!=、<>、<、<=、>、>=
BETWEEN ... AND ...
用例:where age between age > 20 and age < 40;
where age between 20 and 40;
IN(SET)
注意:这里set表示集合
用例:select * from table_name sid in ("S_1001","S_1002","s_1003");
IS NULL
注意:NULL不等于NULL
与NULL进行运算结果也为NULL
IS NOT NULL
AND
OR
NOT
注意:可以使用()将多个的分条件整合成一个条件
模糊查询:where 字段 like '表达式';
% 匹配任意字符
_ 匹配单个字符
去重复查:DISTINCT
用例:select distinct 列名 from 表名
分组查询:简化查询语句
语法:group 需要分组的列;
功能:按给定的分组参数(参数中有重复的)查询
用例:select * from 表名;
注意:可以使用HAVING查询应用后的分组,也即分组之后加条件
分组之前加条件和分组之后加条件:分组之前加条件效率更高
group by deptno HAVING SUM(sal)>9000;
limit查询:MySql独有的
语法:limit参数1,参数2;
功能:从总记录的参数1指定索引开始查,查的条数为5条
用例:在分页当中用法,实际上这里起到了分页的作用
排序查询:将给定的记录排序显示
语法:order by 排序方式
升序:asc
降序:desc
MySql函数:
语法:IFNULL(参数1,参数2);
功能:判断所给指定参数是否为空,如果为不为空则返回给定的参数1,否则返回参数2
概念:聚合函数
语法:COUNT
功能:统计指定的不为NULL的记录的行数并统计记录数
用例:select COUNT(*) from emp;
select COUNT(列名) from emp;
语法:MAX
功能:查找给定记录中的最大值
语法:MIN
功能:查找给定记录中的最小值
语法:SUM
功能:查找给定记录中的总值
用例:select sum(sal) + sum(comm) from emp;
select sum(sql + IFNULL(comm,0)) from emp;
注意:SUM函数如果遇到NULL则会不让其参与运算
语法:AVG
功能:查找给定记录中的平均值
注意:当一次使用多个聚合函数的时候可以使用 , 分隔:select MAX(cal),MIN(comm)
MySql别名:
语法:select name as "别名"
select name "别名"
select name 别名
功能:执行查询结果用别名显示
乱码问题:
语法:set character_set_client=gbk
set character_set_results=gbk
欢迎指出错误和不足之处