源码编译mysql及其各种查询总结

一、编译安装配置及相关参数设定

确保安装了编译环境所需要的包组

安装“Development tools”和“Server Platform Development”包组

1、安装cmake

cmake-2.8.8.tar.gz

跨平台编译器

# tar xf cmake-2.8.8.tar.gz

# cd cmake-2.8.8

# ./bootstrap

# make

# make install

2、编译安装

逻辑卷挂载到/mydata目录下

#mkdir /mydata/data

# tar xf mysql-5.5.33.tar.gz

# cd mysql-5.5.33

# groupadd -r mysql

# useradd -g mysql -r -d /data/mydata mysql

# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \#cmake的安装路径

-DMYSQL_DATADIR=/mydata/data \#数据目录

-DSYSCONFDIR=/etc \#配置文件路径

-DWITH_INNOBASE_STORAGE_ENGINE=1 \  #编译INNOBASE存储引擎

-DWITH_ARCHIVE_STORAGE_ENGINE=1 \ #编译ARCHIVE存储引擎,支持压缩的归档引擎

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ #编译BLACKHOLE存储引擎

-DWITH_READLINE=1 \   #数据导入导出功能  批量数据导入

-DWITH_SSL=system \#ssl路径

-DWITH_ZLIB=system \#网络传输时,可以进行压缩

-DWITH_LIBWRAP=0 \   #是否接受tcprap通知

-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \#UNIX进程间通信的地址

-DDEFAULT_CHARSET=utf8 \#默认字符集

-DDEFAULT_COLLATION=utf8_general_ci#默认排序规则

# make

# make install

#chown -R root:mysql /usr/local/mysql/*

#cd/usr/local/mysql/

#cd mysql/support-files有样例,我们可以根据自己的需要选择

将选择的文件复制一份到/etc/目录下并修改文件名为my.cnf

#cp my-large.cnf /etc/my.cnf

3:修改配置文件

# vim /etc/my.cnf

找到相关设置进行修改操作

thread_concurrency = 4并发核心数, 如果物理核心为2,这里就可以填写4

添加 datadir=/mydata/data

innodb_file_per_table = 1#每表一个表空间

初始化脚本

#cd /usr/local/mysql/

#scripts/mysql_install_db –user=mysql –datadir=/mydata/data/

服务脚本

#cp mysql.server /etc/rc.d/init.d/mysqld

添加mysql服务

#chkconfig –add mysqld

验证一下

#chkconfig —listmysqld

启动服务

#service mysqld start

这时候还不能连接客户端

# vim /etc/profile.d/mysql.sh

export PATH=/usr/local/mysql/bin:$PATH

执行脚本

# . /etc/profile.d/mysql.sh

#mysql就可以进入了

因为我们的安装不在标准路径下,所以还要进行下面的操作

导出帮助文件

#vim /etc/man.config

MANPATH /usr/local/mysql/man

导出头文件

#ln -sv /usr/local/mysql/include /usr/local/mysql

导出库文件

#vim /etc/ld.so.conf.d/mysql.conf

/usr/local/mysql/lib

至此我们的mysql配置完成。

mysql> show processlist;#显示当前mysql服务器所有的线程列表

mysql>use mysql;#切换到mysql库

mysql> show tables;#显示所有表

mysql> desc user;#显示user表的结构

mysql> show indexes from user;#主键

mysql> select user,host,password from user;#显示user表的user,host,password信息

删除没密码的用户

mysql>  drop user ”@localhost;

mysql>  drop user ”@localhost.localdomain;

再次查看有哪些用户

mysql>  select user,host,password from user;

将没有用户名的都删除,将保留需要的root用户名的要添加密码以保证安全性

给所有的root用户设定的密码为mypass

mysql> update user set password=PASSWORD(‘mypass’)where user=’root’;

生效后刷新授权表

mysql>flush privileges;

退出后重新登陆时就需要密码了

修改用户密码:

1、# mysqladmin -uUSERNAME -hHOST  password ‘new_pass’;

2、mysql> SET PASSWORD FOR username@host=PASSWORD(‘new_pass’);

3、mysql.user

mysql> UPDATE user SET password=PASSWORD(‘new_pass’) WHERE user=’root’;

如果忘记root用户密码:

修改/etc/rc.d/init.d/mysqld

启动选项:–skip-grant –skip-networking

找到相关内容位置

添加后:

$bindir/mysqld_safe –datadir=”$datadir” –pid-file=”$mysqld_pid_file_path” $other_args –skip-grant –skip-networ>/dev/null 2>&1 &

注意:我们登入后重新设定密码后要将这一项再去掉

二、分组的相关用法

导入一个数据库

#mysql -uroot -p < hellodb

mysql>usehellodb    #切换到hellodb库

显示students表中的所有内容

mysql> select * from students;

以classid分组,显示每个classid对应有多少人

mysql> select classid,count(name) from students group by classid;

显示classid对应的人数大于等于2的有哪些

mysql> select classid,count(name) from students group by classidhaving count(name)> =2;

可以使用别名对上面的进行修改,如下:

mysql> select classid,count(name)as cfrom students group by classidhaving c >=2;

对年龄进行排序(默认为升序)

mysql> select name,age from students order by age;

如果降序排列:

mysql> select name,age from students order by agedesc;

对降序得到的只显示某些的

mysql> select name,age from students order by agedesc limit 3 4;空过3个后显示4个

DISTINCT 对显示的值只显示一次

以性别分组,显示各组年龄中的最大值;

mysql> select gender,max(age) from students group by gender;

以班级分组,显示各组年龄中的最小值;只显示最小年龄小于20的班级;

mysql> selectclassid,min(age) from students group byclassid;

mysql> selectclassid,min(age) from students group byclassid having min(age)< 20;

如果还需要排序在后面添加order by min(age)

以性别分组,显示各组年龄的年龄之和,要求将年龄之和逆序排列;

mysql> select gender,sum(age) from students group by genderorder by sum(age)desc;

以年龄分组,显示各组中的人数;

mysql> selectage,count(name) from students group byage;

内联结:自然联结

显示两张表classid相等的同学的信息

mysql> select * from students,classes where students.classid = classes.classid;

外联结:一张表与另外一张表对应的值,如果没有,就显示null

左外联结

mysql> selectname,classfrom studentsleft joinclassesonstudents.classid = classes.classid;

右外联结

RIGHT JOIN … ON …

自联结:sometable AS alias1 INNER JOIN sometable AS aliase2 ON alias1.FILED = alias2.FIELD;

mysql> select s.name as student,t.name as teacher from students as s inner join students as t where s.teacherid=t.stuid;

对同一张表设定两个别名来实现自联结

联合查询:将两张表的结果组合起来,形成一个新的表

SELECT clause UNION SELECT clause

显示teachers表中年龄大于50岁的和students表中年龄大于40岁的姓名和年龄的信息,并且在一张表显示

mysql> select name,age from teachers where age > 50 union select name,age from students where age > 40;

多表联合的查询 :将每两张表表示信息相同部分的查找字段作为联合查询的依据

mysql> select name,course from students,classes,coc,courses where students.classid=classes.classid and classes.classid=coc.classid and coc.courseid=courses.courseid and students.name=’Ding Dian’;

这个命令可以简单写:

mysql> select name,course from students,coc,courses where students.classid=coc.classid and coc.courseid=courses.courseid and students.name=’Ding Dian’;

练习、如何显示其年龄大于平均年龄的同学的名字?

mysql> select name,age from students where age > (select avg(age) from students);

子查询:

用于WHERE子句

SELECT clause FROM tb1 WHERE

1、用于比较表达式中的子查询;

2、用于EXISTS中的子查询;

3、用于IN中的子查询;

用于FROM中的子查询

SELECT col,… FROM (SELECT clause) WHERE condition

据说:MySQL对子查询的优化很有限;

MySQL查询:

简单查询

SELECT [DISTINCT] col, col,… FROM tb1 WHERE condition GROUP BY col HAVING condition ORDER BY col LIMIT [m,]n;

子查询:

WHERE:

用于比较条件:子查询只能返回单个值

用于IN

找出学了不存在课程的班级

mysql> select classid from coc where courseid not in (select courseid from courses);

用于EXISTS

FROM:

显示班级里面有大于平均年龄的同学所在的班级

mysql> select classid,count(name) from students where classid is not null and age > (select avg(age) from students) group by classid;

事务:ACIDinnodb支持事务

ACID:I: 隔离性

事务有隔离级别:

READ-UNCOMMITTED读未提交   (别人修改的尚未提交的数据自己能看到)

READ-COMMITTED读提交         (别人修改的提交的数据自己能看到)

REPEATABLE-READ重读级别(不受别人影响)

SERIALIZABLE可串行化            (同时查询的情况一方不能修改)

MVCC: Multi Version Concurrency Control

#sql_log_bin

# mysqlbinlog

三、Mysql基础命令用法

DDL:

数据库:

创建:

CREATE DATABASE|SCHEMA  [IF NOT EXISTS] dbname;

CHARACTER SET=定义字符集

COLLATE=定义排序规则

SCHEMA方案

删除:

DROP DATABASE|SCHEMA [IF EXISTS] dbname;

[IF EXISTS]避免调用时报错

获取帮助:HELP SQL KEYWORD

修改:

ALTER DATABASE db_namedefault (属性) 修改属性

ALTER {DATABASE | SCHEMA} db_name

UPGRADE DATA DIRECTORY NAME升级数据库字典

表:

创建:

CREATE TABLE tb_name (col1 defination, col2 defination, …) [table_options];

table options:

ENGINE=engine定义存储引擎

查看默认存储引擎:

#mysql> show session variables like ‘%engine%’;

DELAY_KEY_WRITE={0|1}#是否延迟键写入

TABLESPACE tablespace_name#表空间文件

CREATE TABLE tbname [(defination)]  SELECT clause;

CREATE TABLE tbname LIKE old_table_name;

mysql> create table tb2(id INT not null,name CHAR(24),INDEX(id));I#创建tb2,

mysql> show indexes from tb2\G显示tb2的索引

mysql> create table tb4 like tb3; #复制和tb3相同的表tb4的结构,但是不复制其内容

mysql> create table tb3 select user,host,password from mysql.user; 复制全部数据,但是表的结构不一定会完全复制

所以,将上述两个命令结合起来就能够使表的结构和数据一起被复制了。

存储引擎:也称作表类型

MyISAM表:

tbname.MYD表的数据

tbname.MYI表的索引

Tbname.frm表的定义

表空间:ibdata1

每表一个表空间:

tbname.frm表的定义

tbname.ibd: 数据和索引

开启方法:

SET GLOBAL innodb_file_per_table=1;实现每表一个表空间

建议:同一个库中的表最好使用相同的存储引擎;

删除:DROP TABLE [IF EXISTS] tbname;

改名:RENAME TABLE tb_name TO new_name;

修改:ALTER TABLE tbname

ADD col defination [{first|after col_name}] ;

DROP colname;

MODIFY col defination [{first|after col_name}] ;#修改小部分内容

CHANGE col new_col_name defination [{first|after col_name}] ;#修改大的内容

RENAME TO new_name;

练习题:

1、新增字段:

Class 字段定义自行选择;放置于Name字段后;

mysql> alter table tb1 add class INT not null after name;

mysql> alter table tb1 modify class INT not null first; 调整Class字段为第一

2、将ID字段名称修改为TID;

mysql> alter table tb1 change ID TID INT UNSIGNED not null;

3、将Age字段放置

例如:mysql> create table tb1(name CHAR(10) not null,age TINYINT UNSIGNED);

mysql> desc tb1;  描述表tb1的结构

mysql> show table status\G  查看默认存储引擎是什么

DML: insert, update, delete

INSERT INTO tb_name [(col1,col2,…)] {VALUE|VALUES} ();

INSERT INTO tb_name SET col1=value,…;

INSERT INTO tb_name(col1,…) SELECT clause;

从另外的表检索数据添加到新表中

mysql> insert into tb2 set name=‘ling chon’,age=34;

把执行过程分成两段:CREATE LIKE,INSERT INTO SELECT

mysql> create table tb2like tb1;

mysql> insert into tb2()select ID Name Age Gender Course from tb1;

REPLACE INTO:替换操作;源数据存在就修改,不存在就添加

mysql> select last_insert_id();

查看最后一次插入数据的id号

mysql> insert into tb1 values (1,’Ling Huchong’,24,’Male’,’Huashan’);

修改:UPDATE

WHERE clause

LIMIT n     限制前n个用户修改

mysql> update tb1 set age=34;  会将所用的全部修改为34

mysql> update tb1 set age=34 where name=‘lin shen’;

删除:mysql> DELETE FROM tb_name where id=‘4’;

如果id号设置为自动增长,删除第四个后,新添加一个新的id会空过4的,新的id号为5

清空并重置表:清空后,id号从1开始

mysql> TRUNCATE TABLE tb_name

本文转自 宋鹏超 51CTO博客,原文链接:http://blog.51cto.com/qidian510/1291933,如需转载请自行联系原作者

mysql编译方式查询_源码编译mysql及其各种查询总结相关推荐

  1. *现在感觉librealsense和realsense-ros的安装挺简单的(普通X86平台)(现在发现都有两种安装方式,下载源码编译或者二进制安装)

    下面说的就是在普通X86平台上,不是在ARM平台,不在树莓派,TX2这些平台上. 之前潜意识里似乎还觉得会比较麻烦,实际我现在真正再看一下,回看一下,不是这样的.可能就像装双系统一样,实际并不麻烦,跟 ...

  2. Linux LNMP源码架构部署 | Nginx服务 | Mysql服务 | php服务 | 论坛源码编译安装 | 超详细

    | Nginx服务 | Mysql服务 | php服务 | 论坛源码编译安装 | ➤安装 Nginx 服务 ➤1.关闭防火墙和安全机制 ➤2.卸载自带的httpd服务 ➤3.安装依赖包 ➤4.创建运行 ...

  3. gcc编译器和mysql源码哪个难_源码编译mysql 5.5

    http://blog.csdn.net/aidenliu/article/details/6586610 源码编译mysql 5.5+ 安装过程全记录 分类: Mysql 2011-07-05 21 ...

  4. tensorflow源码编译教程_源码编译安装tensorflow 1.8

    参考官方指南 基本要求 官网测试过的源代码配置如下: image 也就是说,按照这个版本安装的话不应该再产生版本的问题了. 我的配置 ubuntu 16 python 2.7 nccl 2.3 gcc ...

  5. ssh源码编译安装mysql_总结源码编译安装mysql

    最近在学习源码编译安装LAMP.LNMP时,一直遇到一个难题,就是就是mysql无论怎么源码编译安装,到最后启动服务都提示"Starting MySQL.The server quit wi ...

  6. 源码安装mysql 5.1_Linux环境下源码编译安装MySQL5.1

    1.源码安装MySQL 5.1 GA 创建组和用户: [root@mysqldb2 ~]# groupadd mysql [root@mysqldb2 ~]# useradd -g mysql mys ...

  7. mysql 5.7 源码编译安装_mysql-5.7.*源码编译安装

    mysql-5.7.*源码编译安装 系统安装条件 官方文档说明:http://dev.mysql.com/doc/refman/5.7/en/source-installation.html 1> ...

  8. LNMP架构详解(2)——Mysql、PHP、Nginx源码编译过程

    前言 本文将介绍LNMP架构中Mysql.PHP.Nginx的源码编译过程:这时有人不仅会问:在我们使用的Linux系统中,可以从yum源中获得mysql.php,为什么要进行如此漫长复杂的过程进行编 ...

  9. mysql5.7.25源码安装_源码编译安装 mysql5.7.25

    以前最烦就是源码编译安装mysql5.7 ,原因无它 - 很麻烦,但最近因学习需要避免不了,主要介绍在centos7 下源码编译安装mysql5.7 . 安装 安装依赖包 yum install -y ...

  10. mysql5.6.39编译安装_源码编译安装MySQL-5.6/mysql-5.6.39------踩了无数坑,重装了十几次服务器才会的,不容易啊!...

    1.切换到src目录 cd /usr/local/src/ 2. 下载mysql免编译二进制包 免编译的mysql二进制包5.6源码包: wget http://mirrors.163.com/mys ...

最新文章

  1. NET CLR via c# 第4版笔记 第19章 可空值类型
  2. pythonfor循环100次_以写代学: python for循环 range函数 xrange函数
  3. 前端面试汇总(Bootstrap框架)
  4. 麻将游戏软件————附带核心算法
  5. YML格式(java 常用配置文件格式)
  6. QQ安装包可能被非法改动导致安装失败怎么办
  7. matlab求方差、均方值和功率
  8. 【技能】excel小技巧:利用宏制作工资条
  9. android mtklog,Mtklog结构及分析
  10. cf两边黑屏怎么解决win10_电脑黑屏怎么解决
  11. ubuntu安装anaconda3+cuda11.2+cuDNN+pytorch1.7
  12. icp许可证到期续期注意事项
  13. 不想失业?你得学会为自己工作
  14. c语言自动售货机实验报告,c语言自动售货机实验报告
  15. PostgreSQL 30天 培训视频(SQL基础,备份恢复,HA,服务端编程,大数据,内核,应用案例)
  16. 对企业数字化转型的思考
  17. UnusualDeepLearning-task1
  18. 企业安全生产的保护伞,工业设备智能维保平台
  19. java 遍历类属性_Java 遍历类中的属性
  20. LeetCode - 649. Dota2 参议院

热门文章

  1. Python读取 csv文件中文乱码处理
  2. iOS 多线程的使用
  3. UDP打洞原理及代码
  4. android MVC
  5. TOMCAT下载及配置
  6. Zabbix分布式监控系统使用总结
  7. sersync实现多台服务器实时同步文件
  8. vsftp的简单搭建
  9. Android Studio的单元测试
  10. Missing Push Notification Entitlement警告-----以及解决方法