记录mysql相关内容


#mysql登录命令行
mysql -hhostname -uusername -ppassword -Pport -A

-D,--database=name    打开指定数据库
--delimiter=name      指定分隔符
-h,--host=name        服务器名称
-p,--password[=name]  密码
-P,--port=#           端口号
--prompt=name         设置提示符
-u,--user=name        用户名
-V,--version          输出版本信息并且退出
注意:使用mysql -hhostname -uusername -ppassword -Pport的方式进入数据,连接成功,然后运行了use dbname命令,出现了下面一段话:

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

出现问题的原因是: 我们进入mysql 时,没有使用-A参数; 当我们打开数据库,即use dbname时,要预读数据库信息,当使用-A参数时,就不预读数据库信息。
当数据库中表非常多,如果预读数据库信息,将非常慢,可能会卡住,如果数据库中表非常少,将不会出现问题。

正确的打开方式是: mysql -hhostname -uusername -ppassword -Pport -A的方式进入数据库。
  提供 数据库 ip port 数据库名 还有相应的表名 以及 sql逻辑

 

#清空表
delete from 表名;
truncate table 表名;

使用truncate table可以清空mysql表中所有内容;
效率上truncate比delete快;
truncate删除后不记录mysql日志,不可以恢复数据;
truncate相当于保留mysql表的结构,重新创建了这个表,所有的状态都相当于新表。

不带where参数的delete语句可以删除mysql表中所有内容;
delete的效果有点像将mysql表中所有记录一条一条删除到删完。

 

#删除行
DELETE  FROM table_name WHERE  dt=20190401;

 

#改名
ALTER TABLE name RENAME TO new_name
ALTER TABLE name ADD COLUMNS (col_spec[, col_spec ...])
ALTER TABLE name DROP [COLUMN] column_name
ALTER TABLE name CHANGE column_name new_name new_type
ALTER TABLE name REPLACE COLUMNS (col_spec[, col_spec ...])
alter table name modify column pv  decimal(15)  DEFAULT '0' COMMENT 'PV',

 

#增加一列排序
row_number() over (order by search_pv desc) as rank

 

#增加列
(一般情况会很快,但如果表中的数据量很大,添加命令输入后会卡很久……)
alter table table add column title varchar(40) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT '' COMMENT '资源名称';

 

 

 

#格式化输出
select * from mysqlTable limit 5 \G 

 

#数据类型

遇到过问题,很大的数据量,比如时间、曝光pv,用了int,使得数据溢出,这种情况,可以将数据定义为bigint,或者decimal(15)。