数据库操作

建库语句

  1. CREATE DATABASE kylin DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
  2. #创建UTF-8库
  3. grant all privileges on kylin.* to 'root'@'localhost';
  4. # 格式:”用户名”@”登录IP或域名” %表示没有限制
  5. flush privileges;
  6. #刷新权限
  1. #删除权限
  2. REVOKE Delete ON `your database`.* FROM `user`@`host`;
  1. #查看用户权限
  2. grant select,create,drop,update,alter on *.* to 'root'@'localhost' identified by 'yangxin0917' with grant option;
  3. show grants for 'root'@'localhost';

查询语句

1、查询指定字段

语法格式:

  1. SELECT <字段名>,... FROM <表名>;

在语句中可以指定多个字段,结果会根据指定的字段进行显示。

例如:在users用户表中查询用户id、用户名、昵称、性别信息:

  1. SELECT` `user_id,user_name,nick_name,sex ``FROM` `users;

2、查询全部字段

查看表中的全部字段可以使用星号”*”表示,例如,以下语句查询users用户表中的所有数据:

  1. SELECT` `* ``FROM` `users;

“代表所有字段,数据库在解析该语句时,会使用表中的字段名进行扩展,根据实际情况将”“换成user_iduser_namenick_namesexmobileemail等表的字段。

3、设定别名

使用AS关键字可以为列设定别名。

  1. SELECT user_id AS id`,`user_name AS `用户名称,`nick_name AS `昵称,`sex AS `性别 `FROM users`;

4、常数的查询

SELECT语句中不仅可以书写列名,而且还可以书写常数,

如下:

  1. SELECT` `100;``SELECT` `'用户'``;

5、表达式的查询

  1. SELECT` `98%100;

6、去重

SELECT语句中可以使用DISTINCT关键字去除查询结果中的重复记录,例如,去除user_name重复的数据:

  1. SELECT` `DISTINCT` `user_name ``FROM` `users;

注意: DISTINCT对NULL是不进行过滤的,即返回的结果中是包含NULL值的;

DISTINCT应用到多列的时候,应用范围是其后面跟的所有字段,而且DISTINCT只能放到所有字段的前面,也就是第一个列名之前。

  1. SELECT` `DISTINCT` `user_name,nick_name ``FROM` `users;

7、条件查询

SELECT语句通过WHERE子句来查询符合指定条件的记录,WHERE子句要紧跟在FROM子句之后。

  1. SELECT` `<字段名>,... ``FROM` `<表名> ``WHERE` `<条件表达式>;

7.1 单条件查询

查询性别为男性的用户:

  1. SELECT` `* ``FROM` `users ``WHERE` `sex=``'男'``;

查询年龄小于等于24的用户:

  1. SELECT` `* ``FROM` `users ``WHERE` `age<=24;

查询用户id不是3的用户:

  1. SELECT` `* ``FROM` `users ``WHERE` `NOT` `user_id=3;

在第3个例子中使用了NOT运算符,在条件前加NOT就代表否定这个条件,查找这个条件以外的记录。

7.2 多条件查询

查询年龄小于等于24或者性别为男性的用户:

  1. SELECT` `* ``FROM` `users ``WHERE` `age<=24 ``OR` `sex=``'男'``;

查询年龄小于等于24并且性别为男性的用户:

  1. SELECT` `* ``FROM` `users ``WHERE` `age<=24 ``AND` `sex=``'男'``;

上面使用了多条件查询,条件能同时成立AND运算符,条件只能成立一个用OR运算符。

7.3 指定范围查询

查询用户id在(2,3,7,8)范围内的用户:

  1. SELECT` `* ``FROM` `users ``WHERE` `user_id ``IN` `(2,3,7,8);

IN在WHERE子句中规定多个值,IN后跟圆括号,括弧内可以有一个或多个值,值之间由逗点分开,值可以是数字或者字符。

查询用户id在10-15之间的用户:

  1. SELECT` `* ``FROM` `users ``WHERE` `user_id ``BETWEEN` `10 ``AND` `15;

BETWEEN ... AND指定介于两个值之间的数据范围,这些值可以是数值、文本或者日期。

7.4 模糊查询

LIKE关键字用于SQL的模糊查询,用于对搜索字符串进行模式匹配。

语法格式:

字段名LIKE pattern

匹配模式:

  • %:百分号匹配零个、一个或多个字符
  • -:下划线符号匹配单个字符 | 模式 | 含义 | | :—- | :—- | | LIKE ‘a%’ | 匹配以A开始的字符串,如abc、ab | | LIKE ‘%y’ | 匹配以y结尾的字符串,如aay、xy | | LIKE ‘%mn% | 匹配包含mn的字符串,如amnb、lmn | | LIKE ‘a_’ | 匹配以a开始,后面只有一个字符的数据,如ay、ab | | LIKE ‘_y’ | 匹配以y结尾,前面只有一个字符的数据,如ay,xy |

例如:

查找用户昵称包含tigeriaf的数据:

  1. SELECT` `* ``FROM` `users ``WHERE` `nick_name ``LIKE` `'%tigeriaf%'``;
  1. [abc]:表示字符abc
  2. [!abc]:表示非abc
  3. 模糊查询例子:
  4. select * from user where name like _[AB]%’;
  5. 查找name第二个字符为A或者B的用户信息。

7.5 优化mysql source 速度,innodb_flush_log_at_trx_commit是一个全局动态变量.因此,我可以使用SET GLOBAL命令更改它,它似乎正在工作.

  1. mysql> SET GLOBAL innodb_flush_log_at_trx_commit=0;
  2. Query OK, 0 rows affected
  3. mysql> SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit';
  4. +--------------------------------+-------+
  5. | Variable_name | Value |
  6. +--------------------------------+-------+
  7. | innodb_flush_log_at_trx_commit | 0 |
  8. +--------------------------------+-------+
  9. 1 row in set