Mysql数据库基本操作(增删改查)及资源大全

Mysql基础入门操作及资源大全
一、数据库名词解释
1、命令行交互式命令:mysql
mysql 命令的选项:
  -u  USERNAME: 用户名;默认为root
  -h  HOST: 服务器主机; 默认为localhost
  -p  PASSWORD :用户的密码; 建议使用-p, 默认为空密码
 
2、mysql中一些的名词
数据库:database
表:table
索引:index
引擎:engines
列、字段:column
G:竖着显示
 
3、SQL 语句:(4大类)
DDL: Data Defination Language 数据定义语言,修改表结构
  CREATE(创建), DROP(删除), ALTER(修改表结构)
DML: Data Manipulation Language 数据操作语言,修改表里的数据
  INSERT, DELETE, UPDATE(更新数据)
DQL :Data Query Language 数据的查询语言
  SELECT 用法多,非常灵活
DCL :Data Control Language 数据控制语言,授权限
  GRANT, REVOKE(取消授权)
 
二、对数据库的操作
1、查看数据库:show databases;
查看某个数据库中的表:show tables [from database_name] 如果已经在这个库下,不用加from
数据库有information_schema 库,这个库是只读库,只有root特殊权限的用户登录才能看到,不能drop删除
数据库有#mysql50#.mozilla 类似的库的处理方法,因为mysql家目录下有个隐藏文件导致,不能删除,把这些隐藏文件移走就好了。
 
2、创建数据库:
CREATE DATABASE(数据库) [IF NOT EXISTS](如果不存在,创建)'DB_NAME'; 创建成功一个,会生成一个表数据库文件
CHARACTER SET 'character set name' 设置字符集,不推荐设置,不建议调
COLLATE 'collate name' 设置排序规则,不推荐设置
注意:数据库对象的命名规则
必须以字母开头
可包括数字和三个特殊字符(# _ $)
不要使用MySQL 的保留字
同一Schema(数据库) 下的对象不能同名
 
3、删除数据库
DROP DATABASE [IF EXISTS] 'DB_NAME'; 删除成功,会删除对应的表数据库文件
查看支持所有字符集:SHOW CHARACTER SET; 不需要改
查看支持所有排序规则:SHOW COLLATION; 不需要改
 
4、获取命令使用帮助:mysql>help create database;
例:create database testdb;  创建testdb数据库
drop database testdb;  删除testdb数据库
 
三、创建删除表
1、查看数据库中所有的表:show tables from base_name;
   查看表结构:desc tbl_name;
 
2、创建表,依照范式
① CREATE TABLE [IF NOT EXISTS] 'tbl_name' (col1 type1 修饰符, col2 type2 修饰符, ...)
字段信息:
• col type1 指定类型
• PRIMARY KEY(col1,...) ()复合主键
• INDEX(col1, ...) 索引
• UNIQUE KEY(col1, ...) 唯一键
表选项:
• ENGINE [=] engine_name (引擎设置,默认就好)
  SHOW ENGINES; 查看支持的engine 引擎类型
• ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT |COMPACT} 行的格式,默认就好
② create table students3 select * [id,name] from students; 也可以创建一个表,完全复制另一个表的结构[或自己选择的结构];复制的表没有约束,如主键
insert into students3 select * from students; 有students3这个表,完全复制另一个表的内容
获取创建表的帮助:mysql> HELP CREATE TABLE;
 
3、删除表: DROP TABLE [IF EXISTS] 'tbl_name';
 
4、例子:
例1:CREATE TABLE testdb.students (id int UNSIGNED NOT NULL PRIMARY KEY,name VARCHAR (20) NOT NULL,age tinyint UNSIGNED);
解释:创建testdb库中名为students表;表有3列:id、name、age;id:数据类型int为正、不为空、设为主键;name:数据类型VARCHAR (20)、不为空;age:数据类型tinyint UNSIGNED)
 
例2:create table teachers (id int unsigned not null,name varchar(20) not null,age tinyint unsigned,primary key(id,name));
解释:创建testdb库中名为teachers表;表的复合主键为id和name列;其他和例1一样
例3:create table students3 select *  from students;  创建students3复制students的内容
 
四、DDL语句:修改表结构,尽量不要改表结构,很少用
1、查看表结构:DESC [db_name.]tb_name;
 
2、修改表结构 alter
ALTER TABLE 'tbl_name'
  字段:
    添加字段:add
      ADD col1 data_type [FIRST加到第一段的后边|AFTER col_name某一段的后边]
    删除字段:drop
    修改字段:change (字段名), modify (字段属性)
    索引:
      添加索引:add
      删除索引: drop
    表选项:
      修改:change
查看帮助:Help ALTER TABLE
 
3、例子:
Help ALTER TABLE 查看帮助
ALTER TABLE students3 RENAME s3; 改表名
ALTER TABLE s3 ADD phone varchar(11) AFTER name; 在s3表的name字段后加一个phone
ALTER TABLE s1 MODIFY phone int; 把phone的数据类型改为int
ALTER TABLE s1 CHANGE COLUMN phone mobile char(11); 把字段phone改名为字段mobile,数据类型为char(11)
ALTER TABLE s1 DROP COLUMN mobile; 删除字段mobile
ALTER TABLE students ADD gender ENUM('m','f') 增加gender字段,为枚举类型,只能是m或f
ALETR TABLE students CHANGE id sid int UNSIGNED NOT NULL PRIMARY KEY; 把修改id字段为sid,数据类型为正int、非空、主键
ALTER TABLE students ADD UNIQUE KEY(name); 在name字段加唯一键
ALTER TABLE students ADD INDEX(age); 在age字段加索引
DESC students; 查看这个表
SHOW INDEXES FROM students; 查看索引信息
ALTER TABLE students DROP age;
 
五、DML语句,修改表内容
1、查看
select * from tab_name [WHERE clause [LIMIT [m,]n];] 查看表中的所有内容,Limit m,n 跳过m行,要n行
select id,name,... from tab_name; 查出指定的表中内容
select count(*) from tab_name; 查看表中的记录数量,count()是自带的函数
 
2、修改表内容:
• INSERT 添加,插入,下有例子
  INSERT [INTO] tbl_name[(col_name,...)] VALUES(val1,...),(...),... 下例2,3
  分析:① tbl_name后不加(),默认按表结构的列;若加(),前后()内容要对应,顺序可以不按表结构,也可以设null值,但最好不要,
     ② 选项不是数字,都要加'',例:name='along'
insert into tab_name1 select * from tab_name2; 批量导数据,下例4
 
• UPDATE: 更新,修改表内容,下有例子
  UPDATE tbl_name SET col1=val1, col2=val2, ... [WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m,]n]; 下例5
 分析:若不加where,直接把所有列都修改了,Limit m,n 跳过m行,要n行
 
• DELETE:删除表内容,下有例子
  DELETE FROM tbl_name [WHERE clause] [ORDERBY 'col_name' [DESC]];可先排序再指定删除的行数,下例6
  分析:若不加where,直接把所有列都删除了
• TRUNCATE TABLE tbl_name; 清空表,快速清空,删除的时候,不计日志,谨慎使用
 
3、例子
① select * from students limit 3,2;
② insert into students(id,name,age) values(1,'along',18); 添加1行信息
③ insert into students values(2,'xiaoming',19),(3,'xiaohong',20); 添加2,3行信息
④ insert s2 select * from students; 复制students表的信息到s2表中
⑤ update s2 set name='xiaohei',age=30 where id=2; 修改id=2行的内容
⑥ delete from s2 where id=3; 删除s2表的id=3的行
 
六、DQL 语句,select
DQL :SELECT,用法很多
SELECT col1,col2,... FROM tbl_name [WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m,]n]; 查询表内容信息,上例1
1、字段表示法:
  *: 所有字段
  as :字段别名,若事先做好了表,想要把列的英语改成中文,不用修改,可以直接用别名,下例1
 
2、排序:order by col_name [desc]
  解释:by后指定列,desc反向排序,反向也可以-col_name
  注意:若其中有空值,正向排序空值在第一行,反向排序空值在最后一行,可以order by -col_name desc 即正向排序,有把空值放在最后一行,下例2
 
3、WHERE clause:where 后的选项
操作符:下例3
  >, <, >=, <=, ==, !=
  BETWEEN ... AND ...
  LIKE:模糊匹配,
    % :任意长度的任意字符
    _ :任意单个字符;
  RLIKE :正则表达式模式匹配
  IS NULL ,IS NOT NULL 寻找空值,不能用=,只能用is,所以最好不要有null,不好管理
  IN (val1,val2,…) 离散值显示
条件逻辑操作:
  and ,or ,not
例子:
① select id as 学生编号,name 姓名,age 年龄 from students; 设置别名
② select * from students order by -age desc; 按年龄的列正向排序,null在最后
③ select * from students where age>=20; 显示age>=20的
select * from students where age between 18 and 20; 显示18-20的
select * from students where name like 'xiao%'; 显示name是xiao开头的
select * from students where name rlike 'ng$'; 显示name是ng结尾的
select * from s2 where age is null; 显示null值的行
select * from students where age in (18,20,30); 显示age=18,20,30的行
 
七、DCL 数据控制语言,授权限
1、用户账号:'user'@'host'
  user: 用户名
  host: 允许用户通过哪些主机远程连接mysqld 服务
    IP 、网络地址、主机名、通配符(% 和_)
 
2、创建用户:
CREATE USER 'username'@'host' [IDENTIFIED BY 'password'];
例:create user 'along'@'192.168.30.%' identified by 'centos'; 添加along账号在192.168.30这个网段,可以输centos密码连接
注意:这里的账号和linux的用户不是一个东西
 
3、查看当前等登录的用户:
SELECT user();
 
4、查看已经添加的用户:
SELECT User,Host,Password FROM mysql.user;
 
5、删除用户:DROP USER 'username'@'host';
示例:drop user'along'@'192.168.30.107';
 
6、更改口令:多用第一种
① SET PASSWORD FOR 'user'@'host' = PASSWORD('password');
  分析:password();是调用了自带的函数
  例:set password for 'along'@'192.168.30.%'=password('along');
② UPDATE user SET password=PASSWORD('magedu') WHERE User='root';
  注意:相当于改了user的表,不推荐用,修改表的命令不会马上生效,需执行FLUSH PRIVILEGES 刷新一下生效
③ /usr/local/mysql/bin/mysqladmin -u root –poldpassword password 'newpassword'
注意:仅创建的用户,其所拥有的权限很小,所以我们要进行授权
 
(2)DCL,授权,回收权限
1、授权
GRANT priv_type,... ON [object_type] db_name.tb_name TO 'user'@'host' [IDENTIFIED BY 'password'] [WITHGRANT OPTION]; 授权并创建账号
① priv_type: ALL [PRIVILEGES] 授权类型:
   insert增,delete删 , update改,select查,all所有权限
② db_name.tb_name: 对哪个数据库的哪个表授权:
  *.*: 所有库的所表
  db_name.*: 指定库的所有表
  db_name.tb_name: 指定库的指定表
  db_name.routine_name :指定库的存储过程和函数
例:grant all on test.* to 'along2'@'%' identified by 'centos'; 创建along2用户,允许其在所有主机通过centos密码登录,对test库的所有表有所有权限
 
2、回收授权:
REVOKE priv_type, ... ON db_name.tb_name FROM 'user'@'host
例:revoke delete on test.* from 'along2'@'%'; 回收along2@'%'用户对test库的所有表的删除权限
 
注意:
① MariaDB 服务进程启动时会读取mysql 库中所有授权表至内存
② GRANT 或REVOKE 等执行权限操作会保存于系统表中,MariaDB 的服务进程通常会自动重读授权表,使之生效
③ 对于不能够或不能及时重读授权表的命令,可手动让MariaDB 的服务进程重读授权表:
mysql> FLUSH PRIVILEGES;
 
 
 
具体操作及讲解
一、连接数据库
(1)连接命令mysql
-u 用户 -h 主机地址/主机名 -p 密码 -P 端口 -s:静默 -S 套接字位置             
例:mysql -u user -p密码 #p后面不要空格
(2)常见错误如下:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2), it means that the MySQL server daemon (Unix) or service (Windows) is not running.
(3)退出连接:
QUIT 或者 Ctrl+D
 
、查看数据库,创建数据库,使用数据库查看数据库
(1)查看数据库
show databases;
默认(安装自带)数据库:
mysql - 用户权限相关数据 test - 用于用户测试数据 information_schema - MySQL本身架构相关数据
(2)创建数据库:
create database db1 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; #utf8编码 create database db1 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci; #gbk编码
(3)使用数据库:
use db1;
(4)显示当前使用的数据库中所有表:
SHOW TABLES;
 
三、用户管理
1、创建用户
create user '用户名'@'IP地址' identified by '密码';
create user zhangsan identified by 'zhangsan';
上面的命令创建了用户zhangsan,密码是zhangsan。在mysql.user表里可以查看到新增用户的信息:
如在创建用户设置简单密码时出现了如下错误:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
原因是因为密码设置的过于简单会报错,MySQL有密码设置的规范,具体是与validate_password_policy的值有关,下图表明该值规则如果想要查看MySQL完整的初始密码规则,登陆后执行以下命令
SHOW VARIABLES LIKE 'validate_password%';
密码的长度是由validate_password_length决定的,但是可以通过以下命令修改全局变量
set global validate_password_length=4;
validate_password_policy决定密码的验证策略,默认等级为MEDIUM(中等),可通过以下命令修改为LOW(低)
set global validate_password_policy=0;
修改完成后密码就可以设置的很简单,比如1234之类的。
2、删除用户
drop user '用户名'@'IP地址';
3、修改用户
rename user '用户名'@'IP地址'; to '新用户名'@'IP地址';
4、修改密码
set password for '用户名'@'IP地址' = Password('新密码');
注:用户权限相关数据保存在mysql数据库的user表中,所以也可以直接对其进行操作(不建议)
 
四、权限管理
1、权限了解
(1)mysql对于权限这块有以下限制
all privileges:除grant外的所有权限 select:仅查权限 select,insert:查和插入权限 ... usage:无访问权限 alter:使用alter table alter routine:使用alter procedure和drop procedure create:使用create table create routine:使用create procedure create temporary tables:使用create temporary tables create user:使用create user、drop user、rename user和revoke all privileges create view:使用create view delete:使用delete drop:使用drop table execute:使用call和存储过程 file:使用select into outfile 和 load data infile grant option:使用grant 和 revoke index:使用index insert:使用insert lock tables:使用lock table process:使用show full processlist select:使用select show databases:使用show databases show view:使用show view update:使用update reload:使用flush shutdown:使用mysqladmin shutdown(关闭MySQL) super:使用change master、kill、logs、purge、master和set global。还允许mysqladmin调试登陆 replication client:服务器位置的访问 replication slave:由复制从属使用
(2)对于数据库及内部其他权限如下
数据库名.*         数据库中的所有 数据库名.表        指定数据库中的某张表 数据库名.存储过程     指定数据库中的存储过程 *.*       所有数据库
(3)对于用户和IP的权限如下:
用户名@IP地址     用户只能在改IP下才能访问 用户名@192.168.1.% 用户只能在改IP段下才能访问(通配符%表示任意) 用户名@% 用户可以再任意IP下访问(默认IP地址为%)
2、权限操作
(1)查看权限:
show grants for '用户'@'IP地址'
(2)授权
grant 权限 on 数据库.表 to '用户'@'IP地址'
(3)取消授权
revoke 权限 on 数据库.表 from '用户名'@'IP地址'
(4)授权实例如下:
grant all privileges on db1.tb1 TO '用户名'@'IP' grant select on db1.* TO '用户名'@'IP' grant select,insert on *.* TO '用户名'@'IP' revoke select on db1.tb1 from '用户名'@'IP'
 
五、MySQL表操作
1、查看表
show tables; #查看数据库全部表 select * from 表名; # 查看表所有内容
2、创建表
create table 表名( 列名 类型 是否可以为空, 列名 类型 是否可以为空 )ENGINE=InnoDB DEFAULT CHARSET=utf8
来一个实例好详解
CREATE TABLE `tab1` ( `nid` int(11) NOT NULL auto_increment, `name` varchar(255) DEFAULT zhangyanlin, `email` varchar(255), PRIMARY KEY (`nid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
注:
(1)默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值
(2)自增,如果为某列设置自增列,插入数据时无需设置此列,默认将自增(表中只能有一个自增列),注意:
  ① 对于自增列,必须是索引(含主键)
  ② 对于自增可以设置步长和起始值
(3)主键,一种特殊的唯一索引,不允许有空值,如果主键使用单个列,则它的值必须唯一,如果是多列,则其组合必须唯一。
3、删除表
drop table 表名
4、清空表内容
delete from 表名 truncate table 表名
5、修改表
(1)添加列:   
alter table 表名 add 列名 类型
(2)删除列:   
alter table 表名 drop column 列名
(3)修改列:           
alter table 表名 modify column 列名 类型; -- 类型 alter table 表名 change 原列名 新列名 类型; -- 列名,类型
(4)添加主键:           
alter table 表名 add primary key(列名);
(5)删除主键:           
alter table 表名 drop primary key;
alter table 表名 modify 列名 int, drop primary key;
(6)添加外键: 
alter table 从表 add constraint 外键名称(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);
(7)删除外键: 
alter table 表名 drop foreign key 外键名称
(8)修改默认值:
ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
(9)删除默认值:
ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
对于上述这些操作是不是看起来很麻烦,很浪费时间,别慌!有专门的软件能提供这些功能,操作起来非常简单,这个软件名字叫Navicat Premium ,大家自行在网上下载,练练手,但是下面的即将讲到表内容操作还是建议自己写命令来进行
6、基本数据类型
MySQL的数据类型大致分为:数值、时间和字符串
(1)bit[(M)]
      二进制位(101001),m表示二进制位的长度(1-64),默认m=1
(2)tinyint[(m)] [unsigned] [zerofill]
      小整数,数据类型用于保存一些范围的整数数值范围:
      有符号:
        -128 ~ 127.
      无符号:
        0 ~ 255
      特别的: MySQL中无布尔值,使用tinyint(1)构造。
(3)int[(m)][unsigned][zerofill]
      整数,数据类型用于保存一些范围的整数数值范围:
        有符号:
          -2147483648 ~ 2147483647
        无符号:
          0 ~ 4294967295
      特别的:整数类型中的m仅用于显示,对存储范围无限制。例如: int(5),当插入数据2时,select 时数据显示为:00002
(4)bigint[(m)][unsigned][zerofill]
      大整数,数据类型用于保存一些范围的整数数值范围:
        有符号:
          -9223372036854775808 ~ 9223372036854775807
        无符号:
          0 ~ 18446744073709551615
(5)decimal[(m[,d])] [unsigned] [zerofill]
      准确的小数值,m是数字总个数(负号不算),d是小数点后个数。 m最大值为65,d最大值为30。
      特别的:对于精确数值计算时需要用此类型
          decaimal能够存储精确值的原因在于其内部按照字符串存储。
(6)FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
      单精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。
        无符号:
          -3.402823466E+38 to -1.175494351E-38,
          0
          1.175494351E-38 to 3.402823466E+38
        有符号:
          0
          1.175494351E-38 to 3.402823466E+38
      **** 数值越大,越不准确 ****
(7)DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
      双精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。
        无符号:
          -1.7976931348623157E+308 to -2.2250738585072014E-308
          0
          2.2250738585072014E-308 to 1.7976931348623157E+308
        有符号:
          0
          2.2250738585072014E-308 to 1.7976931348623157E+308
      **** 数值越大,越不准确 ****
(8)char (m)
      char数据类型用于表示固定长度的字符串,可以包含最多达255个字符。其中m代表字符串的长度。
      PS: 即使数据小于m长度,也会占用m长度
(9)varchar(m)
      varchars数据类型用于变长的字符串,可以包含最多达255个字符。其中m代表该数据类型所允许保存的字符串的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中。
      注:虽然varchar使用起来较为灵活,但是从整个系统的性能角度来说,char数据类型的处理速度更快,有时甚至可以超出varchar处理速度的50%。因此,用户在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡
(10)text
      text数据类型用于保存变长的大字符串,可以组多到65535 (2**16 − 1)个字符。
(11)mediumtext
      A TEXT column with a maximum length of 16,777,215 (2**24 − 1) characters.
(12)longtext
      A TEXT column with a maximum length of 4,294,967,295 or 4GB (2**32 − 1) characters.
(13)enum
      枚举类型,
      An ENUM column can have a maximum of 65,535 distinct elements. (The practical limit is less than 3000.)
      示例:
         CREATE TABLE shirts (             name VARCHAR(40),             size ENUM('x-small', 'small', 'medium', 'large', 'x-large')          );
         INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),('polo shirt','small');
(14)set
      集合类型
      A SET column can have a maximum of 64 distinct members.
      示例:
        CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));
        INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');
(15)DATE
      YYYY-MM-DD(1000-01-01/9999-12-31)
(16)TIME
      HH:MM:SS('-838:59:59'/'838:59:59')
(17)YEAR
      YYYY(1901/2155)
(18)DATETIME
      YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y)
(19)TIMESTAMP
      YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)
 
六、MySQL表内容操作
表内容操作无非就是增删改查,当然用的最多的还是查,而且查这一块东西最多,用起来最难,当然对于大神来说那就是so easy了,对于我这种小白还是非常难以灵活运用的,下面咱来一一操作一下
1、增
insert into 表 (列名,列名...) values (值,值,...) insert into 表 (列名,列名...) values (值,值,...),(值,值,值...) insert into 表 (列名,列名...) select (列名,列名...) from 表 例: insert into tab1(name,email) values('zhangyanlin','zhangyanlin8851@163.com')
2、删
delete from 表 # 删除表里全部数据 delete from 表 where id=1 and name='zhangyanlin' # 删除ID =1 和name='zhangyanlin' 那一行数据
3、改
update 表 set name = 'zhangyanlin' where id>1
4、查
select * from 表 select * from 表 where id > 1 select nid,name,gender as gg from 表 where id > 1
查这块的条件太多太多我给列举出来至于组合还得看大家的理解程度哈
(1)条件判断where
select * from 表 where id > 1 and name != 'aylin' and num = 12; select * from 表 where id between 5 and 16; select * from 表 where id in (11,22,33) select * from 表 where id not in (11,22,33) select * from 表 where id in (select nid from 表)
(2)通配符like
select * from 表 where name like 'zhang%' # zhang开头的所有(多个字符串) select * from 表 where name like 'zhang_' # zhang开头的所有(一个字符)
(3)限制limit
select * from 表 limit 5; - 前5行 select * from 表 limit 4,5; - 从第4行开始的5行 select * from 表 limit 5 offset 4 - 从第4行开始的5行
(4)排序asc,desc
select * from 表 order by 列 asc - 根据 “列” 从小到大排列 select * from 表 order by 列 desc - 根据 “列” 从大到小排列 select * from 表 order by 列1 desc,列2 asc - 根据 “列1” 从大到小排列,如果相同则按列2从小到大排序
(5)分组group by
select num from 表 group by num select num,nid from 表 group by num,nid select num,nid from 表 where nid > 10 group by num,nid order nid desc select num,nid,count(*),sum(score),max(score),min(score) from 表 group by num,nid select num from 表 group by num having max(id) > 10 特别的:group by 必须在where之后,order by之前
 
七、MySQL 资源大全
除了一份入门的教程,这还有了工具,很多工具也会为我们的日常提升提供很大帮助
1、分析工具
性能,结构和数据分析工具
  • Anemometer – 一个 SQL 慢查询监控器。
  • innodb-ruby – 一个对 InooDB 格式文件的解析器,用于 Ruby 语言。
  • innotop – 一个具备多种特性和可扩展性的 MySQL 版 ‘top’ 工具。
  • pstop – 一个针对 MySQL 的类 top 程序,用于收集,汇总以及展示来自 performance_schema 的信息。
  • mysql-statsd – 一个收集 MySQL 信息的 Python 守护进程,并通过 StatsD 发送到 Graphite。
2、备份
备份/存储/恢复 工具
  •  MyDumper – 逻辑的,并行的 MySQL 备份/转储工具。
  •  MySQLDumper – 基于 web 的开源备份工具-对于共享虚拟主机非常有用。
  •  mysqldump-secure – 将加密,压缩,日志,黑名单和 Nagios 监控一体化的 mysqldump 安全脚本。
  •  Percona Xtrabackup – 针对 MySQL 的一个开源热备份实用程序——在服务器的备份期间不会锁定你的数据库。
3、性能测试
对服务器进行压测的工具
  •  iibench-mysql -基于 Java 的 MySQL/Percona/MariaDB 索引进行插入性能测试工具。
  •  Sysbench – 一个模块化,跨平台以及多线程的性能测试工具。
4、聊天应用
集成进聊天室的脚本
  •  Hubot MySQL ChatOps
5、配置
MySQL 配置实例及指导
  •  mysql-compatibility-config – 使 MySQL 配置起来更像新的(或先前)的 MySQL 版本。
6、连接器
多种编程语言的 MySQL 连接器
  •  Connector/Python – 一个对于 Python 平台和开发的标准化数据库驱动程序。
  •  go-sql-driver – 一个 Go 语言的轻量级、极速的 MySQL 驱动程序。
  •  libAttachSQL – libAttachSQL 是 MySQL 服务器的一个轻量级,非阻塞的 C 语言 API。
  •  MariaDB Java Client – 针对 Java 应用且经过 LGPL 许可的 MariaDB 客户端库。
  •  MySQL-Python – 一个 Python 语言的 MySQL 数据库连接器。
  •  PHP mysqlnd – 针对 MySQL 的 MySQL 本地驱动,弃用过时的 libmysql 基础驱动。
7、开发
支持 MySQL 相关开发的工具
  •  Flywaydb – 数据库迁移;任意情况下轻松可靠地演变你的数据库版本。
  •  Liquibase – 对你的数据库进行源代码控制。
  •  Propagator – 集中模式和数据部署在一个多维拓扑上。
8、GUI
前端和应用的 GUI
  •  Adminer – 一个 PHP 编写的数据库管理工具。
  •  HeidiSQL – Windows 下的 MySQL 图形化管理工具。
  •  MySQL Workbench – 提供给数据库管理员和开发人员进行数据库设计和建模的集成工具环境;SQL 开发;数据库管理。
  •  phpMyAdmin – 一个 PHP 写成的开源软件,意图对 web 上的 MySQL 进行管理。
  •  SequelPro – 一个 mac 下运行 MySQL 的数据库管理应用程序。
  •  mycli – 一个带自动补全和语法高亮的终端版 MySQL 客户端
9、HA
高可用解决方案
  •  Galera Cluster – 一个基于同步复制的多主机集群方案。
  •  MHA – 针对 MySQL 的优秀高可用管理器及工具
  •  MySQL Fabric – 一个用于管理 MySQL 服务器场(Server Farms)的可扩展框架。
  •  Percona Replication Manager – 针对 MySQL 的异步复制管理代理。支持以文件和 GTID 为基础的复制,使用 booth 实现的地理分布式集群。
10、代理
MySQL 代理
  •  MaxScale – 开源,以数据库为中心的代理。
  •  Mixer – Go 实现的一个 MySQL 代理,目的为 MySQL 分片提供一个简单的解决方案。
  •  MySQL Proxy – 一个处于你的客户端和 MySQL 服务端之间的简单程序,它可以检测、分析或者改变它们的通信。
  •  ProxySQL – 高性能的 MySQL 代理。
11、复制
复制相关的软件
  •  orchestrator – 对 MySQL 复制拓扑管理并可视化的工具。
  •  Tungsten Replicator – MySQL 的一个高性能、开源、数据复制引擎。
12、模式
附加模式
  •  common_schema – MySQL DBA 的框架, 提供一个具有函数库、视图库和查询脚本的解释器。
  •  sys – 一个视图、函数和过程的集合,以帮助 MySQL 管理人员更加深入理解 MySQL 数据库的使用。
13、服务器
MySQL server flavors
  •  MariaDB – MySQL server 的一个由社区开发的分支。
  •  MySQL Server & MySQL Cluster – Oracle 官方的 MySQL server 和 MySQL 集群分布。
  •  Percona Server – 一个加强版的 MySQL 替代品
  •  WebScaleSQL – WebScaleSQL,5.6 版本,基于 MySQL 5.6 社区版本。
14、分片
分片解决方案/框架
  •  vitess – 对于大规模的 web 服务,vitess 提供服务和工具以便于 MySQL 数据库的缩放。
  •  jetpants – 一个自动化套件,用于管理大规模分片集群,由 Tumblr 开发。
15、工具包
工具包,通用脚本
  •  go-mysql – 一个纯 go 的库,用于处理 MySQL 的网络协议和复制。
  •  MySQL Utilities – 一个命令行实用程序的集合,Python 语言编写,用于维护和管理单一或多层的 MySQL。
  •  Percona Toolkit – 一个先进的命令行工具集,用于执行对于 MySQL 服务器和系统过于困难或复杂的任务。
  •  openark kit – 一组实用的工具,解决日常的维护工作,包括一些复杂的或需徒手操作的,用 Python 语言编写。
  •  UnDROP – 一个用来恢复删除或损坏的 InnoDB 表中数据的工具。
 
 

原文地址:https://www.cnblogs.com/mike357/p/15049816.html