数据库主键设计  

我一般设计数据库都习惯设置一个自增的ID作为数据库主键。 看到一句话主键不要与业务逻辑有所关联,一直不理解,这边做个笔记。 这边主键主要指一个表一定要有个逻辑主键,具备唯一性,避免需要使用联合主键才能确定一条记录。 比如一个商品表,需要使用产品分类id,供应商id作为联合主键才能确定唯一一条记录,这个在业务重构,代码修改等时候,会是一个灾难。 主键的两个类型 逻辑主键(surrogate key):无意义的字段,即自增长字段,即identity。 业务主键(natrual key):比如订单号,

Posted:2020-03-30  By vilay

Mysql 查看数据库表大小  

Mysql 查看数据库表大小 select table_name,table_rows,data_length+index_length,concat(round((data_length+index_length)/1024/1024,2),'MB') data from tables where table_schema='数据库名';

Posted:2020-03-04  By vilay

Mysql 查看数据库读写次数  

在很多时候,我们需要知道数据库读写占比,去判断是否需要进行读写分离等操作,虽然大部分应用肯定是读占比很重。但是作出判断需要有数据去做支撑。 我们可以通过mysql语句去获取数据库读写的次数,进一步推断出数据库的dml语句的占比。 show global status where Variable_name in('com_select','com_insert','com_delete','com_update');

Posted:2019-12-05  By vilay

Mysql 修改字段的字符集  

Mysql 修改字段的字符集 ALTER TABLE answers MODIFY COLUMN `content` VARCHAR(255) CHARACTER SET utf8mb4 NOT NULL DEFAULT '';

Posted:2019-10-10  By vilay

Mysql 索引优化  

1.什么情况下使用索引 1.需要频繁查询的字段,经常作为where条件 2.需要经常group by 或者order by的字段 3.update,delete的条件列一般也需要 4.distinct 的字段 5.多表joinon条件以及查询条件也要 2.使用索引的细节问题 比如语句:select * from order_products group by product_id order by pay_time desc 几个细节问题 1.建联合索引比给product_id,pay_time

Posted:2019-08-09  By vilay

Mysql show processlist 进程删除  

登录mysql show processlist; 删除进程方法: kill 进程id; 快捷点的方法 select concat('KILL ',id,';') from information_schema.processlist where state= 'updating'; //根据状态查询

Posted:2019-07-23  By vilay

Redis 命令  

Redis主要有五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). 1.String(字符串) 设置指定的值 语法:set key value 示例: 127.0.0.1:6379> set name vilay OK 2.获取指定的key值 语法:get key 示例: 127.0.0.1:6379> get name "vilay" 3.给key值设置为value,并且返回ke

Posted:2019-07-16  By vilay

Mysql SELECT list is not in GROUP BY clause  

问题 Expression #7 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'bestshop.ya_promotion.mobile' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 临时解决方法

Posted:2019-07-14  By vilay

Mysql get_lock  

Mysql 锁机制有两个函数get_lock() 和release_lock() get_lock 语法 SELECT GET_LOCK(key, time) key,就是根据这个参数进行加锁的,另一个是等待时间(s),即获取锁失败后等待多久回滚事务 示例 连接A先GET_LOCK(“lock_name”, 5),因为lock_name这个名称在之前没有加锁所以不需要等待,直接返回1,加锁成功。 然后连接B再GET_LOCK(“lock_name”

Posted:2019-06-26  By vilay

Mysql 性能调优 explain extended  

Mysql 中可以通过命令explain查看查询语句的运行效果,查询效率等问题。 另外,explain还有一个extended扩展可以查看到更多到细节。 结果使用show warnings命令查看。 示例 explain extended select * from users; show warnings

Posted:2019-05-12  By vilay

Mysql timestamp  

Mysql 时间字段timestamp用法 TIMESTAMP 保存时间格式为 YYYY-MM-DD HH:MM:SS 一共10多个字符.年的数字在:1970 –2037 之间。 用法: TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP #在创建新记录和修改现有记录的时候都对这个数据列更新 TIMESTAMP DEFAULT CURRENT_TIMESTAMP #在创建新记录的时候把这个字段设置为当前时间,

Posted:2019-04-26  By vilay

Centos Mysql 忘记root密码  

1. 停止服务 service mysqld stop 2. 修改配置文件 vi /etc/my.cnf,在mysqld段增加 skip-grant-tables 保存,重启之后,就可以不用密码登录了。 3.密码设置为空 先设置密码为空 use mysql; update user set authentication_string='' where user='root'; 4. 重新修改配置文件 skip-grant-tables注释 5. 重启mysql,登录数据库修改密码 前面已经把密码

Posted:2019-04-08  By vilay

Mysql 创建自动更新时间字段  

SQL语句 alter table users add column updated_at timestamp not null default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

Posted:2019-03-09  By vilay

Mysql 使用timestamp添加记录自动更新时间  

使用Mysql的timestame记录数据库表记录的更新时间 alter table users add column updated_at timestamp not null default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

Posted:2018-12-23  By vilay

Redis 查看内存使用情况  

Redis缓存虽然很高效,但是内存不是无限的,我们不能一直往里面去插入数据,所以隔一段时间就必须查看下内存的使用情况 通过info命令来查看,通过客户端连接到Redis执行info命令,可以看到很多数据 只查看内存info memory 结果显示 # Memory used_memory:43798640 //数据占用了多少内存(字节) used_memory_human:41.77M //数据占用了多少内存 used_memory_rss:44482560 //redis占用了多少内存 use

Posted:2018-10-26  By vilay