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文件存放的地址
  • 相关阅读:
    array and ram
    char as int
    pointer of 2d array and address
    Install SAP HANA EXPRESS on Google Cloud Platform
    Ubuntu remount hard drive
    Compile OpenSSL with Visual Studio 2019
    Install Jupyter notebook and tensorflow on Ubuntu 18.04
    Build OpenCV text(OCR) module on windows with Visual Studio 2019
    Reinstall VirtualBox 6.0 on Ubuntu 18.04
    Pitfall in std::vector<cv::Mat>
  • 原文地址:https://www.cnblogs.com/hacker-snail/p/13837338.html
Copyright © 2011-2022 走看看