specification: 规范, 规格, 产品规范, 产品规格, 技术规范, 产品说明书.
如: create_specification, 等等php
建立数据库时, 显式地指明, 字符集: create database if not exists db_name [ create_specification]
create_specification: 只包括: 字符集和 校验规则的指定: [default] character set [=] charset_name [default] collate [=] collation_namehtml
在mysql中, 不少建立命令 的 create_specification中, 都有不少 [缺省的] keys, 包括: [default,] 等号[=] 是最多见的 缺省项.
即:
create schema db_name character set utf8
mysql
synonym: 同义词: 建立数据库的另外一个 同义词是: create schemalinux
performance_schema , 关于性能检测监视的数据库;
information_schema, 关于数据的数据,叫元数据, 就是关于mysql中有哪些表, 哪些数据库, 哪些权限的数据, 基本上是 视图, 来自基本表, 没有与之相关的 表文件;
mysql , 这个是mysql系统的核心, 不少信息都放在mysql中, 包括: user表. db表等等;
test; 这个是建立的一个 测试数据库.sql
schema : 框架, (word中 的结构图, 模式, 流程图), 在mysql中, 表示 数据库的意思: 跟 database基本上是同样的.shell
mysql_query('set names utf8');
可是, 若是你是要在数据库自己上进行操做, 好比建立函数, 建立存储过程, 事件和触发器等, (前提固然是 你可以接触数据库服务器, 并且你还能在上面进程一系列操做), 那么,你最好仍是将 关于链接的 相关字符集 都设置成跟数据库的字符集同样的: 好比所有都设置成 utf8. 由于 在存储过程/function 中, 可能牵涉到 某些字符串的 链接/操做函数, 好比 concat 函数, 若是 connection / client/ results(注意是 results复数) 等字符集跟 数据库不一致的时候, 好比在 win系统中, 默认的就是 gbk字符集和 gbk_chinese_ci的collation, 这就跟数据库的utf8不一样, 就会报错: illegal operation: mixed different charset... 操做是: set character_set_connection/client/results = utf8; 数据库
若是你有机会/有能力 去 设置 mysql的字符集, 你最好在 项目一开始的时候, 就去把 全部的 字符集进行设置, 让他们都一致, 一般推荐 统一的 设置成 utf8.vim
fedora中, 有一个 yum/dnf包的管理/更新工具: /usr/libexec/packagekitd, 当 dnf在后台 更新 /makecache 的时候, 它会锁定新加入的 dnf命令请求. 能够将 /usr/libexec/packagekitd 服务包卸载, 就可以禁止软件的自动更新.segmentfault
dnf/yum的使用, 是独占的, 同时只能运行一个dnf进程. 因此若是在后台更新的时候, 你不能使用dnf去下载安装软件的.windows
gnome的辅助工具备两个: 一个是 tweak-tool, 另外一个工具是dconf-editor. 基本上 tweak-tool 微调工具没有多大用途, 主要仍是在 dconf-editor中peizhi.
==============
调用的脚本, 应该是linux的脚本 即: *.sh, 能够是linux中的自带命令, 也能够是linux脚本中调用其余存在于
本地机器上的其余程序, 好比php命令, mysql命令。
因为 crontab最可能是以 “每分钟” 为时间间隔的, 因此若是要实现, 一分钟之内, 每隔多少秒为单位的定时调用, 久须要本身写代码了: 好比:
#! bin/bash step=2 # 间隔的秒数, 不能大于60 for ((i=0; i<60; i+=step)); do $(php '/home/php/crontab/tolog.php') sleep $step done exit 0
而后, 建立crontab, 调用ct.sh每分钟执行一次, 这样实际上就能达到每2秒钟执行一次的要求了。
这样,就不用去管 服务器的配置问题了!!
基本上, 中文的Windows都是以gbk为系统编码的, 也就是说, win下的软件涉及中文编码字符集问题的时候, 都是以gbk为编码的。
无论是什么编码, 都是以字符为单位的
即:无论编码如何改变转换, 最终表现出来的 “字符的总的个数 老是不变的”。
使用场合: 凡是须要建立 "会话级" 的表, 即这个表不须要永久存在 , 而只是在 创建会话的时候, 才 "动态"地生成. 并且会话结束, 这个表就自动删除. 而后再次创建会话连接的时候, 这个表又从新动态生成;
因此, 在不一样的会话期间, 可使用 相同的 临时表名称, 相互之间不会影响;
临时表也能够建立在内存中, 只要你在最后的时候, create_table_specification中, 指明type=heap就能够了 好比: `create temporary table tmp1 select* from t1 type=heap;
使用临时表最须要注意的是, 临时表中的数据的刷新和清除. 要注意表中的数据的清理 和无效垃圾数据的影响.最好的预防方法 就是要 显式的先删除 drop, 而后再建立, 再插入数据等操做..
在一个会话期, 同一个链接内, 临时表能够连续使用, 因此再次使用前, 应该注意之前的数据清理问题.
尽可能避免临时表和 普通表的同名, 由于一旦临时表由于误操做等导致链接断开后, 你操做的就是普通表了. 因此这时候的删除等操做就很是危险, 从而对普通表中的数据产生危险!
很须要注意的一个问题是: 当使用一些 框架的时候, 因为链接是 permanent 持久链接的.因此, 使用临时表的时候, 若是你在多个链接间共享的时候, 临时表中的数据就会重复积累! 要注意这个问题!
create table mem_table(id int(10) not null ) type=heap ;
它的结构存在于磁盘上的 mem_table.frm中, 只是数据存在于内存中的..[临时表相关配置】 tmp_table_size:指定系统建立的内存临时表最大大小; http://dev..com/doc/refman/5.1/en/server-system-variables.html#sysvar_tmp_table_size max_heap_table_size: 指定用户建立的内存表的最大大小; http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_max_heap_table_size 注意:最终的系统建立的内存临时表大小是取上述两个配置值的最小值。 【 表的设计原则】 使用临时表通常都意味着性能比较低,特别是使用磁盘临时表,性能更慢,所以咱们在实际应用中应该尽可能避免临时表的使用。 若是实在没法避免,也应该尽可能避免使用磁盘临时表。 常见的方法有: 1)建立索引:在ORDER BY或者GROUP BY的列上建立索引,这样能够避免使用临时表; 2)分拆很长的列,能够避免使用磁盘临时表:通常状况下,TEXT、BLOB,大于512字节的字符串,基本上都是为了显示信息,而不会用于查询条件,所以表设计的时候,应该将这些列独立到另一张表。 www.2cto.com 【如何判断使用了临时表】 使用explain查看执行计划,Extra列看到Using temporary就意味着使用了临时表。
另外
因此 视图的使用, 就至关于普通表, 在不少重要应用上, 用户操做的, 和所看到的, 其实不少都是视图, 而不是基础表.仍是很重要很必要的.
1. 产生一个随机小写字母的函数: 首先要在全局// 设置 [mysqld] 中 定义 log-bin-trust-function-creators=1 1. 函数体: (产生随机大写字母的函数, ruc()就只是把 cs的默认值设置为 26个大写字母 ) create definer='root'@'localhost' function rlc() returns char(1) begin declare cs char(26) default 'abcdefghijklmnopqrstuvwxyz'; return substr(cs, floor(1+26*rand()), 1); end// -- 随机产生1个大写字母 create function ruc() returns char(1) begin declare cs char(26) default 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; return substr(cs, floor(1+26*rand()), 1); end// -- 生成随机英文名字,并插入到表中 drop procedure if exists sp_genRandEnName; delimiter // create definer='root'@'localhost' procedure sp_genRandEnName(in persons int unsigned) comment 'this is random test data generator' begin declare i int unsigned default 0; declare j int unsigned default 0; declare ename char(20) default ''; declare nl tinyint default 0; -- 英文名字的随机长度值 , 这个地方看句首的 decalre就要出错了: 会报错:ERROR1064(42000) while i<persons do -- 先要将各个变量清0 set ename=''; set j=0; -- 若是j不清零,则j 一开始就会很大 -- 生成随机名字 ### 这个地方要注意, 就是,mysql的注释双横线 set ename=concat(ename, ruc()); set nl=floor(3+16*rand()); -- 16考虑了j循环从0开始的状况, j的最终值就不用再减1 repeat ### 注意, while循环用do 和 end while 来作大括号, 而repeat 循环中 是没有 do的! set ename=concat(ename, rlc()); set j=j+1; until j>nl end repeat; -- 插入到数据表中 insert into `user`(id, name) values('', ename); set i=i+1; end while; end// delimiter ; ------------- 最后 实测可用的 , 经过测试后的 代码是: truncate user; drop procedure if exists sp_genRandEnName; delimiter // create definer='root'@'localhost' procedure sp_genRandEnName(in persons int unsigned) begin declare i int unsigned default 0; declare j int unsigned default 0; declare ename char(20) default ''; -- 这里规定 ename的最大长度, 好比为10 declare nl tinyint default 0; while i<persons do -- 先要将各个变量清0 set ename=''; set j=0; -- 若是j不清零,则j 一开始就会很大 set ename=concat(ename, ruc()); set nl=floor(3+16*rand()); -- nl表示的是 : name length: nl 那么这里要跟上面的ename的定义长度要保持一致。若是上面为10, 那么这里就应该是 3+6*rand()... repeat set ename=concat(ename, rlc()); set j=j+1; until j>nl end repeat; insert into `user`(id, name) values('', ename); set i=i+1; end while; end// delimiter ;
// 生成随机中文名字的 姓和名: http://blog.csdn.net/gjq246/article/details/72771939 -- 生成姓氏和名字的 辅助函数rxing(), rming(); CREATE DEFINER=`root`@`localhost` FUNCTION `rxing`() RETURNS char(1) CHARSET utf8 begin declare cs char(10) default '赵钱孙李周吴郑王冯陈诸卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮齐康伍余元卜顾孟平黄和穆萧尹姚邵堪汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞熊纪舒屈项祝董粱杜阮蓝闵席季麻强贾路娄危江童颜郭梅盛林刁钟徐邱骆高夏蔡田樊胡凌霍虞万支柯咎管卢莫经房裘干解应宗丁宣贲邓郁单杭洪包诸左石崔吉钮龚'; -- 经常使用的姓氏汉字, 共190个 return substr(cs, floor(1+190*rand()), 1); end CREATE DEFINER=`root`@`localhost` FUNCTION `rming`() RETURNS char(1) CHARSET utf8 begin declare cs varchar(500) default '明国华建文平志伟东海强晓生光林小民永杰军金健一忠洪江福祥中正振勇耀春大宁亮宇兴宝少剑云学仁涛瑞飞鹏安亚泽世汉达卫利胜敏群波成荣新峰刚家龙德庆斌辉良玉俊立浩天宏子松克清长嘉红山贤阳乐锋智青跃元武广思雄锦威启昌铭维义宗英凯鸿森超坚旭政传康继翔栋仲权奇礼楠炜友年震鑫雷兵万星骏伦绍麟雨行才希彦兆贵源有景升惠臣慧开章润高佳虎根远力进泉茂毅富博霖顺信凡豪树和恩向道川彬柏磊敬书鸣芳培全炳基冠晖京欣廷哲保秋君劲轩帆若连勋祖锡吉崇钧田石奕发洲彪钢运伯满庭申湘皓承梓雪孟其潮冰怀鲁裕翰征谦航士尧标洁城寿枫革纯风化逸腾岳银鹤琳显焕来心凤睿勤延凌昊西羽百捷定琦圣佩麒虹如靖日咏会久昕黎桂玮燕可越彤雁孝宪萌颖艺夏桐月瑜沛诚夫声冬奎扬双坤镇楚水铁喜之迪泰方同滨邦先聪朝善非恒晋汝丹为晨乃秀岩辰洋然厚灿卓杨钰兰怡灵淇美琪亦晶舒菁真涵爽雅爱依静棋宜男蔚芝菲露娜珊雯淑曼萍珠诗璇琴素梅玲蕾艳紫珍丽仪梦倩伊茜妍碧芬儿岚婷菊妮媛莲娟一'; -- 经常使用 的名字中的 名 汉字. 共400个 return substr(cs, floor(1+400*rand()), 1); end -- 生成随机2~3个汉字的中文名字的存储过程 CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_genRandChName`(in persons int unsigned) begin declare i int unsigned default 0; declare j int unsigned default 0; declare cname char(3) default ''; declare nl tinyint default 0; while i<persons do set cname=''; set j=0; set cname=concat(cname, rxing()); set nl=floor(1+2*rand()); repeat set cname=concat(cname, rming()); set j=j+1; until j>nl end repeat; insert into `user`(id, name) values('', cname); set i=i+1; end while; end
当在控制台,用update user set password=password('root') where user='root' and 'host'='localhost';
修改了用户, 好比root的配置文件后 , 必定 要用 flush privileges;
来 刷新受权, 这时新设置的密码 才能生效. 不然, 如不刷新权限,即便你设置了新密码, 再次登陆时,仍然会认为没有密码, 或是以前的密码, 这样的话, 就会报错! 这是实践 经历过的.
经过help 可知, 修改数据库的时候,语法格式是:
alter {database | schema } db_name
alter_specification
注意, 这里常见的通用方法是: 若是是create, 则是: create _key_ _name_ create_specification
若是是 alter的话,则是: alter _key_ _name_ alter_specification.
mysql> alter database test character set utf8; Query OK, 1 row affected (0.00 sec) mysql> show create database test; +----------+---------------------------------------------------------------+ | Database | Create Database | +----------+---------------------------------------------------------------+ | test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8 */ | +----------+---------------------------------------------------------------+ 1 row in set (0.00 sec) mysql>
1.rescure笔记本
如何强制修改foo简单密码
伪装忘记密码?
同时开启两个字符终端?
linux桌面版确实不如windows稳定, 但服务器就不是一个水平了
linux稳定说的是内核稳定, 不是说图形界面稳定, 应该极少出现像windows那样完全死机那样的问题, gui挂掉,貌似内核还能够正常运行?
linux的优点再也不桌面
linux系统和图形界面没有必然的联系
linux内核和图形界面是经过接口链接的, 不是内核的一部分。 而windows的图形界面是内核的一部分, 因此图形界面的稳定性不如windows。 可是同时也正因如此, windos内核的稳定性受到gui的影响不如linux稳定。
强行关机后, fedora就不能启动了, 根本缘由是: 分区表的逻辑错误? 使用PQ就是定时炸弹?
强行关机后 当check到根路径的时候, 就check到错误而没法继续下去了??
要查看linux的启动信息, 启动时一闪而过, 能够在 启动后, 经过命令dmesg来查看: dmesg: dump message.
如何把man和info的信息存储为文本文件? 如: man tcsh | col -b > tcsh.txt info tcsh -o tcsh.txt -s
linux如何强行退出x: 有时候, 由于程序错误, 使鼠标和键盘都没法响应和反应时, 能够强制退出图形界面,按ctrl+alt+backspace(不是shift)
1 use test; 2 select * from `user`; select round(rand()*1000) as '随机数'; 3 delimiter // 4 -- create definer='root'@'localhost' procedure gentd(in count int) 5 -- begin 6 -- select round(rand()*1000) as '随机数'; 7 /* mysql 不支持 # 注释? */ 8 drop procedure if exists foo// 9 create procedure foo() 10 begin 11 declare _err integer default 0; 12 declare continue handler for sqlexception set _err=1; 13 14 16 start transaction; -- 这是一条语句! start transaction 后面要加上 分号! 17 insert foo(id, name) values('', 'foo'); 18 insert foo(id, name) values('', 'bar'); 21 22 if _err=1 then 23 select 'ERROR! 回滚操做...'; 24 rollback; 25 else 26 commit; 27 end if; 28 29 select _err as 'status'; 30 31 end// 32 delimiter ; 33 34 call foo(); -- 这句话很重要@ 存储过程 就跟函数同样, 你光是 定义它, 建立它没用, 若是你不执行它, 他是不会自动 执行的! 因此要显式的 调用 去执行它!!
杂项: 1. commit和 comment的区别, 都是mm 只是后面的两个字母不一样, 一个是i, 一个是 en; 查看数据库中 有哪些函数和 存储过程, 适用的命令 不是 show functions, show procedures, 而是 show function status, 和 show procedure status
注意 , 函数和 procedure都不要 带 复数s!
调用函数的时候, 参数个数要 正确, 即便你不用 这个参数的值, 你也要输入null 来占位.
一个mysql语句, 能够是简单的 insert/select语句, 也能够是 begin...end 的复合语句, 复合语句中, 能够包含 变量声明, 和其余条件/选择/循环结构语句等.
1) function与procedure的区别:一个有返回值,一个没有,仅此而已。上述说法是错误的,function和procedure的用法有不少不一样,整体来讲procedure受到的限制较少,function的限制较多;并且procedure可使用out参数返回值,所以尽可能采用procedure