zoukankan      html  css  js  c++  java
  • 《MySQL数据库入门教程》

    基础知识

    数据库系统的组成

    • 数据库
      • 存储数据的容器
    • 数据库管理系统
      • 软件
        • MySQL
        • Oracle
        • SQL Sever
          • 只能在windows上运行
        • DB2
    • 数据库应用程序

    SQL语言

    • 介绍
      • 用来管理数据库中的数据
      • 可以嵌套到其他语言中
    • SQL的DML和DDL
      可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。
      • 查询和更新指令构成了 SQL 的 DML 部分:
        • SELECT - 从数据库表中获取数据
        • UPDATE - 更新数据库表中的数据
        • DELETE - 从数据库表中删除数据
        • INSERT INTO - 向数据库表中插入数据
      • SQL 中最重要的 DDL 语句:
        • CREATE DATABASE - 创建新数据库
        • ALTER DATABASE - 修改数据库
        • CREATE TABLE - 创建新表
        • ALTER TABLE - 变更(改变)数据库表
        • DROP TABLE - 删除表
        • CREATE INDEX - 创建索引(搜索键)
        • DROP INDEX - 删除索引
      • SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。
    • 数据控制语言
      • grant语句
        • 给用户增加权限
      • revoke语句
        • 收回用户权限
      • commit语句
        • 提交事务
      • rollback语句
        • 回滚事务
      • MySQL权限级别介绍
        • 全局——可以管理整个MySQL
        • 库——可以管理指定的数据库
        • 表——可以管理指定数据库的指定表
        • 字段——可以管理指定数据库的指定表的指定字段
        • 权限存储在mysql库的user, db, tables_priv, columns_priv, procs_priv这几个系统表中,待MySQL实例启动后就加载到内存中

    MySQL目录下的文件

    • bin目录
      • 放置可执行文件
        • mysql.exe等
    • data目录
      • 放置日志及数据库
    • include目录
      • 放置头文件
        • mysql.h等
    • lib目录
      • 放置库文件
    • share目录
      • 放置字符集、语言等
    • my.ini
      • 是MySQL正在使用的配置文件
      • MySQL数据库使用的配置文件
    • my-huge.ini
    • my-template.ini
      • 配置文件的模板

    cmd下MySQL使用

    • 启动mysql服务
      • net start mysql
    • net stop mysql
    • 登录
      • mysql -h 服务器地址 -u 用户名 -p
      • 或者使用MySQL Command Line Client登录

    数据库和表的操作

    注意

    • 打开CMD,将工作目录切换到MySQL的bin下
    • 库名、表名需要用反引号包裹
    • 操作要记得分号结尾

    常用语法

    • 查询当前数据库版本:select version();

    • 查询当前数据库:select database();

    • 查询当前数据库用户:select user();

    • 查看数据库文件存放的目录:select @@datadir;

    • 查询当前路径:select @@basedir;

      • alt 路径
    • 查询所有数据库:show databases;

    • 查询所有表名:show tables;

    • 选择一个数据库:use+数据库名;

    • 创建一个数据库:create database `数据库名`;

    • 删除一个数据库:drop database `数据库名`;

    • 创建一个表:create table 表名(字段名 数据类型 字符集);

      • alt 创建表
    • 查询一个表结构:desc 表名;

      • alt 表结构
    • 查询当前系统:select @@global.version_compile_os;

      • alt 系统
    • 修改数据库编码

      • alter database + 数据库名 default character set +编码 collate +编码_bin
        • 例:alter database test default character set gbk collate gbk_bin

    对数据库用户的基本操作

    • 查询当前数据库用户:select user();
    • 查看所有用户(用户名、给谁授权):select user,host from mysql.user; 或 select mysql.user;
    • 添加用户:create user 用户名@'主机地址' identified by '密码';
    • 创建用户同时授权:grant all privileges on mq.* to 用户名@主机名 identified by '密码';
    • 设置与更改用户密码:SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');
    • 删除用户:drop user 用户名@'主机地址';
    • 查看当前用户权限:show grants for 用户名@'主机地址';
    • 给用户授权:grant 权限 on 数据库名.表名 to 用户名@'主机名' (在这里加上 WITH GRANT OPTION,可以使他有赋权能力)
    • 撤销权限:revoke 权限 on 数据库名.表名 from 用户名@'主机名'
      • 每次更新权限后记得刷新权限:FLUSH PRIVILEGES;
    • 切换用户:
      使用命令 -u 用户名 -p 即可
      注意:不同用户的主机得是一样的,否则无法切换;

    数据表的基本操作

    • 操作表应先指定数据库
      • use + 数据库名称;
    • 查看数据表
      • 查看所有数据表
        • show tables;
      • 查看表中字段
        • show columns from +表名
      • show create table +数据表名;
      • describe + 表名
    • 修改数据表
      • 修改表名
        • alert table + 旧表名 rename to +新表名
      • 修改字段名
        • alter table +表名 change +旧字段名+新字段名 +新数据类型(数据完整性约束条件)
      • 修改字段的数据类型
        • alter table +表名 modify +字段名 +数据类型(数据完整性约束条件);
      • 添加字段
        • alter table +表名 add +新字段 +数据类型(数据完整性约束条件);
      • 删除字段
        • alter table +表名 drop +字段名;
      • 修改字段排列
    • 删除数据表
      • drop table +表名;

    对数据的操作

    • 添加数据

      • 为表中字段添加数据

        • insert into +表名 (字段名1,字段名2..) values(值1,值2,..);
          • alt 添加
        • 其他写法: INSERT INTO 表名
          SET 字段名1=值1,字段名2=值2, ..
          举例: insert into student
          set id=10,name='zhangba',chengji=72;
          • alt 添加
      • 同时添加多条记录

        • insert into +表名
          values(值1,值2,值3),(值1,值2,值3),(值1,值2,值3);
    • 更新数据

      • update
        • alt 更新
        • 利用 where控制要更新的范围
    • 删除数据

      • delete from + 表名 where id= ;
    • 为表中所有字段添加规则

      • CREATE TABLE 创建表名;
        语句中指定所有字段名规则
        语法: CREATE TABLE '表名'(字段名1,规则,
        字段名2 规则,
        ...
        );
        命令:CREATE TABLE `student`(
            id INT(3) PRIMARY KEY AUTO_INCREMENT设置整数以及主键,
            name VARCHAR字符集(20) NOT NULL不能为空,
            grade FLOAT浮点型,gender CHAR男女(2)
        );
    • 单表查询

      • select
        • 查询所有字段
          • *通配符,代替所有字段名
          • select * from + 表名
        • 查询指定字段
          • select +字段名1,字段名2 from +表名
        • 按条件查询
          • select +字段名1,字段名2 from +表名 where id= ;
        • in关键字的查询
          • in关键字用来判断某个字段的值在不在指定集合中,若在,则可被查询出
          • select 字段1,字段2 from +表名 where id in(1,2,3);
        • between and关键字查询
          • between and关键字用来判断某个字段的值在不在指定范围内,若在,则可被查询出
          • select 字段1,字段2 from +表名 where id between 2 and 4;
        • 空值查询 is null
          • select 字段1,字段2 from +表名 where id is null;
          • select 字段1,字段2 from +表名 where id is not null;
        • distinct查询
          • 过滤掉查询记录中的重复值
          • select distinct +字段名 from +表名;
        • like关键字查询
          • 判断两个字符串是否匹配
          • select 字段名1,字段名2 from +表名 where id like “c%” ;
          • select 字段名1,字段名2 from +表名 where id not like 'c%' ;
          • 匹配字符串
            • 注:若匹配的字符串中有 %和_ 则需要转义 +&或+_
            • 常规字符串
            • %通配符
              • 匹配任意长度字符串
              • 如 c%匹配以c开头的任意字符串
            • _通配符
              • 匹配单个字符
              • 如c_匹配 ca 或cb等
        • and关键字的多条件查询
          • 可使用多个查询条件(多个条件必须同时满足)
          • select 字段名1,字段名2 from +表名 where id like ‘c%’ and id < 3 ;
        • or关键字的多条件查询
          • 可使用多个查询条件(多个条件中有满足的即可)
          • select 字段名1,字段名2 from +表名 where id like ‘c%’ or id < 3 ;
    • 其他查询

      • COUNT()函数:统计记录的条数
        语法::SELECT COUNT(字段名) FROM表名
        举例:查询student表中的id字段一 共有多少条记录
        命令:select count(id) from student;
        alt 属性文本
      • SUM()函数:求出表中某个字段所有值的总和
        语法::SELECT SUM(字段名) FROM表名;
        举例:求出student表中id字段的总和
        命令::SELECT SUM(id) FROM student;
        alt 属性文本
      • AVG()函数:求出表中某个字段所有值的平均值
        语法:SELECT AVG(字段名) FROM表名;
        举例:求出student表中id字段的平均值
        命令:SELECT AVG(id) FROM student;
        alt 属性文本
    • UNION联合查询

      • UNION 操作符用于合并两个或多个SELECT 语句的结果集
      • 注意:UNION 内部的SELECT 语句必须拥有相同数量的列。且第一个 SELECT 语句中被使用的字段名称也被用于结果的字段名称。列也必须拥有相似的数据类型。同时,每条SELECT 语句中的列的顺序必须相同。
      • 如 select version() union select id from users;
        version()的查询结果是int型,且只有一列,所以 union 之后的那个select查询结果也必须只有一列,而且数据类型也需要类似 int
        • alt 联合查询

    mysql常用函数

    • concat(str1,str2 … … ); 没有分隔符的连接字符串
      • alt
      • 如果连接串中存在NULL,则返回结果为NULL;
        • alt
    • concat_ws(separator,str1,str2… … );该函数第一个参数是其他参数的分隔符,分隔符在连接字符串之间加入。分隔符可以是一个字符串,也可以是其它参数。
      • alt
      • 分隔符为NULL,则返回结果为NULL;
      • 如果参数中存在NULL,则会被忽略;
        • alt
      • 可以对NULL进行判断,并用其它值进行替换
        • alt
    • group_concat(str1,str2… … );将多行查询的结果以逗号为分隔符连接成为一
      行结果。
      • 在注入时,由于回显位的问题,concat() 不能一次性将多行内容展示出来,需要使用 limit 控制挨个去显示,这时使用 group_concat(),可将多行内容在一行显示。
        • alt

    MySQL其他姿势(sql注入常用)

    • 构造永真,爆出字段下的所有内容
      alt
    • 当查询的值为true时,可正确查询
      alt
    • 特殊的查询结构id=1=(1)=1
      (该结构可以用来fuzz,只需要替换括号里的内容)
      select name from users where id=a=(b)=c
      b、c的值,只能为1或0,也可以是true或false
      当b、c的值均为1或0时,等价于id=a
      当b或c中有一个为0时,就会查询出,除id=a之外的字段下的其他值
      alt
      alt

    导出数据

    • mysqldump –opt test > mysql.test
      • 即将数据库test数据库导出到mysql.test文件,后者是一个文本文件
        如:mysqldump -u root -p 123456 --databases dbname > mysql.dbname
        就是把数据库dbname导出到文件mysql.dbname中。

    导入数据

    • source D:ceshi.sql
      • 这是sql文件存放的地址
  • 相关阅读:
    负载均衡服务之HAProxy基础入门
    WEB缓存系统之varnish代理以及健康状态检测配置
    WEB缓存系统之varnish缓存项修剪
    WEB缓存系统之varnish状态引擎
    WEB缓存系统之varnish基础入门
    WEB缓存控制机制与varnish简介
    WEB应用之httpd基础入门(五)
    Appium移动端测试--基础预热
    postman接口测试-参数化-测试数据Text文本
    机器学习环境搭建安装TensorFlow1.13.1+Anaconda3.5.3+Python3.7.1+Win10
  • 原文地址:https://www.cnblogs.com/hacker-snail/p/13837338.html
Copyright © 2011-2022 走看看