mysql操作是不区分大小写的。

Mysql安装后若出现问题

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)

解决方式:

touch /var/run/mysqld/mysqld.sock

ls -lart /var/run/mysqld/

chown -R mysql /var/run/mysqld

ls -lart /var/run/mysqld/

mysql restart

/etc/init.d/mysql restart

基础操作

1 添加表字段

1
2
3
alter table table1 add transactor varchar(10) not Null;

alter table table1 add id int unsigned not Null auto_increment primary key

2 如果要删除某一字段

1
ALTER TABLE mytable DROP 字段名;

3 修改数据表字段的默认值:

修改字段默认值:role_id默认值设置为:1

1
mysql> alter table users_info alter column role_id set default 1;

修改字段默认值语法:

alter table 表名 alter column 字段名 drop default; (若本身存在默认值,则先删除)

alter table 表名 alter column 字段名 set default 默认值;(若本身不存在则可以直接设定)

预处理

数据库操作, 关于stmt, prepare

JOIN

使用Join, Inner join取得两表间类似的数据,链接

命令

432

mysql隐式转换

mysql隐式转换,会造成SQL慢查询,因为SQL转化后,即使使用索引查询,SQL也不会认为其是索引。

也就是说,若字段为字符串数字,则需要使用字符串类型作为where查询条件去查询数据,若使用整型数据,则会发生隐式转换,这相当于在字段前加上了to_int(xxx),类似于:where to_int(xxx) = xxx,在字段前加函数,其将无法使用索引,这是条准则。

记一次隐式转换引起的sql慢查询

日期索引

Mysql 索引问题-日期索引使用

1
在查询数据条数约占总条数五分之一以下时能够使用到索引,但超过五分之一时,则使用全表扫描了。

查询缓存

MySQL查询缓存打开、设置、参数查询、性能变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
mysql> SHOW VARIABLES LIKE '%query_cache%';
+------------------------------+---------+
| Variable_name | Value |
+------------------------------+---------+
| have_query_cache | YES |
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 1048576 |
| query_cache_type | OFF |
| query_cache_wlock_invalidate | OFF |
+------------------------------+---------+

mysql> show global status like 'QCache%';
+-------------------------+---------+
| Variable_name | Value |
+-------------------------+---------+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 1031832 |
| Qcache_hits | 0 |
| Qcache_inserts | 0 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 106 |
| Qcache_queries_in_cache | 0 |
| Qcache_total_blocks | 1 |
+-------------------------+---------+

mysql调试

慢查询可以将mysql执行慢的语句记录下来。

linux下开启mysql慢查询,分析查询语句

http://www.cnblogs.com/luyucheng/p/6265594.html

慢查询使用pt-query-digest进行分析:

安装过程:

1
2
3
4
5
[root@localhost ~]# wget percona.com/get/pt-query-digest

[root@localhost ~]# chmod u+x pt-query-digest

[root@localhost ~]# mv /root/pt-query-digest /usr/bin/

开启慢查询后,会有慢查询的日志,对日志使用工具:

1
pt-query-digest --explain h=127.0.0.1,u=root,p=123 mysql_slow.log > pt.ref

开启实时查询,能够得到每一次SQL语句的完整执行语句。

MySQL查看实时执行的SQL语句

mysql插入CSV文件

1
LOAD DATA LOCAL INFILE './dbtestdata.csv' INTO TABLE production_recorder.6 CHARACTER SET UTF8 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';

GORM使用

查找最大值

查询

时间戳跟踪

Gorm里面有个结构体:

1
2
3
4
5
6
7
// gorm.Model definition
type Model struct {
ID uint `gorm:"primary_key"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time
}

这四个参数是Gorm固定的参数,例如,如果结构体中有“ID”成员,那么建表时它就是表中的主键。

CreatedAt:也就是插入值时默认添加的时间戳;

UpdatedAt:更新时添加的时间戳;

DeletedAt:被删除时添加的时间戳。(有一个软删除的概念)

GORM默认是使用蛇形命名,也就是CreatedAt成员将被命名为“created_at”。

select * from production_recorder.6 WHERE errcode like “86:54:37%” LIMIT 1000000,10;

子查询

https://stackoverflow.com/questions/46807891/using-a-subquery-in-from-in-gorm?rq=1

count自加1

子查询

从手册上摘出来的子查询使用方法:

1
2
db.Where("amount > ?", DB.Table("orders").Select("AVG(amount)").Where("state = ?", "paid").QueryExpr()).Find(&orders)
// SELECT * FROM "orders" WHERE "orders"."deleted_at" IS NULL AND (amount > (SELECT AVG(amount) FROM "orders" WHERE (state = 'paid')));

打印Gorm执行语句(包含时间)

将执行的语句打印出来。

1
2
// Debug a single operation, show detailed log for this operation
db.Debug().Where("name = ?", "jinzhu").First(&User{})

gorm拼接SQL语句

1
2
3
4
5
6
7
8
9
10
dt = dt.Table(models.TableRecords)

scope := dt.NewScope(dt.Value)
scope.InstanceSet("skip_bindvar", true)

scope.Raw(fmt.Sprintf("explain SELECT %v FROM %v %v", "count(*)",
scope.QuotedTableName(),
scope.CombinedConditionSql()))

dbs.DbRecords.Raw(scope.SQL, scope.SQLVars...).Scan(&test)

Gorm的官方文档其实已经比较详细了,想跟深入的了解,可以直接去看官方文档:

http://gorm.io/docs/conventions.html#Timestamp-Tracking

https://jasperxu.github.io/gorm-zh/