• MYSQL1.3(存储引擎,数据导入导出,管理表记录)


    一,Mysql存储引擎

    二,数据导入,导出
    三,管理表记录。

    查(单表查询 嵌套查询 多表查询 连接查询)


    增查改删 时使用的匹配条件(条件的表示方式)

    一,Mysql存储引擎.

    1.1什么是存储引擎?(存储引擎介绍)

    数据库服务软件自带的功能程序,

    不同的存储引擎有不同的数据存储方式和功能!

    是表的处理器.

    1.2如何查看数据库服务和当前表使用的存储引擎?
    mysql>show engines;
    mysql>show create table a1;
    ******************************************************
    1.3如何设置和修改数据库服务和表使用的存储引擎?
    修改数据库服务默认使用的存储引擎:
    创建表使用的存储引擎
    ->create table 库.表(
    ->字段列表
    ->)engine=存储引擎名;
    修改表使用的存储引擎:
    alter table 表 engine=存储引擎名;
    修改库存储引擎:(影响全部数据的存储)
    vim /etc/my.cnf i
    在[mysqld]下面
    default-storage-engine=存储引擎名;
    systemctl stop mysqld
    systemctl start mysqld
    *********************************************************
    1.4常用存储引擎的特点?
    myisam特点:
    支持表级锁
    查询操作多的表适合使用myisam存储引擎
    这样的节省硬件资源。
    不支持事务
    数据是存储在内存上的,当服务重起数据会被释放。

    innodb特点:
    支持行级锁
    编辑操作多的表适合使用innodb存储引擎
    这样支持并发访问量大。
    支持事务和事务回滚,外键。
    数据存储方式: a32.frm a31.idb
    表结构 数据+索引

    事务:对数据访问,从开始到结束的过程
    事务回滚:对数据的访问过程中任何一步
    没有被正确执行都会恢复之前的所有操作。

    mysql数据库服务使用事务日志文件记录对所有innodb存储引擎的表执行过的sql操作。
    cd /var/lib/mysql/
    ibdata1----sql命令执行后产生后的数据信息
    ib_logfile0-----
    |sql命令
    ib_logfile1-----

    锁的类型?
    读锁(select)又被称为共享锁
    写锁(insert update delete)又被称为排它锁 或互斥锁

    数据存储方式: a31.frm a31.MYD a31.NTI
    表结构 数据 索引
    *************************************************************
    1.5生成环境中建表时如何决定表使用的存储引擎?
    编辑操作多的表适合使用innodb存储引擎.这样并发访问量大。
    查询操作多的表适合使用myisam存储引擎.这样节省硬件资源。
    **************************************************************
    day01~day02知识点
    搭建数据库服务器
    Mysql数据类型
    Mysql键值
    Mysql存储引擎
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    二,
    数据导入:把系统文件内容存储到数据库服务器的表里。
    语法格式:
    mysql->load data infile "/var/lib/mysql-files/文件名" into table
    mysql->库.表 fields terminated by "符号" lines terminated by " ";
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    把系统用户信息存储到数据库的表里:
    /etc/passwd userdb.user
    root:x:0:0:root:/root:/bin/bash 要按照系统文件格式对应建表。
    create table user(
    -> name char(50),
    -> password char(1),
    -> uid int(2), 新建一个库userdb
    -> gid int(2), 把表放到userdb库下。
    -> comment char(100),
    -> homedir char(30),
    -> shell char(25),
    -> index(name)
    -> );
    在mysql里面:1,system ls /var/lib/mysql-files/
    2,system cp /etc/passwd /var/lib/mysql-files/
    3, load data infile "/var/lib/mysql-files/passwd" into table userdb.user
    fields terminated by ":" lines terminated by " ";
    注意点:表的格式要和系统文件兼容,文件要由r权限,存储引擎要兼容。
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    1,修改导入文件时,查找文件路径:
    2,vim /etc/my.cnf
    3,secure_file_priv="/mydata"
    4,chown mysql /mydata/
    5,systemctl restart mysqld
    6,mysql> show variables like "%secure%";
    lter table userdb.user add id int(2) primary key auto_increment first;
    增加这个便于管理。

    数据导出:把数据库服务器的表里的记录存储到系统文件中。
    sql查询命令 into outfile "/目录/文件名";
    1,select * from user into outfile "/mydata/a.txt";
    2,system cat "/mydata/a.txt";
    导出时指定分割符号:
    select name,uid from user into outfile "/mydata/a3.txt" fields terminated by "#"
    导出时指定分隔符与分隔行的符号:
    select name,uid from user into outfile "/mydata/a4.txt" fields terminated by "#"
    lines terminated by ";;;";
    ================================================================================
    三,管理表记录
    insert 增(向表中插入新记录)
    一次插入1条记录给所有字段赋值
    一次插入多条记录给所有字段赋值
    一次插入1条记录给指定字段赋值
    一次插入多条记录给指定字段赋值

    insert into 库.表 values(字段值列表);
    insert into 库.表 values(字段值列表),(字段值列表)...;
    insert into 库.表(字段名列表) values(字段值列表);
    insert into 库.表(字段名列表) values(字段值列表),(字段值列表)...;
    ****************************************************
    update改(修改记录字段的值)
    修改所有记录指定字段的值
    修改指定记录指定字段的值
    update 库.表 set 字段名=值,字段名=值;
    update 库.表 set 字段名=值,字段名=值 where 条件;
    ****************************************************
    delete删
    增查改删 时使用的匹配条件(条件的表示方式)
    删除指定记录 delete from 库.表 where 条件;
    删除所有记录 delete from 库.表;
    delete from user where id>=12;
    ****************************************************
    select查(单表查询 嵌套查询 多表查询 连接查询)
    select 字段名列表 from 库.表 where 条件;
    查看所有表记录:select * from user;
    查看指定行的所有列:select * from 库.表 where 条件;
    查看指定行的指定列:select 字段名列表 from 库.表 where 条件;
    ****************************************************
    查 改 删 时使用的匹配条件(条件的表示方式)
    数值比较 字段名 符号 数字
    > >= < <= = !=
    +++++++++++++++++++++++++++++++++++++++++++++++++++
    字符比较 字段名 符号 “字符串”
    = !=
    ++++++++++++++++++++++++++++++++++++++++++++++++++++
    范围内匹配
    字段名 between 数字1 and 数字2 在..之间..
    select name,uid from user where uid between 10 and 20;
    字段名 in (值列表);
    select name,uid from user where uid in (11,12,300);
    字段名 not in (值列表);
    select name,uid from user where uid not in (11,12,300);
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++
    四则运算+ - * / %
    加法运算:
    select name,uid+gid he from userdb.user;
    加法运算+条件:
    select name,uid+gid he from userdb.user where name="job";
    运算平均值:
    select name,uid,gid,uid+gid he ,(uid+gid)/2 pjz from userdb.user;
    注:符号可以时四则运算。
    1,alter table user add age int(1) not null default 18 after name;
    2,select name,year(now())-age syear syear from user;
    用函数year(now())减去age年龄的出出生年份。
    update user set age=age+1 where name="tony";
    update user set age=age+1;
    也可以用update配合四则运算去改变字段值。
    select name,uid,gid from user where uid=gid;
    做条件的时候值时可以用字段去表示的。
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    模糊匹配 where 字段名 like ‘表达式’;
    %表示零个或多个字符
    _表示匹配但个字符
    select name from user where name like '_%_';
    select name from user where name like '_____';
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    正则匹配
    ^ $ . [] *
    where 字段名 regexp '正则表达式';
    select name,uid,gid from user where name regexp '^y.*a$';
    找一类数据的时候适合用正则。
    正则表达可以匹配一些复杂的值,灵活判断运用。
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    匹配空 is null
    匹配非空 is not null
    逻辑匹配(多个判断条件) or and !
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    查询分组

    sql查询 group by 字段名 ;

    select distinct shell from db3.user where uid between 10 and 20;

    select shell from db3.user where uid between 10 and 20 group by shell;

    select shell from db3.user group by shell;

    select gid from db3.user where name like "a%" group by gid;

    select  字段名 as '性别',count(*)  as  '人数'  from  库.表  group  by 字段名;

    查询排序 order by
    asc |desc
    sql查询 order by 字段名 升序|降序 ,

    select name,uid,gid from db3.user where uid between 10 and 80 ;

    mysql> select name,uid,gid from db3.user where uid between 10 and 80 order by uid desc;

    限制查询显示的行数

    显示查询结果的前二行:
    select * from user where uid<10 limit 2;
    限制显示行数的范围:
    0,1,2=3从第三行开始。
    从第三行开始显示,一共显示三行。
    select * from user where uid<10 limit 2,3;

    查询时不显示字段的重复值 distinct 字段名
    select distinct shell from userdb.user where uid<10;

    查询时可以做数据统计(聚集函数)
    avg(字段名):集和的平均值
    sum(字段名):对集和中的各参数求和
    min(字段名):集和中的最小值
    max(字段名):集和中的最大值
    count(字段名):记录个数
    select count(name) from user where shell="/bin/bash";
    select count(name) from user;
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    复制表(作用1 快速建表,作用2 备份表)
    sql命令格式2 create table 库.表 sql查询命令;
    create table userdb.u2 select * from user;
    注意点:u2表中键值和索引是没有的,需要自己添加。
    复制表结构,不需要表记录。
    where 条件不成立=只复制表结构.
    create table userdb.u2 select * from user where 1=2;
    或者:
    create table userdb.u2 select * from user where false;
    创建的表是根据查询的结果赋值的。
    ***********************************************************
    where嵌套查询
    select 字段名列表 from 库.表 where 条件(select 字段名列表from 库.表 where 条件);
    显示表中行号最大的记录内容
    select * from teadb.tea2 where id=(select max(id) from teadb.tea2);
    *************************************************************
    select(多表查询)
    select * from teat1 ; select * from teat2;
    select 字段名列表 from 表名列表;迪卡尔集(表记录行数相乘的积)
    例:
    select * from teat1,teat3;
    select teat1.name,teat3.name from teat1,teat3;

    select 字段名列表 from 表名列表 where 条件;
    select teat1.name,teat1.uid,teat2.name,teat2.uid
    from teat1,teat2
    where teat1.name=teat2.name and teat1.uid=teat2.uid;
    为什么要多表查询,因为一个用户的信息不会存放在一个表里,
    把数据分开存放在多个表里,且还需要一个唯一编号去标识。
    ************************************************************
    select(连接查询)(左连接和右连接)。
    左连接
    seletct 字段名列表
    from 表1 left join 表2
    on 条件;

    右连接
    seletct 字段名列表
    from 表1 right join 表2
    on 条件;

    create table db4.t3 select name,uid,homedir from db3.user limit 4;
    create table db4.t4 select name,uid,homedir from db3.user limit 6;
    select * from t3 left join t4 on t3.uid = t4.uid;
    select * from t3 right join t4 on t3.uid = t4.uid;
    select t3.name,t4.name from t3 right join t4 on t3.uid = t4.uid;

  • 相关阅读:
    【MVC 1】MVC+EF实体框架—原理解析
    数据结构导论(一)
    【JavaScript 14—学习总结】:从小事做起
    【JavaScript 13—应用总结】:锁屏遮罩
    【JavaScript 12—应用总结】:弹出登录框
    【JavaScript 11—应用总结】:下拉菜单
    【JavaScript 10—应用总结】:连缀
    【EF 1】EF实体框架 原理+实例
    【多 线 程】
    【命 令 行】
  • 原文地址:https://www.cnblogs.com/yunsshcy/p/8674248.html
Copyright © 2020-2023  润新知