zoukankan      html  css  js  c++  java
  • mysql试题

    drop,delete与truncate的区别:
    优先级: drop > truncate > delete
    TRUNCATE 按行删除并不把删除操作记录记入日志保存(不可恢复)
    DELETE 全部删除表内数据并可将删除操作记录在日志中,可以加where字句,可应用于table和view
    DROP 删除整个表(结构和数据)再插入时自增长id又从1开始

    复制基本原理流程
    主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中,SQL线程执行binlog并通知存储引擎;
    从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中;
    从:sql执行线程——执行relay log中的语句;

    myisam与innodb的区别
    1.InnoDB支持事物,而MyISAM不支持事物
    2.InnoDB支持行级锁,而MyISAM支持表级锁
    3.InnoDB支持MVCC, 而MyISAM不支持
    4.InnoDB支持外键,而MyISAM不支持
    5.InnoDB不支持全文索引,而MyISAM支持

    myisam与innodb在select count(*)哪个更快,为什么?
    myisam更快,因为myisam内部有一个计数器,可以直接调取

    varchar与char的区别:
    char是长度固定的,而varchar的长度是可以变化的
    比如说存储字符串"abc":
    char(10)表示存储的字符将占10个字节(包括7个空字符),大于10个字节时和varchar没区别则都将截掉超出部分
    varchar(10)表示只占用3个字节的长度,当存储的字符等于或小于10时,都按实际长度存储

    innodb有redo和undo两种日志...


    MySQL binlog几种日志的区别
    Statement:每一条会修改数据的sql都会记录在binlog中
    Row:不记录sql语句上下文相关信息,仅保存哪条记录被修改
    Mixedlevel: 是以上两种level的混合使用
    在一条 SQL 操作了多行数据时, statement 更节省空间, row 更占用空间。但是 row模式更可靠


    当 cpu 飙升到 500%时,先用 top 命令观察是不是 mysqld 占用导致的,如果不是,找出占用高的进程
    如果是 mysqld 造成的看session情况,定位是不是有消耗资源的 sql 在运行找出消耗高的 sql并kill掉然后限制连接数或作出其他调整

    mysqldump和xtranbackup的区别:
    一般来说 100G 内的库,可以考虑使用 mysqldump。轻巧灵活备份出来的文件比较小,压缩之后更小
    100G 以上的库,可以考虑用 xtranbackup。比 mysqldump 要快

    表:
    约束
    自增长:auto_increment
    非空:not null
    默认值:default 'xx'
    唯一:unique
    指定字符集:charset //例:charset utf-8
    主键:primary key


    增:
    create table students(
    id int(15) auto_increment,
    name varchar(10) not null,
    sex varchar(3) default '',
    age char(2),
    address varchar(50),
    phone char(11) not null unique,
    primary key(id));
    mysql> desc students;
    +---------+-------------+------+-----+---------+----------------+
    | Field | Type | Null | Key | Default | Extra |
    +---------+-------------+------+-----+---------+----------------+
    | id | int(15) | NO | PRI | NULL | auto_increment |
    | name | varchar(10) | NO | | NULL | |
    | sex | varchar(3) | YES | | | |
    | age | char(2) | YES | | NULL | |
    | address | varchar(50) | YES | | NULL | |
    | phone | int(11) | NO | UNI | NULL | |
    +---------+-------------+------+-----+---------+----------------+
    mysql> insert into students (name,sex,age,address,phone) values('zhangsan','男',26,'广东省珠海市香洲区',13356789124);
    mysql> insert into students (name,sex,age,address,phone) values('金正南','女',54,'广东省珠海市拱北区',15844551634);
    mysql> insert into students values('','金三胖','男',58,'朝鲜',14444444444);
    mysql> insert into students values('','小泉纯一郎','男',78,'日本',14445554444);
    mysql> insert into students values('','朴槿惠','女',60,'韩国',14445554774);
    mysql> select * from students;
    +----+------------+------+------+-----------------------------+-------------+
    | id | name | sex | age | address | phone |
    +----+------------+------+------+-----------------------------+-------------+
    | 1 | zhangsan | 男 | 26 | 广东省珠海市香洲区 | 13356789124 |
    | 2 | 金正南 | 女 | 54 | 广东省珠海市拱北区 | 15844551634 |
    | 3 | 金三胖 | 男 | 58 | 朝鲜 | 14444444444 |
    | 4 | 小泉纯⟼ 男 | 78 | 日本 | 14445554444 |
    | 5 | 朴槿惠 | 女 | 60 | 韩国 | 14445554774 |
    +----+------------+------+------+-----------------------------+-------------+


    insert into student (name,money,sex,phone) values ('hk',10000,'男',188);
    insert into student values('','小明',100,'',120);

    删:
    drop table tablename;     #删除整张表,操作会被记录
    truncate tablename;        #删除整表数据,自增长id从头再来,快速,从磁盘直接删除,不可恢复
    delete from student         #删除整个表的数据,自增长继续

    查:
    SELECT * from students limit 5;      #查询前5条
    SELECT id,name,sex,money,phone from students;      #指定查询的字段
    SELECT * from students where sex='男' and money>100;      #多个条件,必须同时满足
    SELECT * from students where sex='男' or sex='未知' ;      #多个条件,有一个满足即可
    SELECT * from students where sex !='男';      # <>也是不等于
    SELECT * FROM students where addr like '%东京%';      #模糊匹配,%代表的是通配符,必须得用like
    SELECT * from students a where stu_name like '姚_';      #_通配符表示任意一个单字符,姚字后面只能跟一个字
    SELECT * from students ORDER BY money desc;      #order by xxx desc,根据哪个字段排序,默认是升序,降序是desc,升序asc
    select * from table order by id desc,name desc;      #多个字段排序

    改:
    alter table oldtable rename newtable;        #改表名
    alter table tablename modify name varchar(20);    #改表结构
    alter table tablename change name newname varchar(20);   #改表结构
    alter table tablename add age float after name;    #在name后面新增age字段
    update student set money=100;    #不指定条件,修改所有
    update student set money=110 where name='hk';    #只改hk


    备份库:
    mysqldump -u root -p mysql > ~/mysql.sql
    还原库:
    mysql -u root -p web < ~/web.sql
    备份表:
    mysqldump -u root -p 数据库名 表名 > xxx.sql
    恢复表:
    mysqldump -uroot -p 数据库名 < xxx.sql

  • 相关阅读:
    shell编程 之 引号、括号的用法总结
    shell编程 之 文件包含
    shell编程 之 输入输出重定向
    shell编程 之 流程控制(条件语句和循环语句)
    shell编程 之 函数
    IOS 定位
    IOS添加多个按钮在导航栏
    移除UIView上面的所有控件
    UITabBarController
    IOS 调用拨打电话Api
  • 原文地址:https://www.cnblogs.com/smlile-you-me/p/9083700.html
Copyright © 2011-2022 走看看