1,DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。2,表和索引所占空间。当表被TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小,DELETE操作不会减少表或索引所占用的空间。drop语句将表所占用的空间全释放掉。3,Truncate table 表名 速度快,而且效率高,因为: truncate table 在功能上与不带 WHE
商品库存肯定是很有限的,如何控制库存不让出现超买是一个非常重要的问题。事务是控制库存超卖的必要不充分条件。举例:总库存:4个商品请求人:a、购买1个商品 b、购买2个商品 c、购买3个商品程序如下:beginTranse
try{
result = db- query('select amount from s_store where postID = 12345');
if(result- amount 0){
//quantity为请求减掉的库存数量
db- query('update s_store set amount = amount - qua
tags字段是逗号隔开tag id。查询一select
i.id,
i.title,
i.tags,
(select
GROUP_CONCAT(tb_tag.title SEPARATOR ',')
from tb_tag where id in (i.tags)
) as tags_title
from tb_item as i;
结果:查询二select
i.id,
i.title,
i.tags,
(select
GROUP_CONCAT(tb_tag.title SEPARATOR ',')
fro
(一)建表规约1. 【强制】表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint( 1 表示是, 0 表示否)。说明: 任何字段如果为非负数,必须是 unsigned。注意: POJO 类中的任何布尔类型的变量,都不要加 is 前缀,所以,需要在 resultMap 设置从 is_xxx 到 Xxx 的映射关系。数据库表示是与否的值,使用 tinyint 类型,坚持 is_xxx 的命名方式是为了明确其取值含义与取值范围。正例: 表达逻辑删除的字段名 is_deleted, 1 表示删除, 0 表示未删除。2. 【强制】表名、字段名必须使用小写
MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思。之前 MySQL 的 utf8 只支持最长三个字节的 UTF-8字符,也就是 Unicode 中的基本多文本平面。低版本的MySQL支持的utf8编码,最大字符长度为 3 字节,如果遇到 4 字节的字符就会出现错误了。三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xFFFF,也就是 Unicode 中的基本多文平面(BMP)。任何不在基本多文平面的 Unicode字符,都无法使用MySQL原有的 utf8 字符集存储。比如 Emoji 表情。utf8_unicode_ci比较准
1.切记不要用字符串存储日期我记得我在大学的时候就这样干过,而且现在很多对数据库不太了解的新手也会这样干,可见,这种存储日期的方式的优点还是有的,就是简单直白,容易上手。但是,这是不正确的做法,主要会有下面两个问题:i. 字符串占用的空间更大!ii. 字符串存储的日期比较效率比较低(逐个字符进行比对),无法用日期相关的 API 进行计算和比较。2.Datetime 和 Timestamp 之间抉择Datetime 和 Timestamp 是 MySQL 提供的两种比较相似的保存时间的数据类型。他们两者究竟该如何选择呢?通常我们都会首选 Timestamp。 下面说一下为什么这样做!2.1 Da
本方法不易维护,建议取出数据,在程序中递归,例如 https://javascript.net.cn/article?id=654代码如下:delimiter /
DROP FUNCTION IF EXISTS `getChild` /
CREATE FUNCTION `getChild`(rootId INT)
RETURNS VARCHAR(1000)
BEGIN
DECLARE ptemp varchar(1000);
DECLARE ctemp varchar(1000);
SET ptemp = '#';
SET ctemp =ca
1, 指定了AUTO_INCREMENT的列必须要建索引,不然会报错,索引可以为主键索引,当然也可以为非主键索引。(不一定要做主键)2, 指定了auto_increment的列,在插入时:如果把一个NULL插入到一个AUTO_INCREMENT数据列里去,MySQL将自动生成下一个序列编号。编号从1开始,并1为基数递增。3,当插入记录时,没有为AUTO_INCREMENT明确指定值,则等同插入NULL值。4,如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值开始递增。5,对于MyISAM表,如果用UPDATE命令更新自增列,如果列值与已有的值重复,则会出错。如果
一般不要使用保留关键字。如果使用了保留关键字,将关键字前后加" ` " 可以解决问题。
MySQL允许部分关键字用做未引起来的识别符,因为许多人以前曾使用过它们。下面列出了一些例子:
ACTION,BIT,DATE,ENUM,NO,TEXT,TIME,TIMESTAMP
MySQL保留关键字如下:
ADD
ALL
ALTER
ANALYZE
AND
AS
ASC
ASENSITIVE
BEFORE
BETWEEN
BIGINT
BINARY
BLOB
有一个表有十万条数据,SELECT COUNT(*) FROM t_tablename; 时间长达10秒以上。
解决办法,把 Primary Key 加上 Unique 约束了,速度变成30毫秒了,解决了。
不太清楚原因,先记着。
参考:https://blog.csdn.net/landstream/article/details/79673176
INSERT INTO tp_article(
name,
user_id,
category_id,
thumbnail,
content,
description,
create_time,
tags
)
SELECT
title,
FLOOR(2 + (RAND() * 10)),
category,
thumbnail,
content,
description,
UNIX_TIMESTAMP(create_time) + ce
1、导出所有库系统命令行mysqldump -uusername -ppassword --all-databases all.sql
2、导入所有库mysql 命令行mysql source all.sql;
3、导出某些库系统命令行mysqldump -uusername -ppassword --databases db1 db2 db1db2.sql
4、导入某些库mysql命令行mysql source db1db2.sql;
5、导入某个库系统命令行mysql -uusername -ppassword db1 db1.sql;
或mysql命令行mysql
索引的选择性是指索引列中不同值的数目和表的记录数的比值。假如表里面有1000条数据,表索引列有980个不同的值,这时候索引的选择性就是980/1000=0.98 。索引的选择性越接近1,这个索引的效率很高。
e.g. 性别可以认为是3种,男,女,其他。如果创建索引,查询语句 性别=‘男'的数据,索引的选择性就是3/1000=0.003。索引的选择性值很低,对查询提升不大,所以性别建索引意义不大
创建表
CREATE TABLE `kfinfo` (
`Name` varchar(100) DEFAULT NULL,
`CardNo` varchar(50) DEFAULT NULL,
`Descriot` varchar(150) DEFAULT NULL,
`CtfTp` varchar(50) DEFAULT NULL,
`CtfId` varchar(50) DEFAULT NULL,
`Gender` varchar(50) DEFAULT NULL,
`Birthday` varchar(50) DE
MYSQL导入数据出现The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
查看 secure-file-priv 当前的值是什么
show variables like '%secure%';
那么我们就需要改配置文件my.ini
secure-file-priv=''
重启MySQL
用单数形式更佳,理由如下:
1、概念直观。
你有一个袋子,里面有好多个苹果,你会说这是个苹果袋。但无论里面有0,1,百万个苹果,它依然是个袋子。表也是如此,表明需要描述清楚,表里面包含的对象,而非有多少个数据。
2、便利性
单数形式更简单。有一些单词,它的复数形式可能是非常规的,或者就没有复数形式,但是单数不一样,单数形式则没那么多讲究。有些单词的复数,可能会想到你头大,可能得好好google才出来
3、优雅
特别是一些master-detail形式的资源名称,统一用单数,读起来更方便,对齐更整齐,从顺序上更有逻辑性。
对比下
单数:
Order
OrderDeta
在MySQL数据库中,mysql-bin.000001、mysql- bin.000002等文件是数据库的操作日志,例如UPDATE一个表,或者DELETE一些数据,即使该语句没有匹配的数据,这个命令也会存储到日志文件中,还包括每个语句执行的时间,也会记录进去的。这样做主要有以下两个目的:1:数据恢复如果你的数据库出问题了,而你之前有过备份,那么可以看日志文件,找出是哪个命令导致你的数据库出问题了,想办法挽回损失。2:主从服务器之间同步数据主服务器上所有的操作都在记录日志中,从服务器可以根据该日志来进行,以确保两个同步。处理方法分两种情况:1:只有一个mysql服务器,那么可以简单的注释掉这个
执行命令:service mysql status
提示:ERROR! MySQL is running but PID file could not be found
搜索了一下,有人说可能是硬盘满了,清理下垃圾文件。
这才恍然明白,刚刚用vi查看日志文件提示那个错误的原因。
在根目录/下执行命令:df -h
输出如下:
[root@localhost /]# df -h
Filesystem Size Used Avail Use% Mounted on
**/dev/mapper/VolGr
1. 关掉mysql服务,打开系统设置最后的mysql,然后将mysql先关掉2. 生成一个文件命名mysql-init,文件中放入:一句话,这句话不同版本不一样,如下:(括号里面不包含)alter user ‘root’@‘localhost’ identified by ‘新密码’;(MySQL 5.7.6 and later)set password for ‘root’@‘localhost’=password(‘新密码’);(MySQL 5.7.5 and earlier)3. cd /usr/local/mysql/bin/sudo sumysqld_safe —init-file
1.删除所有的目录,只保留datasharebin2.删除BIN下面除以下三个文件之外的所有文件:libmysql.dll(MYSQL5中的文件,在MYSQL5.5中不存在)mysqladmin.exemysqld.exe3.如果要用客户端,请保留mysql.exe4.删除Share目录下除以下目录外的所有目录charsetsenglish5.删除Data目录下的除mysql之外的所有文件和目录1.准备工作下载mysql的最新免安装版本mysql-noinstall-5.1.53-win32.zip,解压缩到相关目录,如:d:\ mysql-noinstall-5.1.53-win32