MySQL

数据库

1.概念
  • 数据库是一个文件系统,只不过我们需要用命令(SQL)来操作,用来存储数据,带有访问权限,限制不同的人有不同的操作。
2. 分类
  • 关系型数据库(SQL):用来描述实体与实体之间的关系
    a. mysql : 开源免费 被 oracle收购后开始收费
    b. mariadb:是mysql开源版本的分支,基本命令时一致的
    c. oracle:甲骨文公司,收费,适用于大型电商网站
    d. db2:IBM公司,大多银行系统使用
    e. sqlserver:Windows里面,政府网站(asp.net),图形化工具成熟
  • 非关系型数据库(NOSQL):key => value的形式存储数据
    a. mongodb
    b. redis : set get 来操作数据
3. SQL语句(Structure Query Language)
  • DDL (Data Define Language):数据定义语言,定义数据库数据表和他们的结构 create(创建) drop(删除) alter(修改)
    1. 创建数据库
      create database databasename;
      指定字符集和校对规则
      create database databasename character set utf8 collate utf8_bin;
    2. 查看数据库
      a. 查看所有数据库
      show databases;
      b. 查看创建数据库的定义
      show create database databasename;
      c. 查看当前正在操作的数据库
      select database();
      status; 显示 current database
      d. 切换数据库
      use databasename;
    3. 修改数据库字符集
      alter database databasename character set 字符集;
    4. 删除数据库
      drop database databasename;
    5. 创建数据表:列的约束(primary key(主键) unique(唯一) not null(非空))
      create table tablename(字段名 类型(长度) 约束,字段名 类型(长度) 约束 )
    6. 查看表
      a. 查看所有表
      show tables;
      b. 查看表的定义
      show create table tablename;
      c. 查看表结构
      desc tablename;
    7. 修改表
      a. 添加列
      alter table tablename add 列名 类型 约束;
      b. 修改列定义
      alter table tablename modify 列名 类型 约束;
      c. 修改列名和定义
      alter table tablename change 旧列名 新列名 类型 约束;
      d. 删除列
      alter table tablename drop 列名;
      e. 修改表名(一般不修改表名)
      rename table tablename to newtablename
      f. 修改表的字符集
      alter table tablename character set 字符集;
    8. 删除表
      a. 删除表及其定义
      drop table tablename;
      b. 删除表中数据,并释放空间,之后插入的数据id标识会连续(覆盖之前的id标识),删除的数据无法恢复
      truncate table tablename
  • DML (Data Manipulation Language):数据操作语言,主要来操作数据 insert(插入) update(修改) delete(删除)
    1. 插入数据:如果values写全,可以不写字段,另外,多个values以逗号隔开可以批量插入数据
      insert into tablename (字段1, 字段 2) values (值1,值2);
    2. 删除数据:如果没有指定条件,会删除所有记录(一条一条删除),不会释放空间,使用roll back指令可以恢复数据
      delete from tablename [where 条件];
    3. 更新数据
      update table set 字段=值,字段=值 [where 条件]
  • DCL (Data Control Language):数据控制语言,定义访问权限,安全设置,grant
  • DQL (Data Query Language):数据查询语言,select(查询) from(子句) where(子句) 编写顺序 select ...from...where...group by...having...order by...,执行顺序 F-W-G-H-S-O
    1. 基本语法
      select [distinct] [ * ] [列名,列名2] from tablename [where 条件] [group by 字段名] [having 条件过滤] [order by 排序];
    2. 查询表中所有数据
      select * from product;
    3. 查询指定字段
      select pname,price from product;
    4. 别名查询:主要用在多表查询中
      a. 表别名
      select p.pname, p.price from tablename as p;
      b. 列别名
      select pname as 商品名称, price as 商品价格 from product;
      效果
    5. 去掉重复的值(distinct
      select distinct price from product;
    6. 运算查询 仅仅在查询结果上做 + - * /
      select *,price*0.8 as "会员价" from product;
    7. 条件查询 [where 关键字] 关系运算符 > < = >= <= != <>(表示不等于这是标准的sql语法) 逻辑运算and or not
      select * from product where price > 60 and price < 100;
      select * from product where price between 60 and 100;
    8. 模糊查询 like _: 表示一个字符 %:表示多个字符
      select * from product where pname like "%小%";
    9. 排序查询 order by asc 升序(默认) desc 降序
      select * from product where pname like "_米%" order by price desc;
    10. 聚合函数,聚合函数不能直接用在 where 条件后面
      a. sum():求和 select sum(price) from product;
      b. avg():求平均值 select avg(price) from product;
      c. count():统计数量 select count(*) from product;
      d. max():求最大值 select max(price) from product;
      f. min() :求最小值 select min(price) from product;
      g. select * from product where price > (select avg(price) from product);
    11. 分组 group by
      a. 基本语法
      select cno,count(*) from product group by cno;
      b. having关键字,可以接聚合函数,出现在分组之后;where关键字,不能接聚合函数,出现在分组之前
      select cno,avg(price) from product group by cno having avg(price) > 0 order by desc;
4. 多表关系和多表查询
  • 多表之间的外键维护:外键约束foreign key
    1. 添加外键约束 alter table product add foreign key(cno) references category(cid);
  • 多表之间的建表原则
    1. 一对多(一个表中一条记录关联另一个表中多条记录):在多的一方添加一个外键指向一的一方的主键
    2. 多对多:多建一张中间表,至少有两个外键,这两个外键分别指向原来的两张表的主键,将多对多转换成两个一对多的关系。
    3. 一对一:当成一对多处理,给一个表添加外键,或者将两个表的外键设置成一样,或者直接写出一张表
  • 多表查询
    1. 交叉连接查询,笛卡尔积,没什么实际意义
      select * from product, category ;
    2. 内连接查询
      a. 隐式内连接
      select * from product as p,category as c where p.cno=c.cid;
      b. 显示内连接
      select * from product as p inner join category as c on p.cno=c.cid;
      select p.pname,c.cname from product p inner join category c on p.cno=c.cid;
    3. 外连接查询
      a. 左外连接,把左表中的数据全部查询出来,如果右表中没有对应的数据,用null填充
      select * from product p left outer join category c on p.cno=c.cid;
      b. 右外连接
      select * from product p right outer join category c on p.cno=c.cid;
    4. 分页查询
      select * from product limit 开始索引,个数;
    5. 子查询:查询语句中嵌套查询语句
      select * from product where cno = (select cid from category where cname="手机数码");
      select p.pname as "商品名称",(select c.cname from category c where c.cid=p.cno) as "分类名称" from product p;
附:DQL中的表结构
category表结构
product表结构

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

推荐阅读更多精彩内容

  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 7,790评论 5 116
  • 这一篇最主要是记录下命令,方便以后查找 使用Mysql 创建数据库 create database mysql_t...
    Treehl阅读 576评论 0 0
  • 基础知识: 1.数据库的连接mysql -u -p -h-u 用户名-p 密码-h host主机 2:库级知识2....
    网络安全自修室阅读 1,455评论 0 1
  • JDBC(JAVA DataBase connectivity)-java数据库连接 为什么会出现JDBC SUN...
    进击的大东阅读 707评论 0 0
  • 最近打算采用关系型数据库来理一下公司的运营数据,先拿点东西练手找感觉。下面是几个关于学生课业的表,需要建立一个数据...
    九天朱雀阅读 976评论 0 3