【计算机本科补全计划】Mysql 学习小计(4)

正文之前

昨天终于把我苦命的毕业设计审批表送出去了。结果暑假的生产实习开始对账,我这儿又开始忙活了,还要签字,我有时候都在想要不全班代签一遍算了。不然真的揪心啊!mmp,就学校这些东西破事多!!虽然合理,但是太忙活了!烦不胜烦,不管了,我还是安心学我的小习,偶尔写写文章寻寻乐子吧!今天写了一篇与众不同的文章(相对于我以往的文风,或者说我以往就没有这玩意?反正劳请看官老爷去看一眼?给个赞最棒?)

成甲--《好好学习·个人知识管理精进指南》 读书笔记

正文


MySQL 序列使用

Mysql教程里面的序列大概就是指能够自增的列吧,也就是说只要你添加了一个行记录,那么就算你没有给定这个行的相应列的值,它也会自动的给你添加相应的自增后的值进去。好比一个人员记录,没插入一个员工记录,员工编号就可以自动加1,而不需要你之前再去查看然后指定序号。想想我们新生入学的时候分配学号,如果还要一个个的去添加,增加了多少的工作量,而且如果还不能保证精确性,好比如果U201710655 之后紧接着输入一个U201710657 中间那么个人就没了。多尴尬? 所以自增列很有必要,这个时候也就是Mysql序列展现效果的时候了。

你可以在一开始的时候就指定某一列是自增序列,如下:

create table auto_raise(id int unsigned not null auto_increment,primary key(id),···
name varchar(30) not null,date date not null) ···
engine=innodb auto_increment=201410600 charset=utf8;

你看,我指定的就是id这个主键是自增的,所以下面我要对这个表格进行操作,是不需要对id这个列进行插入操作的, 系统自己会给我弄好,多省心?

另外,不知道你看到没有,我的id是从201410600开始增长的,怎么做到的呢?你去上看上面创建表格的时候是怎么做到的吧?聪明如你肯定一下子就看到了!

INSERT INTO auto_raise (id,name,date) VALUES ···
 (NULL,'housefly','2001-09-10'),(NULL,'millipede','2001-09-10');

在MySQL的客户端中你可以使用 SQL中的LAST_INSERT_ID( ) 函数来获取最后的插入表中的自增列的值。

这个估计是用来手动插入的吧?果然,亲测手动插入会自导致自增起点变化,也就是说你完全可以在创建了自增之后,先插入一个想要的起点,然后再继续进行自增达到指定自增起点的目的,与上面说到的创建table的时候的手段差不多。

看我之后再插入的时候,就会从我上次插入的地方开始了。


但是,如果我绕道屁股后面去插呢?会怎么样?让我来试试

果然,我大概知道自增的尿性了。就是逮住了最大的那个插,如果你指定那就不自增。美滋滋。有自增我指定个蛋啊!!

如果你删除了数据表中的多条记录,并希望对剩下数据的AUTO_INCREMENT列进行重新排列,那么你可以通过删除自增的列,然后重新添加来实现。 不过该操作要非常小心,如果在删除的同时又有新记录添加,有可能会出现数据混乱。操作如下所示:

我们可以看到,如果不删除原来的列,那么该表格已经记住了上次的自增点,所以你想找到原来的那个自增起点是找不到了。那么就删除现在的行列 然后继续自增咯~

alter table auto_raise drop id;···
alter table auto_rasie add id INT UNSIGNED NOT NULL ···
AUTO_INCREMENT FIRST,ADD PRIMARY KEY (id);

好像没找到很好的办法,让所有的id记录都从201410600开始。。之后还是得自己慢慢来改,麻烦,后面再说,现在不慌。

alter table auto_raise auto_increment=201410600;

MySQL 处理重复数据

你可以在MySQL数据表中设置指定的字段为 PRIMARY KEY(主键) 或者 UNIQUE(唯一) 索引来保证数据的唯一性。当插入重复数据的时候,会导致报错,当然如果我们可以设置为ignore,那么插入重复数据也不会报错,但是会形成无效插入,也就是说这次插入操作被忽略了。

INSERT IGNORE INTO auto_raise (id,name) VALUES(2017, 'Thomas');

还有一种是设置为 replace ,顾名思义,ignore是忽视本次插入,replace很明显是覆盖原本的重复的数据:

replace INTO auto_raise (id,name,date) VALUES(2017, 'Zhang','2018-09-11');

统计重复数据(下图根据name统计重复数据,group by语法)

select count(*) as repeations,name from auto_raise group by name ;

两种过滤方式:

mysql> select distinct name from auto_raise ;
mysql> select name from auto_raise group by name;

如果要删除重复的元素,那么直接把表通过group by 进行唯一性复制 ,然后删除原来的表,后把临时表改个名字即可!

MySQL 导出数据

MySQL中你可以使用SELECT...INTO OUTFILE语句来简单的导出数据到文本文件上。

select * from auto_raise into outfile '/Users/zhangzhaobo/Desktop/test.txt';

当然,不出意外,你会有这个问题:

ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

上网找了不少的办法,最后还是这个比较靠谱点:

#[/private/etc/my.cnf]
[mysqld]
secure-file-priv="Your Path"

当然,你可以先

show variables like '%secure%';

查看一波。一般会这样,结果的第三行那个NULL就代表了限制导出,所以你需要改变系统配置。
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| require_secure_transport | OFF |
| secure_auth | ON |
| secure_file_priv | NULL |
+--------------------------+-------+

照着上面的办法,直接怼就好了。如果你的/private/etc/下已经有了 my.cnf这个文件,那么直接找到这个参数,改一下就好, 没有的话,自己创建一个咯,内容如下:

我甚至好心的,可以让你直接复制:

[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1
secure-file-priv='/Users/zhangzhaobo/Desktop/'

记得把路径改了啊。不然你没我这个用户名,路径报错的。

弄好之后重启mysql服务器就OK了

执行完毕之后就这样咯~

SELECT ... INTO OUTFILE 语句有以下属性:

  • LOAD DATA INFILE是SELECT ... INTO OUTFILE的逆操作,SELECT句法。为了将一个数据库的数据写入一个文件,使用SELECT ... INTO OUTFILE,为了将文件读回数据库,使用LOAD DATA INFILE。

  • SELECT...INTO OUTFILE 'file_name'形式的SELECT可以把被选择的行写入一个文件中。该文件被创建到服务器主机上,因此您必须拥有FILE权限,才能使用此语法。

  • 输出不能是一个已存在的文件。防止文件数据被篡改。

  • 你需要有一个登陆服务器的账号来检索文件。否则 SELECT ... INTO OUTFILE 不会起任何作用。

  • 在UNIX中,该文件被创建后是可读的,权限由MySQL服务器所拥有。这意味着,虽然你就可以读取该文件,但可能无法将其删除。

导出SQL格式的数据,这个数据你可以直接用于复制后完全产生当下的表格:

其中的命令也是很好使用的,我甚至怀疑,把扩展名改成sql 就可以直接在另一个服务器上重新生成一个新的数据库表。

还有更狠的!

$ mysqldump -u root -p RUNOOB > database_dump.txt
password ******
$ mysqldump -u root -p --all-databases > database_dump.txt
password ******

将数据表及数据库拷贝至其他主机,不然你以为导出的数据是直接给你看的啊,当然是用于数据库之间的交流啦!!

$ mysql -u root -p database_name < dump.txt
password *****

你也可以使用以下命令将导出的数据直接导入到远程的服务器上,但请确保两台服务器是相通的,是可以相互访问的:

$ mysqldump -u root -p database_name \ | mysql -h other-host.com database_name

MySQL 导入数据

使用 LOAD DATA 导入数据(报错透心凉):

mysql> load data local infile '/Users/zhangzhaobo/Desktop/test1.txt' into table tableclone;
ERROR 1148 (42000): The used command is not allowed with this MySQL version

使用 mysqlimport 导入数据:

HustWolf:~ zhangzhaobo$ mysqlimport -u root -p --local test '/Users/zhangzhaobo/Desktop/test1.txt'
Enter password: 

记得你的数据库里面要有个跟你的txt文件同名的表,不然会报错。

运用如图:

正文之后

无言,终于怼玩了Mysql 可以去玩别的了。这些知识目前还没用得上,后面等开始做毕设了,估计我就是被Mysql玩死的名。先快活吧!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容