zoukankan      html  css  js  c++  java
  • MYSQL数据库初学者必看

    Mysql基础

    一、数据库基础知识

    1、数据的发展史

    a、没有数据库阶段,使用磁盘文件存储数据

    b、层次结构模型数据库

    c、网状结构模型数据库

    d、关系型结构数据库(使用二维表来存储数据)

    e、关系-对象模型数据库 

    2、市面上的数据库

    a、Oracle      甲骨文

    b、DB2         IBM

    c、SQL Server  微软

    d、Sybase      赛尔斯

    e、MySql       开源-->SUN-->Oracle

    f、MongoDB

    g、Redis

    3、主要学习的数据库(以MySQL来学习)

    DBA职位

    RDBMS(关系型数据库管理系统)Rational Database Management System 数据管理系统,包括一个管理角色的和多个数据仓库,一个仓库中包含多个数据表,一个数据表中包括两个部分(表结构、表记录),表结构指的是数据表的列名称和列类型,表记录(即表数据)指的是表中的数据。

    注意:

    管理员与数据库的关系

    数据库与数据表、视图、索引、存储过程的关系

    数据表与表结构、表记录的关系

    4、MySQL的目录结构

    a、bin

    b、my.ini文件是MySQL的总配置文件,后面需要使用

    二、SQL语言

    1、ISO国际标准化

    国际标准化组织ISO统一SQL语言

    C89  C99  --- C语言的ISO标准

    ISO发布的版本

          SQL-92

          SQL:1992

          SQL:2003

    2、SQL语言分类

    a、DDL(Data Definition Language)

       数据定义语言,用来定义数据库对象:库、表、列等

    b、DML(Data Manipulation Language) 

        数据操作语言,用来定义数据库记录(数据)

    c、DCL(Data Control Language)

        数据控制语言,用来定义访问权限和安全级别

    d、DQL(Data Query Language) 

        数据查询语言,用来查询记录(数据) 

    3、SQL语法

    a、SQL可以使用空格和缩进进行格式化

    b、每一条sql语句使用分号结尾

    c、SQL对于大小写要求不严格,但是建议SQL的关键字使用大写

    d、远程连接mysql

        mysql -h host -u username -p password

    e、mysql的提示符

        mysql> 准备好接受新命令。

        ->等待多行命令的下一行。

        '>等待下一行,等待以单引号(“'”)开始的字符串的结束。

        ">等待下一行,等待以双引号(“"”)开始的字符串的结束。

        `>等待下一行,等待以反斜点(‘`’)开始的识别符的结束。

        /*>等待下一行,等待以/*开始的注释的结束。

     ================================================================

    ###DDL 数据定义语言(DDL的操作存在两部分的操作:对数据库的操作、对表结构的操作) 

    1、对数据库的操作

    a、查看所有的数据库

    show databases;

    b、切换数据库

    use  数据库名称;

    c、创建数据库

    create database [if not exists] 数据库名 [charset=utf8];

    d、删除数据库

    drop database [if exists] 数据库名;

    e、修改数据库编码

    alter database 数据库名 character set utf8;

    f、显示数据库的编码格式

    show create database 数据库名;

    2、对表结构的操作

    a、首先介绍一下SQL语言中的数据类型

    ① int  整型

    ② double  使用格式double(5,2)表示最多包含五位数字,其中有两位小数,即:表示的最大值为999.99

    ③ decimal  浮点型 主要使用在金融行业(例如手机支付等)使用格式decimal(5,2)这是一种二进制运算无差错的数据类型

    ④ char   固定长度字符串类型,使用格式char(x)x的最大取值是255,这里的255等数字表示的是字节数目

    ⑤ varchar  可变长度字符串类型  使用格式varchar(x),x的最大取值是65535,对于可变长字符串类型,需要使用一部分空间来记录本类型的长度,存在浪费

       举例: 2014-12-12 22:10:12  假如存储这个字符串的时候,这个字符串长度为19,那么使用char(20)就足够,但是假如使用varchar(20)的话,可能由于要使用一部分空间来存储数据,导致不能将整个字符串存储下来

    ⑥ text   字符串类型,表示大字符串,细分为四种:longtext mediumtext  text  tinytext

    ⑦ bolb   字节类型,表示大字节,同样分为四种

    ⑧ date   日期类型,格式为:yyyy-MM-dd

    ⑨time   时间类型,格式为:hh:mm:ss

    ⑩、timestamp    时间戳类型  格式为:年月日+时分秒+毫秒   

    b、查看表结构

    desc 表名称;

    c、创建表

    create table 表名称(列名称 列类型,列名称 列类型,列名称 列类型......)在最后一个列的后面没有逗号

    d、查看数据库中所有的表名称

    show tables;

    e、删除表

    drop table 表名称;

    f、修改表

    ① 添加列  alter table 表名称 add(列名 列类型,列名 列类型,列名 列类型......);

    ② 修改列类型   alter table 表名称 modify 列名 新列名;

    ③ 修改列名和列类型   alter table 表名称 change 老列名 新列名 列类型;(列类型可以是新的类型也可以是老的类型,若为老类型则表示只更改了列名称)

    ④ 删除列   alter table 表名称 drop 列名称;

    ⑤修改表名称   alter table 表名 rename to 新表名称

    ###DML数据操作语言

    注释:主要针对表记录(表数据)的更新操作   

    1、插入记录

    insert into 表名称 (列名称,列名称,列名称...) values(列值,列值,列值...);

    当想要插入整条数据的时候,前面部分的列名称列表可以不写,只在后面给值即可

    insert into 表名称 values(列值,列值...列值); 这个时候值得顺序要和数据表中定义的列的顺序一致

    注意事项:

    a、日期型数据和字符型数据必须使用单引号括起来

    b、插入空值有两种方式:a、不指定值  b、设置values为null

    c、未插入的列的值使用null补充

    d、insert操作的时候前后两个部分的顺序要一致,包括数据类型和数据顺序

    2、修改表记录

    普通修改

    update 表名称 set 列名称=列值,列名称=列值,列名称=列值...; 

    注释:在没有添加条件的时候,会默认修改对应列名称下面的所有记录为上面的列值,这是不合理的

    有条件修改,用于局部的修改,根据条件进行修改

    update 表名称 set 列名称=列值,列名称=列值...[where 条件];   

    [注释]:条件一般是结果为boolean类型数据

    3、删除表记录

    delete from 表名称 [where 条件];

    4、一个特殊的删除方式

    truncate table 表名称;  truncate 方法不是DML的操作,它是DDL的操作,它做的是对表结构的更改

    上面的语句包含两个部分:a、drop table 表名称; 删除了表 b、create table  表名称; 创建了名称为之前的名字的新表

    5、对上面的c、d两个区别的比较

    使用delete操作可以回滚,即:数据可以恢复

    使用truncate操作数据不可回滚,即:数据不可恢复

    演示:start transaction;

    delete * from student;

    rollback; 回滚操作        

    6、对于MYSQL语言的运算符

    a、between...and

    update tbl_student set s_gender='M' where s_age >= 10 and s_age <= 20;

    update tbl_student set s_gender='F' where s_age between 10 and 20;

    b、in(.....)

    update tbl_student set s_name='xxx' where s_name='zhangsan' or s_name='lisi‘;

    update tbl_student set s_name='xxx' where s_name in ('zhangsan','lisi');

    c、not    

    d、is null

    update tbl_student set s_name='yyy' where s_age=null;这样操作是错误的-----为什么?=null不会报错,=‘null’也不会报错,但是结果不会被修改。 

    update tbl_student set s_name='yyy' where s_age is null;  

    当书写sql语句的时候,当出现了null的时候,不能使用等号,必须使用is null

    ###DCL数据控制语言

    注释:DCL是root这个超级管理员所使用的操作,主要用啦对其他数据库的操作用户进行设置

    1、创建用户

    create user 用户名@IP地址 identified by 密码;

    例:create user zhagsan@localhost identified by ‘1234’;

    当想要使用这个账户登录系统的时候

    mysql -uzhangsan -p1234

    2、给用户授权

    grant 权限1,权限2,权限3... on 数据库名称.* to 用户名@'IP地址';

    数据库名称.* :表示数据库的所有文件包括记录表、其他文件等等

    权限:CREATE/ALTER/DROP/INSERT/UPDATE/DELETE/SELECT

    3、撤销授权

    revoke 权限1,权限2,权限3... on 数据库名称.* to 用户名@'IP地址';

    4、查看权限

    show grants for 用户名@'IP地址';

    5、删除用户

    drop user 用户名@'IP地址';

    ###DQL数据查询语言        

    1、基本查询   

    a、普通查询

      select * from 表名称; 查询该表中的所有数据

    b、列控制查询,即:查询指定列

      select 列名称,列名称。。。 from 表名称;

    c、去重复查询,关键字 distinct

      select distinct 列名称 from 表名称;

    d、使用运算符进行查询

      注意:任何数据和null进行操作的时候,都会称为null,应该使用if null (列名称,期望值)

      假设情况:当进行工资计算的时候,当需要计算工资和奖金的总和的时候,有的人不存在奖金表单中职位null

      这个时候进行计算工资总和的时候,就要使用到if null (列名称,期望值)

      select ename,sal + if null(comm,0) from emp;

      select ename,sal + if null(comm,0) [as] salary from emp;

    e、给结果集起别名

      上面的sal + if null(comm,0)得到的结果是一个结果集,可以对这个结果集进行命名使用关键字as---ifnull  no " "!!!

      select ename,sal + if null(comm,0) as salary from emp; 其中as可省略

    f、字符拼接

      当想要在输出的内容中,显示更好的输出样式,可以加上文字描述

      select ‘我的名字是:’+name from student; 这种方式是错误的,因为在mysql中不能使用”+“作为字符串连接符

      应该使用的是concat

      select concat('我是一名员工,我叫:',ename)[as aaa] from emp; 在这句话 中concat实现了字符连接的操作

    g、基本条件查询

      select * from emp where='文员';

      select * from emp where sal betwwen 2000 and 3000 anddeptno=30;

    h、模糊查询

      select * from emp where name like '张_';

      select * from emp where name like '张_ _';

      select * from emp where name like '_ _亮';

      select * from emp where name like '_ _ _';

      select * from emp where name like '张%';

      select * from emp where name like '%张%';

      select * from emp where name like '%';

    2、排序查询注释:关键字:order by

    a、单列排序

      select * from 表名称 order by 列名称 [ascdesc];  方括号中表示可选择内容,不写的时候默认为asc,表示升序、desc表示降序

    b、多列排序

      select * from 表名称 order by 第一列 [ascdesc],第二列 [ascdesc];

      当经过第一列的排序之后,存在某几个具有相同的值得时候,采用第二列的条件再排序

    3、聚合函数查询--UDAF

    注释:聚合函数的运算时纵向的运算

    a、count()  

      count(*):*表示所有列,计算有效行的数目,假如一行中所有列都为null,那么这行为无效记录,当括号中放入数字的时候,效果与*相同,表示所有列;

      count(xx):xx表示列名称,计算指定列的有效行数目,若在这一列中,某一行存在null,那这一行为无效行

    b、sum(列名称)  求某一列的和

    c、max(列名称)  求某一列中的最大值

    d、min(列名称)  求某一列中的最小值

    e、avg(列名称)  求某一列的平均值

    4、分组查询

    注释:使用哪个条件进行分组,这个条件必须是组信息,当使用非组信息查询的时候,虽然语法上是正确的,但是不符合要求

    分组一般和聚合函数一起使用

        select     要查询并显示的内容  可以放*或列名称或聚合函数(UDAF)

         from       想要查询的表    具体的表

         where     分组前条件       不可放聚合函数

         group by   分组信息         列名称

         having     分组后条件     可以放聚合函数

         order by  对最终结果的操作 可放UDAF

    5、MySql的特有:limit

    注释:对于limit只在MySql中才有,其他数据库中不存在,而且Oracle数据库中也不存在

    a、limit语法结构:select * from 表名称 limit m,n;

      查询5行记录,从0行开始

      select * from 表名称 limit 0,3;

      查询10行记录,从3行开始

      select * from 表名称 limit 3,10;

      注解:对于上面的语法limit后面跟着两个数字,第一个数字m:表示起始行,第二个数字n:表示要查询并显示的行数

    b、拓展

      问:查询工资最高的员工的信息,在emp表中

      SELECT * FROM emp ORDER BY sal DESC  LIMIT 0,1;

      还可以使用子查询来操作

      SELECT * FROM (SELECT * FROM emp ORDER BY sal DESC) e LIMIT 0,1;

    c、分页显示

      ① 关于页数的计算

      总页数=总记录条数%每页记录条数==0?总记录条数/每页记录条数:总记录条数/每页记录数+1;

      ②假如查询某一页数据并显示

      select * from 表名称 limit (要查询的页码-1)*每页记录数,每页记录条数;

    --------------------- 本文来自 Zzreal 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/zonzereal/article/details/78586943?utm_source=copy 

  • 相关阅读:
    数论模板
    acdream1116 Gao the string!(扩展KMP)
    后缀数组模板
    Codeforces446C DZY Loves Fibonacci Numbers(线段树 or 分块?)
    acdream1116 Gao the string!(hash二分 or 后缀数组)
    SPOJ375 Query on a tree(LCT边权)
    krpano HTML5 Viewer可以实现全景展示
    Chrome 前端 插件
    canvas 星空插件
    jQuery插件开发
  • 原文地址:https://www.cnblogs.com/A121/p/9711227.html
Copyright © 2011-2022 走看看