美文网首页
数据库MySQL

数据库MySQL

作者: 杨小呆yyy | 来源:发表于2019-03-23 23:38 被阅读0次

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 用户密码
修改密码  分为知道密码与不知道密码

相关文章

网友评论

      本文标题:数据库MySQL

      本文链接:https://www.haomeiwen.com/subject/vnxyvqtx.html