数据库MySQL

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343