1.1 数据库的作用,把数据以表的形式存储起来,方便查询。
1.2 RDBMS:relational database management system 关系型数据库
(还有非关系型数据库)核心是以二维表存储数据
行:一条记录,一个事物的信息
列:字段,一个事物的某一个属性
一个表中的所有行是一类事物的集合,一个数据库由很多表组成
1.3 SQL structured query language结构化查询语言,用于关系型数据库,不区分大小写 select SELECT;重点是查询
1.4 MySQL(瑞典公司开发 卖给sun 被oracle收购)开源、免费、支持多平台(支持多种操作系统)
2 MySQL 安装 使用 navicat与mysql
mysql 端口号默认3306;utf8 通用字符集
3 navicat使用
数据库操作;数据表操作;数据操作-增删改查;数据类型与约束;数据库备份与恢复
常用数据类型:
int整数(长度无意义)无符号和有符号;小数decimal,decimal(3,1)小数点后1位 整数2位;字符串varchar(字母 符号 中文都占一个字符);日期时间datetime
约束:
主键primary key:int类型、无符号、自动递增,唯一的标识一条记录;id int unsigned primary key auto_increment
非空not null:不允许填写空值
唯一unique:值不允许重复出现
默认值default:不填显示默认值,填写后以写的为准
外键oreign key:维护两个表的关联关系
dba:备份与恢复
4 SQL语言
查询:select;ctrl + / 注释;ctrl + shift + / 取消注释
4.1数据表操作
创建表
create table 表名students(
name varchar(10),
age int unsigned
)
删除表drop table 表名或 drop table if exists 表名
4.2数据操作:增删改查
简单查询:select * from 表名
增加数据:insert into 表名 values(...)
修改数据:update 表名 set 列1=值1,列2=值2... where 条件
删除:delete from 表名 where 条件
(逻辑删除:设计表,给表添加一个字段,1代表删除 0表示未删除;把所有数据isdelete都改为0;要删除某一条数据时 更新他的isdelete为1;当要查询数据时,只查询isdelete为0的数据
4.3查询select * from stu
01查询指定列,如果没有写where会把指定列的所以数据都显示出来:select name,sex,hometown, from students
02给查询出的字段起别名:select name as 姓名,sex as 性别,hometown as 家乡 from students
03给表起别名:select s.name,s.sex, s.hometown from students as s
04去除重复数据,如果有重复的数据只显示一条:select distinct from students
05去除重复数据,当查询多个字段时,只有一行记录跟另一行记录完全一样时才是重复数据:select distinct sex,class from students;select distinct * from students
4.3.1 条件查询
(where 先分析条件)
比较运算符:等于 大于 大于等于 小于 小于等于<= 不等于!=或<>
逻辑运算符:and多个条件同时符合 or多个条件符合任意一个 not对于一个条件取反
模糊查询:like %表示任意多个任意字符 _表示一个任意字符
范围查询:in表示在一个非连续的范围内,select * from stu where age in(12,20,30);between ... and ... 表示在一个连续的范围内select * from stu where age between 19 and 20小值在前
空判断:null与''是不同的;判空is null(空字符串是之前填写了又删除了,null是未填写内容或指定为null) 判非空:is not null判非空。select * from stu where name is null select * from stu where name=''
4.3.2 排序:语法:select * from 表名 order by 列1 asc|desc,列2 asc|desc,...(asc升序,desc降序)
eg:select * from student order by class asc|desc,sex先按第一个字段排序,如果值相同再按第二个字段排序
4.3.3聚合函数:用来统计数据,有5个常用的;count(*)一条数据任何一个字段有值就会统计在内 count(card)如果有null就不会统计在内;聚合函数不能在where中使用。select count (*) from 表名;eg:select count (card) from students
max(列)表示求此列的最大值:select max (age) from atudenta where sex='女'
min(列)表示求此列的最小值:select min (age) from students where class='1班'
sum(列)表示求此列的和:select sum (age) from students where hometown='北京'
avg(列)表示求此列的平均值:select avg (age) from students where sex='女'
4.3.4 分组 语法:select 列1,列2,聚合... from 表名 group by 列1,列2...
select class,sex,count(*) from students group by class,sex当一条数据和另一条数据的class和sex都一样是才认为是一组
select avg(age),max(age),min(age) from students group by class
对比where与having:where是对from后面指定的表进行数据筛选,属于对原始数据的筛选;having是对group by的结果进行筛选。
获取部分行 当数据过大是,在一页中查看数据是一件非常麻烦的事情
select * from 表名 limit start,count(从start开始,获取count条数据;start索引从0开始) eg:select *from students limit 3,3
4.3.5 分页 已知每页显示m条数据,求:显示第n页的数据
select * from students limit (n-1)*m,m
求总页数:查询总条数p1;使用p1除以m得到p2;如果整除则p2为总页数;如果不整除则p2+1为总页数。
4.3.6 连接查询
当查询的列来源于多张表时,需要将多张表练成一个大的数据库,在选择合适的列返回;
等值连接查询:查询的结果为两个表匹配到的数据
左连接查询:查询的结果为两个表匹配到的数据加左表特有的数据,对于右表中不存在的数据使用null填充
右连接查询:查询的结果为两个表匹配到的数据加右表特有的数据,对于左表中不存在的数据使用null填充
等值连接:会产生笛卡尔积:select * from 表1,表2 where 表1.列=表2.列
内连接:select * from 表1 inner join 表2 on 表1.列=表2.列(内连接不会产生笛卡尔积)
左连接:select * from 表1 left join 表2 on 表1.列=表2.列(join前面的表是左表,后面的是右表,把左表所有数据显示)
右连接:select * from 表1 right join 表2 on 表1.列=表2.列
4.3.7 自关联;数据之间有上下级关系的数据才会用自关联,在一个表中存储所有的数据
按照连接查询写:select * from areas as sheng.areas as shi where sheng.aid=shi.pid
4.3.8 子查询 (a 子查询返回的结果作为主查询的条件;标量子查询 列子查询 行子查询 b 子查询返回的结果作为主查询的数据元)
查询语句不是一个select,一个里面有几个select
查询大于平均年龄的学生:select * from students where age >(select avg(age) from students)
查询最小年龄的人:select * from students where age=(select min(age) from students)
查询王昭君的成绩,要求显示成绩:select score from scores where atudentno=(select studentno from students where name='王昭君')
查询王昭君的数据库成绩,要求显示成绩:select * from scores where atudentno=(select studentno from students where name='王昭君') and courseno=(select courseno from courses where name='数据库')
查询18岁的学生的成绩,要求显示成绩:select * from scores where studentno in (select studentno from students where age=18)
标量子查询:子查询返回结果是一个数据,一行一列
列子查询:子查询返回结果是一列,一列多行
行子查询:子查询返回结果是一行,一行多列eg:select * from students where (sex,age)=(select sex,age from students limit 1)
表级子查询:返回的结果是多行多列eg:select * from(select * from students ) as s
子查询的关键字:in any some all(=any等于in等于some;>any 等于>some 大于子查询返回的结果中的任意一个)
4.3.9 查询演练
把查询出来的数据插入到另一个表中:insert into goods_cates(cate_name) select distinct cate from goods
创建品牌表:
create table goods_brands(
id int unsigned primary key auto_increment,
brand name varchar(10)
5 高级
5.1 数据库设计 e-r模型(基本元素:实体 联系 属性)
e表示entry,实体:一个数据对象,描述具有相同特征的事务
r表示relationship,联系:表示一个或多个实体之间的关联关系,关系的类型包括一对一、一对多、多对多
属性:实体的某一特性称为属性
5.2 命令行客户端:连接服务端
连接:mysql -uroot -p 回车 输入密码
查看所有仓库:show databases;
使用某个仓库(重要):use ce;
查看所有表:show tables;
查看表结构:decs student;
show create table students;
中文乱码:set charset gbk;
备份与恢复:
备份必须一管理员身份运行cmd程序;运行mysqlldump命令
恢复先创建新的数据库
5.3 函数;select concat (123,'abc')
随机0-10的整数:select round(rand()*10)
随机从一个表中取一条记录:select * from goods order by rand() limit 1
日期函数:a当前日期:current_date() b当前时间:current_time() c当前日期时间:select now(); 日期格式化date_format(date,format)
流程控制:case语法 等值判断
自定义函数:1设置分割线delimiter $s;2创建函数;3还原分割线delimiter;
delimiter $s
create function 函数名称(参数列表) returns 返回类型
begin
sql语句
end
$s
delimiter;
5.4 存储过程
delimiter //
create procedure 存储过程名称(参数列表)
begin
sql语句
end
//
delimiter;
5.5 视图 把视图当作表用
create view 视图名称 as select语句;
创建视图 视图中的查询语句不能有重复的字段名,如果有可以起别名
create view v_stu as
select
stu.*,cs.coursNo,cs.name courseName,sc.score
from
students stu
inner join scores sc on stu.studentName = sc.studentNo
inner join courses cs on cs.coursNo = cs.coursNo
create view v_students as
select name 姓名,age 年龄 from students
查询视图
select * from v_students
5.6 事务
转账大乔 500 小乔200
update acount set money=money-100 where name='大乔'
update acount set money=money+100 where name='小乔'
begin;
所有操作都成功
commit
begin;
任何一步失败
rollback;
提交、回滚
5.7 索引(提升查询速度;缺点是会降低更新表的速度)
查看索引:show index from 表名;
创建索引:create index 索引名称 on 表名(字段名称(长度))
5.8 外键foreign key (控制表中数据必须符合另一个表的范围)
查看外键:show create table 表名
设置外键约束:
删除外键
5.9 用户密码
修改密码 分为知道密码与不知道密码