赞
踩
我们每天使用互联网产品会产生大量的数据,例如使用微信产生的很多聊天记录,在微信里发的朋友圈图片,使用百度搜索的各种内容,使用淘宝进行购物的记录等,这些数据都存储在数据库中,所以,学好数据库可以让程序员在编程世界中如虎添翼。
在需要保存用户的数据的情况下,随着用户数量的增加,数据量越来越大,使得一种专门管理数据的软件应运而生,编写应用程序的时候,数据读写的功能就大大地被简化了。对于程序员来说,懂得一种数据库管理系统无疑是必须的。
MySQL是关系型数据库管理系统
之一,属于Oracle旗下管理系统,作为一种开源的轻量级数据库,在开源数据库中比较流行,由于其小巧安装方便快捷的特性,经常用于互联网公司,同时维护也比较方便,追求稳定的性能和易用性。
DBMS负责执行SQL语句,通过执行SQL语句来操作DB当中的数据
create database 数据库名;
use 数据库名;
show databases;
show tables;
show tables from 数据库名;
select database();
select version();
想要终止一条正在编写的语句,输入\c
\q、QUIT或EXIT
desc 表名;
show create table 表名;
insert into 表名(字段名1,字段名2,字段名3 ...) values(值1,值2,值3 ...);
delete from 表名 where 条件;
update 表名 set 字段名1 = 值1,字段名2 = 值2 ... where 条件;
select 字段名1,字段名2 ... from 表名 where 条件;
任何一条sql语句都是以"
;
"结尾
sql语句不区分大小写
select 字段名1,字段名2 ... from 表名 where 条件;
执行顺序:from>where>select
运算符 | 说明 |
---|---|
= | 等于 |
<>或!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
between...and... | 两个值之间,等同于>= and <= |
is null | 为null(is not null 不为空) |
and | 并且 |
or | 或者 |
in | 包含,相当于多个or(not in 不在这个范围中) |
not | 取非,主要用在 is 或者 in 中 |
like | 模糊查询,支持% 和_ 匹配 |
MySQL中默认的排序是升序,可以使用 order by 进行控制升序或降序
select 字段名1,字段名2 ... from 表名 [where 条件] order by 字段名;//升序
select 字段名1,字段名2 ... from 表名 [where 条件] order by 字段名 asc;//升序
select 字段名1,字段名2 ... from 表名 [where 条件] order by 字段名 desc;//降序
执行顺序:form>where>select>order by
group by:按照某个字段或者某些字段进行分组
having:对分组之后的数据进行在次过滤
having 是group by 的搭档,没有group by ,having是不能出现的。
MySQL中有5个分组函数count()计数、sum()求和、avg()平均值、max()最大值、min()最小值
分组函数一般都是和group by 联合使用。
select sum(sal) from emp;
select max(sal) from emp;
select min(sal) from emp;
select avg(sal) from emp;
select count(*) from emp;
SQL当中有一个语法规则,分组函数不可直接使用在where子句当中
因为group by是在where执行之后才会执行的(分组函数必须在分完组之后才能使用,where的时候,group by还没有执行,意味着还没有分组,不能使用分组函数)
count(*
)和count(具体的某个字段)区别
count(*
):统计总记录条数
count(具体的某个字段):统计具体的某个字段中不为NULL的数据的总数量
select ... from ... where ... group by ... having ...order by ...
执行顺序:from>where>group by>having>select>order by
distinct 关键字只能出现在所有字段的最前面,表示所有字段联合去重,并不会修改表中的数据
select distinct 字段名1,字段名2 ...from 表名 [where 条件]
大多数情况下,都不是从单表中查询数据,而是多张表联合查询取出最终的结果
根据表的连接方式来划分:
内连接等值连接
非等值连接
自连接外连接
左外连接
右外连接全连接(不常用)
笛卡尔积现象
当两张表进行连接查询的时候,没有任何条件进行限制,最终的查询结果条数是两张表记录条数的乘积。
可以加条件进行过滤,避免笛卡尔积现象,但是不会减少匹配次数,显示的是有效记录
特点:连接条件中的关系是等值关系
select ... from A表 [inner]join B表 on 连接条件
特点:连接条件中的关系是非等值关系
select ... from A表 [inner]join B表 on 连接条件
特点:一张表看做两张表,自己连接自己
select ... from 表名 as A [inner]join 表名 as B on 连接条件
特点:左边的这张表为主表
select ... from A表 left [outer] join B表 on 连接条件
特点:右边的这张表为主表
select ... from A表 right [outer] join B表 on 连接条件
union可以将不相干的两张表连接在一起,但是要显示的列数要一样
select ... from ... where ...
union
select ... from ... where ...
limit startIndex, length
,startIndex表示起始位置,从0开始,length表示要取的数据的长度select ... from ... [order by ...] limit 0 ,5;
和select ... from ... [order by ...] limit 5;
等价select ... from ... where ...group by...having ...order by ... limit...
执行顺序:from>where>group by>having>select>order by>limitcreate table 表名(
字段名1 数据类型,
字段名2 数据类型,
字段名3 数据类型,
...
)
MySQL中的字段的数据类型
数据类型 | 说明 |
---|---|
int | 整数型(对应java中int) |
bigint | 长整型(对应java中long) |
float | 浮点型(对应java中float double) |
char | 定长字符串(对应java中String) |
varchar | 可变长字符串(对应java中StringBuffer/StringBuilder) |
date | 日期类型(对应java中java.sql.Data) |
BLOB | 二进制大对象(对应java中的Object) |
CLOB | 字符大对象(对应java中的Object) |
在创建表的时候,可以给表的字段添加相应的约束,添加约束的目的是为了保证表中数据的合法性、有效性、完整性。
drop table if exists t_user;//当表t_user存在的时候删除t_user表 create table t_user( id int primary key, username varchar(255) ) insert into t_user(id,username) value (1,'zhangsan'); insert into t_user(id,username) value (2,'wangwu'); select * from t_user; +----+----------+ | id | username | +----+----------+ | 1 | zhangsan | | 2 | wangwu | +----+----------+ //创建一个t_user表格,其中id叫做主键字段,id字段中的每一个值都是主键值.主键值表示的这行记录在这张表中的唯一标识. //一张表的主键约束只能有1个 drop table if exists t_user; create table t_user( id int, username varchar(255) primary key(id) ) insert into t_user(id,username) value (1,'zhangsan'); insert into t_user(id,username) value (2,'wangwu'); select * from t_user; +----+----------+ | id | username | +----+----------+ | 1 | zhangsan | | 2 | wangwu | +----+----------+ //这种写法等同于上面的写法 //MySQL中提供主键值自增 drop table if exists t_user; create table t_user( id int primary key auto_increment,//从1开始自增 username varchar(255) ) insert into t_user(username) value ('zhangsan'); insert into t_user(username) value ('wangwu'); insert into t_user(username) value ('lisi'); select * from t_user; +----+----------+ | id | username | +----+----------+ | 1 | zhangsan | | 2 | wangwu | | 3 | lisi | +----+----------+
一个事务是一个完整的业务逻辑单元,不可再分。
事务的存在是为了保证数据的完整性、安全性。MySQL中的事务默认的是自动提交的
比如转账功能,从A账户向B账户转账1000元,需要同时让A账户-1000元,B账户+1000元
事务包括四大特性:ACID
A:原子性(atomicity)事务是最小的工作单元,不可再分
C:一致性(consistency)事务必须保证多条DML语句同时成功或失败
I:隔离性(isolation)事务A和事务B之间具有隔离性
D:持久性(durability)数据最终必须持久化到硬盘文件中,事务才算成功的结束
数据库设计三范式是设计表的依据,根据这个三范式设计的表不会出现数据冗余
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。