• mysql简介及基本操作


    MySQL ---c/s架构
    数据库简介:数据库是以一定方式存储在一起的数据的集合。
    数据库管理系统:软件(实现存储,截取,安全保障,备份的功能。)
    数据库组成:数据库-->表(映射目录)-->行记录(映射文件)-->字段列(映射文件数据)
    数据库分类:
    一·关系型数据库
    关系型数据库建立在关系模型基础上,且使用sql语句作为查询语言
    (库与库,表与表,数据与数据之间可能存在某种关系)
    常见:mysql,mariaDB,SQL-server,Oracle
    二·非关系型数据库
    更多的非关系型数据库,是为了缓存加速,大多数工作在内存中
    存储:一般都依靠键值对(key-value)
    不使用sql作为查询语言的
    常见: mongodb(文件导向型数据库)
    redis(内存数据库,速度快持久化),
    Hbase(分布式数据库,与云结合,主用于大数据处理)
    《《《《《《触发器》》》》》》》
    MySQL----------------------------------------------------------------
    MySQL默认情况下是支持匿名登录的
    本地登录
    (给root设置密码)
    法一:#mysqladmin -u root password "123.com"

    法二:#mysql_secure_installation

    登录:mysql -u root -p123.com
    安全模式登录:破解root密码,停止mysql服务
    安全模式跳过授权表启动mysql(#mysqld_safe --skip-grant-tables --user=mysql &)
    匿名登录后修改user表
    关闭安全模式(#mysqladmin shutdown 或 杀进程 ps -ef | grep mysqld --- kill -9 ‘进程号’)
    重启新密码登录

    mysql初始化:# mysql_install_db(一般不用)

    SQL 语句
    结构化查询语言,和关系型数据库通信
    数据库名、表名、别名及视图名区分大小写的(因为linux是区分大小写的) 触发器区分大小写的
    基本SQL 语句(查看切换show select)

    DDL:Definition 数据定义语言(create drop alter truncate rollback commit)
    创建库; > create database 库名; 或者 create schema 库名;
    创建表: > create table 表名 (字段1 字段类型,字段2 字段类型,.....);
    字段类型:int :整型 、char(10):字符 、varchar(10):可变字符
    查看表结构: > desc t1;
    查看建表时语句: > show create table t1G;
    -----@创建表的时候,单独制定字符集
    > create table t4 (id int) default charset=utf8;
    删除表: > drop table 表;
    修改表:alter
    《1》对表字段修改
    1·修改字段名称0 > alter table 表 change 旧字段名 新字段名 数据类型;
    2·修改字段属性 > alter table 表 modify 字段 新属性(包括类型);
    ------@ 修改字符集 > alter database 库名 character set utf8;
    3·添加字段 > alter table 表 add 字段 字段类型 [关键词(after 旧字段/first)];
    4·删除表中字段 > alter table 表 drop 字段;

    《2》对表名修改 > alter table 旧表名 rename 新表名;
    截断表 :truncate
    > truncate table 表 ; (不能回滚,删除数据释放空间 速度快)
    《3》修改表引擎
    > alter table 表 engine=innodb
    ****导致io问题:不建议-->数据导出改表引擎导入

    DML : Manipulation 数据操纵语言 (insert delete update)

    1·插入数据:insert (可加条件 where)
    > insert into 表 ([字段名]) values(值);(字段名与值个数对应)
    2·查看数据:> select */字段 from 表
    3·删除数据:delete (可回滚 但engine=innodb)
    > delete from 表 [where 字段>=值];
    4·更新表中数据:update
    > update 表 set 字段=新值 where 条件(确定哪行字段);

    DQL : Query 数据查询语言 (select show)

    SQL语句的执行顺序如下: from where (group by) having select (order by) limit

    1·指定条件查询:
    格式:select * from 表 where 表中字段>=值
    select 用来过滤字段的
    from 指定从哪些表中查询数据
    where 用来过滤行的
    show variables;查看变量值

    2·模糊查询 :
    格式: select 字段1 from 表 where 字段2 like ‘x%’
    show variables like 'da%';

    like '_'或'%' _:匹配单个字符 %:匹配0个或多个字符

    3·分组查询 :
    格式:select {显示的列} from 表 group by {以表中那列分组} [having 条件];

    例子: select class,avg(score) as avg from student group by class;查询每个班的平均成绩
    select class,sum(chengji) from example group by class having class="1";

    4·排序查询 :
    格式: order by 字段名[,字段名2,....] {asc|desc} [以哪个字段排序]
    例子: select * from student order by score desc;

    asc :升序,(默认)
    desc :降序
    5·限制输出 :
    格式:limit n 只显示查询结果的前n条
    limit m,n 从m+1行开始,显示n行

    6·子查询 : 嵌套查询,将里层查询的结果作为外层查询的条件
    格式:
    例子:select class,name,shuxue from haha where class=(select tclass from hehe where tclass=1;
    7·连接 :
    格式:
    外连接:
    左连接:select * from t2 left join t3 on t2.class=t3.tid;
    右连接:select * from t2 right join t3 on t2.class=t3.tid;

    自然连接:select * from t2 join t3 [where t2.class=t3.tid];

    内连接:获取的是两个表的公共的部分,可能造成信息的丢失
    表一 inner join 表二 on 连接条件
    或者:where 表一.字段名=表二.字段名
    8·去重 :distinct
    9·正则表达式:regexp -----> regular expression

    DCL : control 数据控制语言 (grant revoke)
    1·创建用户 :create user 用户名@{主机名|ip地址} identified by ‘密码’;
    2·删除用户 :drop user 用户名@{主机名|IP地址};
    3·远程登录 :mysql -u 用户名 -h IP地址 -p

    ERROR 1042 (HY000): Can't get hostname for your address
    修改配置文件:
    [root@mysql mysql]# vim /etc/my.cnf
    在[mysqld]那段里面添加如下行:5.6版本不需要
    skip-name-resolve //跳过名字解析,否则无法远程连接该mysql管理系统

    4·授权 (创建用户):grant 权限 on 库名.表名 to 用户名@{主机名|ip地址} identified by ‘密码’;
    mysql> flush privileges; //刷新权限
    5·查看权限 :show grants for 用户名@{主机名|IP地址};
    6·回收权限(删除用户):revoke 权限 on 库名.表名 from 用户名@{主机名|IP地址};

    索引---------------------------------------------------------------------------------------------------
    功能:加快数据检索的速度,提高查询、插入效率
    适合创建索引: 不经常发生变化,一般都为主键字段

    查询sql语句较慢的原因:1·可能没建立索引、2·查询语句顺序有问题、3·需要开启慢查询日志查原因
    注释:2·---->顺序通过索引字段查询,查询范围放到最后,否则会中断索引

    缺点:
    1)创建和维护索引都需要消耗时间,消耗时间的长短取决于数据量的多少
    2)会占用磁盘空间
    3)更新数据库中的数据时,索引也会更新

    索引的分类
    单列索引:参照一个字段
    多列索引:参照多个字段
    唯一索引:索引字段唯一
    1·创建索引
    单列索引
    建表创索引 create table 表名 (字段名 字段类型,... ...,index [索引名](索引字段的列表));
    直接建索引 create index 索引名 on 表名(字段名);
    添加索引 alter table 表名 add index [索引名](索引字段);

    唯一索引 alter table 表名 add unique index [索引名](索引字段);

    多列索引
    建表创索引:create table 表名 (字段名 字段类型,... ...,)index [索引名](索引字段1,索引字段2);
    直接创索引:create index 索引名 on 表名(字段1,字段2);

    2·查看索引 show create table 表名G;
    show index from 表名G ;

    3·删除索引 drop index 索引名 on 表名;
    alter table 表名 drop index 索引名;

    4·索引使用: where子句中引用索引字段;范围放在后面 name=tom and id>100
    (范围类型会中断索引)

    完整性约束---------------------------------------------------------------
    完整性约束就是确保数据库中的数据是有意义的、正确的
    为了保证数据的正确性,对关系模型提出的某些约束条件或者是规则。
    七类别:非空、唯一、默认值、主键、外键、自增、无符号
    语法:
    字段名 字段类型 [not null | unique | default 默认值 | auto_increment| unsigned| primary key| foreign key]

    1、默认值
    create table 表名 (name char(10),city char(10) default 'shenyang');
    alter table 表名 modify name char(10) default 'mary';
    2、非空
    create table 表名 (id int not null,name char(10) not null );
    alter table 表名 modify name char(10) not null;
    3、唯一
    create table 表名 (id int unique,name char(10));
    4、自增
    要求:1)该字段的类型必须是数值型的
    2)字段上要有唯一约束或主键
    create table 表名 (id int primary key auto_increment,name char(10));
    几点说明:
    1)当自增字段发生断档时,值从最大值继续自增
    2)当用delete删除最大值时,下一个值仍然从最大值的下一个继续自增
    3)当你truncate一个表时,值从1开始重新计算
    ---@ 为何自增增值默认为1(变量决定)
    mysql>show variables like "%increment%";
    ~~~~~auto_increment_increment 1
    auto_increment_offset 1
    修改:将上面两行内容赋值,写到配置文件重启生效。

    5、主键----primary key = not null + unique
    主键是表中的特殊字段,这个字段能够唯一标识表中的每一条记录。
    主键用途:快速定位数据的
    主键在一张表中最多只能有一个。
    主键满足的条件:非空且唯一
    1)使用单个字段做主键
    a、在字段后直接指定主键约束(列级约束)
    create table 表名 (id int primary key,age int,name char(10));
    b、整张表的所有字段都定义完成之后再去指定主键(表级约束)
    create table 表名 (id int,name char(10),primary key(id));
    2)多个字段联合做主键
    联合主键只能在所有字段都定义之后,再去定义主键
    create table pri2 (id int,name char(10),age int,primary key (id,name));
    3)对一个已经存在的表
    添加主键:
    alter table 表名 add primary key(sno);
    删除主键:
    alter table 表名 drop primary key; {删除主键,会将非空性约束保留}
    6、外键
    外键:一个表B中的数据依赖于另一张表A的主键列的数据,如果A表中未出现的值,是不能够出现在B表中的
    创建外键的条件:
    1)存储引擎是innodb,是mysql5.6默认的引擎
    2)相关联字段数据类型要一致
    3)最好在外键列上建索引
    4)默认创建主外键后,父表中数据不可删除子表所依赖的行
    5)子表不可插入父表不存在的值
    例子:create table 表1 (dno int,dname char(10),primary key (dno)) engine=innodb;
    create table 表2 (eno int,edno int,ename char(10),index(edno),foreign key (edno) references dept(dno)) engine=innodb;
    小结:
    1)子表中的数据依赖于父表,不能向子表中插入父表中不存在的值
    2)不能删除父表中被子表所依赖的行

    有了级联删除和级联修改选项,父表中的数据发生删除或者更新时,子表中的数据也会发生相应的变化;删除子表中的行数据,对父表没有影响
    on delete cascade 级联删除
    on update cascade 级联更新

    删除外键

    查看外键的名字 mysql> show create table 表名G
    mysql> alter table 表名 drop foreign key 表名_ibfk_1;

    视图(虚表 | 基表)-----------------------------------------------------------------------
    视图是从一个或者多个表中导出来的表片段,重新组合形成逻辑空间
    视图是一个从 一个或多个表中 导出来的数据 组成的虚拟的表,在某些地方就管视图叫作虚表。
    注:参照的一个或者多个的表,我们叫作基表。
    视图的作用:
    主要就是提供给用户使用的常用数据,可一个或者多个表当中片段。
    (隐藏表真正的字段名称,隐藏不需要的数据)
    如果视图中的数据被修改,那么基表 的数据也会被修改;但是视图被删除,对基表没有任何影响。
    如果基表中的数据被修改,那么 视图 的数据也会发生变化;
    语法:
    create view 视图名字 as 来自哪个表(通常是select语句)
    创建-----
    创建视图的时候,指定了约束条件,视图中的数据必须是满足这个条件的。
    如果修改了基表或虚表,导致数据不满足约束条件,那么视图中的数据被踢出。如果重新满足条件,又会出现在虚表中

    (1)先在单表的基础上创建视图。
    mysql> create view 虚名 as select name,price from 基表名 where name is not NULL;
    (2)在多个表上创建视图
    mysql> create view 虚名 (id,name,ule) as select 基表1.id,基表1.name,基表2.ule from 基表1,基表2 where 基表.id=基表2.id;

    查看视图的信息
    (1)mysql> desc 视图名;

    (2)mysql> show create view 视图名G;

    (3)mysql> show full tables;

    (4)mysql> select * from information_schema.viewsG;

    修改视图的数据
    insert
    update
    delete
    删除视图
    mysql> drop view 视图名;

    总结:
    (1)视图和表的关系
    视图的数据来自表;
    一个视图可以来自一个表,也可以来自多个表;
    基表表的数据发生变化,视图也变;视图的数据发生变化,基表也变。
    (2)视图和表的区别
    视图是虚拟的表;
    视图不占用物理空间,表需要占用物理空间;
    创建和删除视图不会影响到表的数据。
    (3)在哪些情况下不可以修改视图的数据
    创建视图的时候加了约束条件,视图准备要修改的数据不满足约束条件,关键字;
    视图中的数据使用了 聚合函数-sum avg max min count (现在可以修改)
    (4)不可以创建视图的情况
    在存储过程中不能创建视图
    在创建视图的过程中不能使用变量

    备份和恢复--------------------------------------------------------------------------------------------
    备份是为了保证在灾难发生的时候(异地灾备),保证数据不丢失或者是最小程度的丢失(计划任务+脚本来实现自动化)
    (一)、备份的分类
    1、根据备份方法分
    1)冷备份 离线备份(offline backup)
    这种备份最简单,直接拷贝物理文件
    需要关闭数据库的,然后才能进行备份
    注意:通常是在系统刚搭建初期
    2)热备份 在线备份(online backup)
    无需关闭数据库,直接在线备份
    3)温备(warm backup)
    无需关闭数据库,但是会对当前数据库的操作有影响,因为会给数据库加全局读锁 mysqldump
    2、根据备份后的文件划分
    逻辑备份:指备份出来的文件是可读的,也就是文本文件 如:mysqldump
    逻辑备份,很多情况下是备份出sql语句,逻辑备份恢复起来时间较长
    物理备份:指备份数据库的物理文件 如:ibbackup dbrd
    不需要恢复,只需要提供可用的文件系统和数据管理系统即可
    3、按照备份数据库的内容来分
    完全备份:不管是否发生变化,将全库都备份,一般也发生在系统规划初期
    增量备份:仅备份上次备份到这次备份之间发生变化的部分
    日志备份:备份二进制日志,二进制日志重做进行备份(主备)

    在企业中,一般的备份策略是完全备份+增量备份

    备份时间的选择:数据库访问量较小的时候去备份。

    (二)、备份 mysqldump
    # mysqldump -u 用户名 -p密码 {库名|表名} > 备份路径/XXX.sql
    单库备份 库名
    单表备份 库名 表名
    多表备份 库名 表1 表2
    多库备份 -B 库名 库名
    全库备份 --all-databases
    (三)、恢复
    1、单库恢复(要先创建数据库的) mysql> create database 库; //先建库

    第一种 mysql> use 库
    mysql> source 备份路径/XXX.sql
    第二种
    # mysql -uroot -p 库 < 备份路径/XXX.sql
    2、单表恢复
    # mysql -uroot -p 库 < 备份路径/XXX.sql
    3、多表恢复
    # mysql -uroot -p 库 < 备份路径/XXX.sql
    4、多库恢复 (不需要手动建库)
    mysql> source /tmp/utdb.sql
    5、全库恢复
    # mysql -uroot -p < /tmp/all.sql
    备份时候加锁
    -x:给所有的表加读锁
    -l:给单独的表加读锁

    存储引擎-------------------------------------------------------------------------------------------------------
    存储引擎:不同的存储引擎可以给数据库带来不同的功能和性能。

    查看当前数据库软件支持哪些存储引擎:mysql> show engines;

    (一)、设置表的存储引擎
    1、启动服务时,临时指定默认的存储引擎(不太常用)
    # mysqld_safe --default-storage-engine=myisam --user=mysql &
    2、永久修改默认存储引擎(对于5.5以上的版本,不添加该行默认也是如此)
    vim /etc/my.cnf
    default-storage-engine=innodb
    3、在建表时直接指定存储引擎
    mysql> create table 表 (id int) engine=memory;

    (二)、MyISAM引擎
    MyISAM存储引擎注重速度,但是不支持事务、不支持外键等。
    InnoDB存储引擎注重事务,但是速度会慢一些,目前基本速度差不多,支持外键

    MyISAM存储引擎的目录结构
    tmy.frm tmy.MYD tmy.MYI
    tmy.frm:存储表结构 frame
    tmy.MYD:存储表中的数据
    tmy.MYI:存储的是表的索引

    (四)、InnoDB引擎
    InnoDB存储引擎:支持事务、支持行级锁、支持外键 *****

    InnoDB存储引擎的目录结构
    emp.frm //该存储引擎在数据库目录下只会存放表的结构
    表的数据和索引都存放在数据目录下的ibdata1文件中

    InnoDB支持事务——事务满足4个特性:ACID (正常来讲:事务是可以回滚和提交)

    dml操作支持事务(insert、update、delete)
    1、A —— Atomicity 原子性
    一个事务是一个整体,它里面的所有的操作要么都做,要么都不做,是不可再分割的。
    2、C —— Consistency 一致性
    事务开始前和结束后,数据库的完整性约束是一致的
    3、I —— Isolation 独立性、隔离性
    两个事务之间是互不相干的,是相互独立的
    4、D —— Durability 持久性
    事务完成之后,对数据库的所有的更改都会持久的保存在数据库中。

    事务结束的标志
    1、明确执行commit提交,表示确认修改
    2、明确执行rollback回滚,表示取消所有的更改
    3、遇到ddl语句的时候,自动提交(create、alter、drop、truncate)
    注:truncate截断表后,内容不可以回滚
    delete删除数据后,可以使用rollback进行回滚
    4、正常退出数据库管理系统,自动提交
    5、异常退出数据库管理系统,自动回滚

    查看事务默认隔离级别:
    mysql> select @@tx_isolation

    查看是否是自动提交:
    mysql> select @@autocommit
    如果是0表示不会自动提交,
    如果是1表示自动提交

    事务常见的四种隔离级别:(逐渐增强)
    可以设定全局的变量:global.tx_isolation
    READ-UNCOMMITTED 读未提交 ,一方的事务没有提交,另外一方也可以看见
    READ-COMMITTED 读提交,只有一方事务提交了,另外一方才可以看见
    REPEATABLE-READ 重复读取,一方事务没有提交,另外一方可以读取,但是读取的是事务执行前的内容
    SERIALIZABLE 串行,事务可以阻塞只有一方事务提交了,另外一方查看动作一直处于等待状态,另外一方才可以去查看,

    修改隔离级别:
    mysql> set tx_isolation='';

    mysql> set autocommit=0; 手动关闭自动提交
    mysql> start transaction; 手动指定去启动一个事务

    幻读、脏读

    锁-------------------------------------------------------------------------------------------------------

    读锁: 共享锁、自己仅对当前库当前表有读权限,阻塞其他人对当前表写操作,允许读
    写锁: 排他锁、自己仅对当前库当前表有读写权,阻塞所有其它人对当前表的读写操作

    一般情况下,当操作数据库时,数据库是自动加锁解锁的,不需要人工干预的

    根据粒度划分(作用范围)
    表级锁,行级锁及页级锁

    一、读锁
    给表加读锁 mysql> lock table 表 read;
    解锁 mysql> unlock tables;
    二、写锁
    给表加写锁 mysql> lock table 表 write;
    解锁 mysql> unlock tables;

    日志管理-----------------------------------------------------------------------------------------------

    日志存放位置:/data/mysql
    四类日志:
    二进制日志: 记录DDL和DML -----二进制日志作用:数据恢复、AB复制
    错误日志: 记录系统运行正确启动信息和错误信息
    慢查询日志: 记录慢查询语句 -----一般用于优化查询。
    通用日志: 记录所有客户端操作语句 (默认不开启)

    (一)、开启各种日志,修改配置文件
    1、开启通用查询日志,指定文件名
    # vim /etc/my.cnf
    查询日志:
    log_output = {TABLE|FILE|NONE}
    log_output = TABLE,FILE
    FILE: gerenal_log
    general_log = {ON|OFF}: 是否启用查询日志
    general_log_file = www.log:当log_output有FILE类型 时,日志信息的记录位置

    交互模式:
    > set global general_log=ON;

    2、开启慢查询日志,指定文件名,设置超时时间
    慢查询日志:
    SELECT @@GLOBAL.long_query_time;

    # vim /etc/my.cnf
    永久生效:
    #vim /etc/my.cnf
    添加如下两行
    slow_query_log = {ON|OFF}:是否启用慢查询日志
    slow_query_log_file = /path/to/somefile: 日志文件路径
    临时开启某个功能:
    mysql>set global slow_query_log='on';
    3、错误日志,修改前缀名
    # vim /etc/my.cnf
    log_error = /path/to/somefile
    log_warnings = {ON|OFF}:是否记录警告信息于错误日志中;
    4、开启二进制日志

    log_bin = /path/to/somefile
    binlog_format = MIXED
    sql_log_bin = ON
    max_binlog_size = 1073741824
    二进制日志文件的单文件上限;
    max_binlog_cache_size = 18446744073709547520
    max_binlog_stmt_cache_size = 18446744073709547520

    sync_binlog = 0:设定多久同步一次二进制日志文件;0表示不同步;任何正值都表示记录多少个语句后同步一次;
    log-bin=mysql-bin //原有的

    (二)、二进制日志的查看 mysqlbinlog
    # mysqlbinlog mysql-bin.000011
    # at 4 //事件发生的位置信息
    #150914 16:30:27 //事件发生的时间信息

    (三)、二进制日志恢复
    1》时间点 mysqlbinlog --start-datetime='开始时间' --stop-datetime='结束时间' mysql-bin.000012
    2》位置点 mysqlbinlog --start-position='开始位置点' --stop-position='结束位置点' mysql-bin.000012
    查看日志信息
    mysql> show master logs; //显示二进制日志文件的名字和大小的
    (四)、对日志的管理
    删除日志 不要轻易删除
    1)删除某个日志之前的所有日志
    mysql> purge master logs to 'mysql-bin.000006'; //删除6以前的日志(不包含6)
    2)删除多少天以前的日志文件
    mysql> purge master logs before date_sub(current_date,interval 1 day); //删除一天以前的日志
    3)重置二进制日志
    mysql> reset master; //从000001开始重新计数
    4)手动生成新的二进制日志文件
    mysql> flush logs;
    主从---------------------------------------------------------------------------------------------------------
    @@------主备: 保证服务器高可用,一旦主服务器宕机,备节点会接替主节点工作
    主主:
    两台都开启二进制日志和中继日志;两台主机互相授权;两台主机互相连接
    导致:数据多余----避免:主键和自增
    主从:
    作用: 减轻主服务器压力、实现读写分离

    靠把主服务器的二进制日志同步和重做实现:
    从服务器靠主服务器给的授权同步权限,连接到主服务器;把主服务器二进制日志同步给从服务器,从服务器靠io—thread接收,转换为自己的中继日志;通过SQL—thread翻交给MySQL进程执行;创建和更改数据库数据(日志重做)
    IO_THREAD SQL_THREAD
    主:
    1· 修改配置文件 server_id开启二进制日志
    2· 授权 :同步权限
    [3· 全库备份] (保证主从数据一致)

    从:
    1· 修改配置文件 server_id开启中继日志
    2· 全库恢复
    3· 连接主服务器
    排错:
    mysql> slave stop; //停掉slave
    0)首先保证关闭selinux和防火墙
    1)看change master to 语句是否有问题,如果有,那么就改正,然后重新执行
    mysql> change master to
    master_host='172.16.254.200',
    master_port=3306,
    master_user='slave',
    master_password='douniwan',
    master_log_file='mysql-bin.000003',
    master_log_pos=441;
    2)在从服务器上尝试使用slave用户登录master数据库
    [root@slave ~]# mysql -uslave -pdouniwan -h 172.16.254.200
    3)查看主服务器上的日志文件名和位置点是否正确
    4)看错误提示去判断
    可能原因: 主从的server-id要不一样
    5)主服务器解锁 >unlock tables;

    运算符--------------------------------------------------------------------------------------------------------

    运算符
    1、算数运算符 : + - * / % 幂(power) 例子:select power(2,10),2*5,5/3;
    2、比较运算符 : > < >= <= == != 等价于 <>
    3、逻辑运算符 :and (&&) or (||) not (!)
    4、位运算 :
    【4<<1 = 8】左位移值=原数x2^位数 向左不可无限大(2^64-1)
    【4>>1 = 2】右位移值=原数/2^位数 向右被除数大于原数皆为0

    函数(help functions;)----------------------------------------------------------------------------------------

    一、时间函数 :curtime() curdate() now() sysdate() year() timestamp()

    二、聚合函数 :求和 sum(字段名)
    求平均值 avg(字段名)
    求最大值 max(字段名)
    求最小值 min(字段名)
    统计匹配行数 count(字段名)

    三、其他函数 :concat() 连接函数
    upper() 转换成大写
    lower() 转换成小写
    length() 求长度
    version() 查看版本
    database() 查看当前数据库
    数据结构-----------------------------------------------------------------------------------------------

    数据结构: ***
    数值: 整型(tinyint,smallint,mediumint,int,bigint)、浮点(float(m,n),double(m,n))、布尔
    字符: char(10) 定长 , varchar(10) 变长 ‘ab’
    时间: time date datetime timestamp year ...
    枚举: enum 从给定值中任选一个
    集合: set 可以从给定值中任选多个
    log text blob ....
    (一)、数值
    整型
    表示的数值范围不同,存储这样的一个数据占用的磁盘空间不同
    存储 占用字节数 有符号数的范围 无符号数范围
    tinyint 1B(8 bits) -128 ~ 127 0 ~ 255 (2^8-1)
    smallint 2B -2^15 ~ 2^15-1 0 ~ 65535 (2^16-1)
    mediumint 3B
    int 4B
    bigint 8B
    修饰符:
    unsigned 无符号
    not null 不允许为空,一般情况下,带有约束的字段可以设定为非空(约束有唯一性约束,也可以是主键约束)
    浮点型
    单精度浮点数:float(M,D) M是总长度,D是小数位的位数 float(5,2) 存储占用空间 4B
    双精度浮点数:double(M,D) 存储占用空间 8B

    整型也可以指定显示宽度的,但是并不影响取值范围的。
    布尔型
    类似真或假、0或1、yes或no
    (二)、字符
    char(10):底层存储定长 范围0~255byte
    varchar(10):根据底层存储字符调整底层存储范围0~65535
    (会比存储字符多出1~2个字节,表示字符串长度
    如果用1个字节标识长度:最多标识到255长度
    如果用2个字节标识长度:最多标识到65535长度)
    复制记录和复制表----------------------------------------------------------------------------------------

    复制记录
    1、复制记录(快速插入记录)
    > insert into 表1(id,name) select * from 表2;
    2、全表复制(复制表的结构和数据,不会复制主键等)
    > create table 新表名 [as] select 字段列表 from 已经存在的表;
    3、复制表的一部分
    > create table 新表 select * from 旧表 where id=1;
    只复制表结构
    法一:
    mysql> create table 新表 select * from 旧表 where 1=0;假的条件
    法二:
    mysql> create table 新表 like 旧表;

    数据的导入导出--------------------------------------------------------------------------------------

    (一)导入数据(关闭selinux)
    1、创建源文件
    导入数据时默认的字段分隔符是 ,默认的行分隔符
    2、创建mysql中与源文件数据类型相同的表
    3、导入记录
    >load data infile "文件路径及名字" into table 表名;
    手动指定字段分隔符在结尾加“fields terminated by '分隔符'”
    (二)导出数据
    > select * from 表 into outfile "文件路径及名字";
    手动指定字段分隔符在结尾加“fields terminated by '分隔符'”

    ----------------------------------------------------------------------------------------------------------
    --------@
    1、查看mysql的进程列表(即有多少人连接到数据库上正在做什么操作)
    mysql> show processlist;
    2、非交互式执行sql语句 (面试题)*****
    [root@mysql ~]# mysql -uroot -predhat -e "show processlist"

    mysql优化---------------------------------------------------------------------------------------------

    1·innodb_buffer_pool_size:

    一般的策略是,如果数据库很大,远远超过内存时,应尽可能增大该缓冲池;如果数据库很小,一般该值为数据库的10%即可
    缓冲池的大小是不能高于内存(看无连接情况下,内存的剩余量)
    2·innodb_flush_method

    一般建议将该值设定为O_DIRECT,可以避免双重缓冲,让数据库跳过文件系统缓冲直接和设备文件进行交互

    3·innodb_log_file_size

    一般建议设定为缓冲大小的25% 旧的版本数据库系统默认值为4mb

    4·innodb_flush_log_at_trx_commit;

    一般建议该值设定为2,在每个事物进行提交时,日志缓冲会被写到文件,但不会对日志行进到磁盘的刷新,对日志文件每秒刷新一次,更加安全

    5·innodb_thread_concurrency
    线程数量的最大值,一般设定为处理器数量加磁盘数,但是对于高并发事务,要再增大该值


    6 sync_binlog
    如果开启,则根据该值决定每隔多久会将刷新写入到磁盘;一般建议修改为1,这样最多只会丢失一条记录


    7innodb_max_dirty_pages_pct;
    该值的范围为0-100,默认为90;数据库中的主线程试着从缓冲池写数据,使得脏页的百分比不超过该值。一般建议设定为50-75

    8read_buffer_size;
    每隔线程连续描述时,为扫描的每个表分配的缓冲大小;使用默认值即可,必要时还可以指定为全部内存大小


    调节缓冲池大小、日志文件大小、当前线程数量、线程扫描数据分配的缓冲大小、二进制日志同步



  • 相关阅读:
    Thinkphp5.0 模型hasOne、hasMany、belongsTo详解
    ES6中async和await说明和用法
    必会SQL练习题
    Git初识学习
    CI框架简单使用
    JavaScript 的 this 原理
    javascript实现游戏贪吃蛇
    js清除childNodes中的#text(选项卡中会用到获取第一级子元素)
    JavaNIO
    MongoDB入门_shell基本操作
  • 原文地址:https://www.cnblogs.com/zhangshan-log/p/13745303.html
Copyright © 2020-2023  润新知