游标 叶叫做 光标;
只能使用在 mysql的 存储过程 或函数中!
游标的概念? 为什么要使用 游标?
什么叫 定时器, 就是事件 event! 是在 mysql 5.0以上的版本中, 才能使用支持!
所谓的定时器, 就是 事件, 就是 设置好, 每隔多长事件 就执行一次, 设定的事件.
定时器 要执行的事件 是 一个 存储过程.
定时器的 开启/关闭/查看:
开启事件开关?
- 定时器开关变量 是一个 全局变量global变量, 不是一个 session变量, 所以 设置时, 要用 set global来设置
MariaDB [test]> set session event_scheduler=On;
ERROR 1229 (HY000): Variable 'event_scheduler' is a GLOBAL variable and should be set with SET GLOBAL
MariaDB [test]>
- interval: inter- value , 表示的是 间隔值, 时间间隔值.
事件/时间任务,和 触发器的区别? 参考: http://www.ibloger.net/article/599.html
实际上, 都是 一样的, 都是 触发器, 只是 触发的理由, 触发原因不同:
event 触发是因为 时间到了, 设定的 定时器 scheduler 到了, 所以 要执行.
而 trigger是因为 设定的 " 特定事件" 发生了, 所以要 执行, 比如" 当设置 插入某个表的一条记录时" 触发执行某个动作!
- mysql中 可以设置 像 windows的 定时任务一样的 , scheduler定时器/事件任务 :
create event的 语法?
MariaDB [test]> help create event;
Name: 'CREATE EVENT'
Description:
Syntax:
CREATE
[DEFINER = { user | CURRENT_USER }]
EVENT
[IF NOT EXISTS]
event_name
ON SCHEDULE schedule -- event name 后面 只有三种子句, 一种是: 设置定时器on schedule, 另一种是 规定 on completion 的操作; 第三种是设置 要调用的 存储过程: do call ..
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'comment']
DO event_body;
schedule:
AT timestamp [+ INTERVAL interval] ... -- 定时器的写法: 要么用at timestamp 要么用 every...
| EVERY interval
[STARTS timestamp [+ INTERVAL interval] ...] -- starts 和 ends 后面 必须 用timestamp,常见的是 current_timestamp , 后面的时间间隔 如果要使用 时间间隔, 就必须用 + interval 关键字! 否则直接写间隔值 会报错!
[ENDS timestamp [+ INTERVAL interval] ...]
创建事件的例子:
MariaDB [test]> create event test_event
(((( on schedule every 1 day
starts current_timestamp + interval 1 day
ends current_timestamp + interval 30 day
这部分是schedule)))
on completion preserve disable
do call foo();
触发器和 事件: 参考: http://mamicode.com/info-detail-1841394.html http://www.ibloger.net/article/599.html
事件在特定时间发生的 schedule叫做, 应用: at...
注意两个单词的区别?
一个是contact: 联系, contact with sb. 和...联系
一个是: concat: 它对应的单词是: con'catenate con'catenate : 把...一系列事件联系起来...
即: 连接: concat: con -cat: cat 可以认为是猫 的单词,
为什么不允许定义/创建函数?
提示报错: your function has none of DETERMINISTIC, NO SQL OR READS SQL DATA. you might want to use the less safe log_bin_trust_fucntion_creators variable.
- 原因是: 开启了 bin_log安全设置.
- 可以查看: show variables like '%func%'; 结果显示, 这个变量为Off.
- 设置方法是: 开启这个变量为On 或者为 1:
set global log_bin_trust_function_creators=1
必须是 全局变量 而不是 session变量! - mysql语句 set variable_name=... 默认的是设置 会话 变量, 而上面的 bin_log-...是一个全局变量, 所以 必须显示的用 global 来设置!
- 注意 必须开启 上面的这个变量, 才允许你创建函数, 否则不行, 即使你 在create后面 声明了 definer='root'@'localhost'都还是不行的!
- 在win系统中, 安装wamp后, 在图标上启动mysql , 实际上, 就是执行 mysql安装目录bin下的命令mysql:
bin/mysql.exe
- 重要的 mysql命令, 就是 mysqladmin, mysql, mysqldump等几个命令, 其他都不是很实用.
- 创建数据库的时候, 通常只是对 字符类型的字段才声明 charset 和collate. 对char(), varchar()等类型, 通用的声明方法是: Host char(60) default '' not NULL collate utf_bin, .... 注意的是 默认值'' 跟 NULL是不一样的 , 而且'' 并不是 null. 要注意, 对字符字段默认的比较规则是不区分大小写的, 除非声明 按 binary方式进行比较, 或声明为
collate utf_bin.
使用命令: show collation;
utf8_general_ci | utf8 | 33 | Yes | Yes | 1 |
utf8_bin | utf8 | 83 | | Yes | 1 |
mysql> select 'a'='A';
+---------+
| 'a'='A' |
+---------+
| 1 |
+---------+
1 row in set (0.02 sec)
mysql> select binary 'a'='A';
+----------------+
| binary 'a'='A' |
+----------------+
| 0 |
+----------------+
1 row in set (0.03 sec)
mysql>
很重要的一点: 在创建 存储过程和函数的格式中, 记住他们的位置:
- create [placeholder1 ] function_sign [placeholder2] routine_body 所谓的 "关键字' 部分, 有3个, 一个是: create, 一个是 函数的签名, 一个是 函数体.
- 其中的 placeholder1, 的内容是 定义 创建者是谁: definer='root'@'localhost'
- 而 placeholder2 的内容是 声明过程或函数的 特质/特征: characteristic(s): 包括: comment="...." language sql security definer| invoker等等.
硬盘中出现 s.m.a.r.t. 故障提示, 要按F2才能 继续, 怎么办?
smart: 是指硬盘的 self-monitoring analysis and reporting technology: 是指硬盘的 自我监测 分析和报告技术
当硬盘出现 smart 报警时, 表示 硬盘即将要 损坏了...
这时, 可以在 bios中, 将smart 硬盘检测和自我分析报告 关闭, 但是, 要注意 这时的硬盘可能要坏了...注意保存数据
通常, 默认的 smart检测功能, 都是默认关闭的.
存储过程和函数的区别?
- 函数返回的是一个表 对象, 所以可以放在 select的后面, 而存储过程 可以 单独 实现.
- myisam 的读音 my'izeim, innodb的读音 in-no-db
- mysql的引擎默认支持的是innodb....整个支持的引擎包括: myisam, innodb, csv, achieve, 好像在4.1之前的默认引擎是myisam, 但是在5.0以后, 默认引擎就是innodb了。
- myisam不支持事务, 对数据的完整性要求不是很高。但是查询性能很好, 如果你的数据库应用主要是查询操作的话, 应该使用myisam引擎。 而innodb支持事务。。。如果你的应用中, 对数据库的增删改操作比较多的的话, 建议使用innodb。
- myisam使用三个文件: .frm, .myd, .myi myd是数据文件mydata, myi是mysql index 索引文件. 而innodb 在 innodb_file_per_table =On的时候, 每个表 独占表空间, 一个表占一个文件, 而 innodb_file_per_table=Off 的时候, 是多个表共用 表空间.
引擎 myisam: 发音: my-zeim. innodb: in-no-db
- 引擎myisam和innodb的区别
- myisam不支持事务,所以不支持行锁,对数据在更改update,insert,delete等操作时的准确性不能保证100%. 但是他的查询效率特别高,所以如果你的项目对数据的一致性要求不是太高的话,或经常进行的是大量的查询工作的话, 应该使用myisam引擎, 因为默认使用的是innodb, 所以应该显式的声明 engine=myisam
- innodb支持事务,所以对数据的多个表之间的一致性和约束等比较好,但正因为如此,查询效率会受到影响. 如果你的表要经常地增删改,那么应该使用innodb引擎 自动开启 autocommit参数为on
set global autocomment=1, show variables like 'autocommit'
会把每一条mysql语句封装成事务, 自动提交. 所以,为了提高性能, 如果有多条语句, 应该将多条语句放在begin和end之间, 而封装成一个事务来处理. - 使用
show engines
查看mysql支持哪些引擎, 包括: myisam, memory, innodb, xtradb,mariadb, csv, achieve等引擎, 默认的引擎是 innodb! 有default标识的, 就是默认的存储引擎。
- 创建用户, 授予权限是: grant privs on db.tablename to user@... 而取消,收回权限使用的是 revoke. invoke是调用什么函数的.. 而revoke是: 撤销,收回, 否定, 使...无效.
在mysql中, 字符串中间和末尾的空格 是要作为一个有效的字符来算的, 所以
password
字段和password
列是不同的!show users;?不行? 是的, 在mysql中, 不能要查看有哪些用户, 不能使用show users, 而要查询mysql数据库的user表:
select user, Host from mysql.user ;
基本上users的权限表是制定一个帐号在整个MySQL的权限
而Db的权限表是一个users在某个database的权限
举个例子...我们常这样做
让一个帐号在users下完全没权限
但是在Db下让他在某个资料库有完全的权限
这样可以让每一个资料库的使用帐号完全区分开来
避免一个帐号的权限过大可以减少错误的损害范围
也比较能实现到多人操作的环境
注意的是, mysql select语句中的distinct 是修饰的整个后面的选择字段, 而不是仅仅指跟他相挨着的那个字段. 比如
mysql> select distinct user , '@', `Host` from mysql.user; ### 这里要求的就是, 要 user, 和host 两个都完全 相同的 记录才会被认为是相同的, 而被排除. 而不仅仅是指user.
+------+---+-----------+
| user | @ | Host |
+------+---+-----------+
| root | @ | 127.0.0.1 |
| root | @ | ::1 |
| | @ | localhost |
| root | @ | localhost |
+------+---+-----------+
4 rows in set (0.00 sec)
mysql> select distinct user from mysql.user;
+------+
| user |
+------+
| root |
| |
+------+
2 rows in set (0.02 sec)
mysql>
如何切换登录用户???
-- 不能直接在 登录后的mysql环境下切换用户, 要退出mysql到命令行, 然后再用另外的用户进行登录, 仍然使用命令 ` mysql -u 'you_want_to_switch_user' -p '授予权限的时候, 要写到具体的表, 而不能只是写数据库,否则他会把on后面的内容 首先当作表来处理. 当然,如果你已经切换到数据库test, 那么可以直接写(只是写表的名称 foo)就可以了.
mysql> grant select on test
.foo
to zs@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql> grant select on test
to zs@localhost;
ERROR 1046 (3D000): No database selected
mysql>
mysql> use test;
Database changed
mysql> grant select on foo
to zs@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql>
1.. 为什么只是授予了 select权限, 但是也可以delete? update? insert呢?
如何查看, mysql中的用户拥有哪些权限?
- 使用 `show grants for '你的用户名@主机'; 默认的show grants 就是显示的 当前登录用户的权限.
- 而如果你要查看 某个 "非当前用户"的权限, 则使用
show grants for other_user;
- 而show grants 实际上, 是显示 你使用 (或系统默认使用的) 的 grants 语句命令 创建的语句. 比如
MariaDB [test]> show grants for foo@localhost;
+-----------------------------------------+
| Grants for foo@localhost |
+-----------------------------------------+
| GRANT USAGE ON *.* TO 'foo'@'localhost' |
+-----------------------------------------+
1 row in set (0.00 sec)
MariaDB [test]>
- 要注意的是, 默认的权限虽然是 usage, 但是 其实它对 其他数据库可能有很多权限, 比如这里的foo虽然是 usage 权限, 但是 它还可以对?????????
MariaDB [(none)]> show grants for foo@localhost;
+-----------------------------------------+
| Grants for foo@localhost |
+-----------------------------------------+
| GRANT USAGE ON *.* TO 'foo'@'localhost' |
+-----------------------------------------+
1 row in set (0.00 sec)
MariaDB [(none)]> revoke select, delete on test.user from 'foo@localhost';
ERROR 1141 (42000): There is no such grant defined for user 'foo@localhost' on host '%'
MariaDB [(none)]> revoke select, delete on test.user from 'foo'@'localhost';
ERROR 1147 (42000): There is no such grant defined for user 'foo' on host 'localhost' on table 'user'
MariaDB [(none)]> revoke select, delete on `test`.`user` from 'foo'@'localhost';
ERROR 1147 (42000): There is no such grant defined for user 'foo' on host 'localhost' on table 'user'
MariaDB [(none)]>
- 字段的名称的首字母需要大写吗?
只是 在系统数据库mysql中的表 中, 才使用 大写的字段名称. Host, Db, User, Select_priv
但是, 通用的表中的字段 还是 使用小写字母开头的字段名.
由于mysql的 "语法错误" 的报告, 没有更详细的错误信息, 也不指出 是哪里的语法 单词 错误, 所以, 如果是发现 报 "语法错误", 那么 首先就是 要去检查 当前命令的 单词 拼写是否正确? 然后看 是否使用了 保留的关键字?
查表 寻找 mysql的权限类型: (主要的权限): http://www.cnblogs.com/cnteam/articles/4272460.html 要注意 每一种权限, 操作的对象是什么 , 比如: create 是创建权限, 那么你要清楚它是创建什么? 等等...
是一个用逗号分隔的你想要赋予的MySQL用户权限的列表。你可以指定的权限可以分为三种类型:
数据库/数据表/数据列权限:
Alter: 修改已存在的数据表(例如增加/删除列)和索引。
Create: 建立新的数据库或数据表。
Delete: 删除表的记录。
Drop: 删除数据表或数据库。
INDEX: 建立或删除索引。
Insert: 增加表的记录。
Select: 显示/搜索表的记录。
Update: 修改表中已存在的记录。
全局管理MySQL用户权限:
file: 在MySQL服务器上读写文件。
PROCESS: 显示或杀死属于其它用户的服务线程。
RELOAD: 重载访问控制表,刷新日志等。
SHUTDOWN: 关闭MySQL服务。
特别的权限:
ALL: 允许做任何事(和root一样)。
USAGE: 只允许登录--其它什么也不允许做。
杂项
exe文件, 有时候也可以用 winrar, 7z等进行解压,得到的解压文件, 中可能包含exe可执行文件, 而且这个文件是可以直接执行的, 不需要进行安装。
联想同传和保护
- 这种网络同传的功能,有的是通过硬件如hp通过增霸卡来实现的, 有的是通过软件如lenovo来实现的
- 联想是通过 “后期”(原来出厂时是没有的) 安装 同传功能的软件 来实现的。 当然在安装 联想同传这个软件的
时候,本身是不能批量控制的, 因为此时还没有网络管理功能。
1.联想同传硬盘保护系统, 本身是在bios启动阶段,而不是在win启动后的, 所以它没有其他软件、系统开销的负担, 因此效率应该是更高。 - 同时,正是因为这个原因, 这个保护系统使用的函数和类,数据结构等, 也就不是操作系统所提供的api或 c/c++类等了. 他是一个独立的, 小型的, 类似于linux的嵌入式的微型操作系统,比如dos类型的小型结构..
- 在操作上, 可以有两种分发: 一是保护和还原的设置(设置保护和取消保护), 另一种是网络参数/网络操作系统的同传等.这两个操作可以看成是两个独立的部分:
- 首先是取消发送端(母机) 的保护: 首先在一台计算机上设置 发送端(任何一台机器上都可以), 然后设置好这台发送端. 包括: 隐藏启动菜单, 取消"开发模式重启后自动调整为保护模式" , 主要是 这两个选项. 然后确定. 在进入单机的设置时, 按的是 home键. 注意home键 要 不停的 点按, 不是按着不动
设置好母机后(整个网络中, 只有一台发送端, 其他自动成为接收端), 然后就是进行同传了, 同传可以有很多种情况: 比如同传cmos参数, 同传保护参数, 同传操作系统等.
同传的时候, 是点按 F4, 进入联想同传界面.
=======================
很重要的一点是, 当设置好了母机的时候, 单击"确定", 这个时候, 机器还是处于保护模式的! 因此 在 进入同传界面的时候,中间还有一个 操作系统启动的界面 (这个也是为什么要取消 隐藏启动菜单 的原因, 否则这个界面就不会显示出来, 你也不知道什么时候按 ctrl+o ) (在这个界面的底部, 有一些 功能键的 快捷方式提示, 比如ctrl+o进入开放模式等等 ). 就是在这里, 在这个时候, 要按ctrl+o进入 开放模式! 然后接下来, 点按 F4 进入网络同传!
- 唤醒: 是指针对 没有 开机的计算机, 如果计算机 已经 开机了, 那么就不存在唤醒了
最重要的一个操作是: 在进行机房维护的时候, 不仅是要使用 联想同传, 还原精灵等软件, 还要结合 电子教室等软件进行操作, 电子教室 在 进行某些操作: "如: 远程关机, 重启学生机, 远程发送文件, 远程执行命令"等方面都是非常有用的.
使用联想同传-硬盘保护系统的时候, 要注意 某些机器的ip地址, 可能会存在: 显示的ip地址,跟实际的ip地址不符的情况, 比如你查看ip地址的时候, 可能是 172.16.5.123 但是你进入网卡设置的时候, 却是 172.16.5.1 这个原因可能是跟 联想同传在自动分配/发送ip地址的时候, ip地址修改失败 造成的.
这个 ip地址设置错误或 冲突 , 也是 很多时候, 同传机器连接不到 服务器/发送端的 原因所在. 发现连接不上发送端的情况, 最好还是查看一下, 改一下ip地址, 这样工作量 更小一些, 不然后期再一台一台的去手动进行保存的话, 还是比较麻烦的. 可以将这些连不上的机器的ip地址改大一些如234, 240等
#### 为什么win启动时总是每次提醒 check d:?
原因, 可能是因为非正常关机, 或恶意程序损坏了系统文件.
解决方案:
- 在d: 驱动器上右键, 弹出属性->工具-> 检查-> 开始检查中 勾选修复...修复完成后, 就可能会消失, 不再提醒检查
使用cmd命令 : chkdsk 或 chkntfs命令:
chkdsk命令 直接检查扫描 硬盘分区.
或者使用 chkntfs:
chkntfs有几个开关:
/d 使用default 默认设置, 让win(xp或 win7+)等在每次开机时, 自动检查(所有)分区的完整性
, 如果有错误, 则自动执行 chkdsk命令
/x: exclude 排除,chkntfs /x d: e:
表示 启动时排除检查(不检查) d盘和e盘
/c: 则是跟/x相反, 指定检查启动时, 要检查某个分区在windows中, 命令的 选项被成为开关switcher / 参数等, 而在linux中始终被成为options
在综合布线中, 水晶头的个数的 经验公式?
- 这是经验公式, 其中的冗余量, 富余量为15%左右, 具体富余多少, 由实际情况决定
- 在公式
a=b*4*(1+15%)
在的4, 要根据具体情况来定, 也可能是2, 要看你的布线中, 是否使用了 配线架/理线环/信息插座, 如果没有配线架和信息插座, 则网线是直接从 交换机 拉到 工作区的工作电脑上, 那么 一个信息点 < = > 就 对应着一根跳线, 此时倍数就是2. 乘以4倍: 是根据 规范的/完整的布线规矩: 使用配线架/理线环/信息插座时, 在信息插座到工作区电脑有一根跳线, 在机柜/管理间内, 从交换机到配线架 之间还有一个跳线, 所以对于一个信息点就是 2根 跳线, 所以 水晶头的数目是 4倍 +
冗余:
或直接是: a=4b(1+15%)=4*1.15b=4.6 b
就好了!!
而网线的估算是: L = (0.55(最远距离+最近距离)+6) 信息点的个数.
网线箱数: L/305, 其中305米表示, 每一箱的长度
win advanced installer是通过捕获安装过程中的对话框/选项/按钮来生成 安装时需要的配置文件, 从而在msi安装时可以实现自动 读取安装配置文件而静默安装.
要先运行 "repackager" 重新包装器, 然后将捕获的结果导入到 advanced installer中生成新的工程, 然后将 新生成的 工程进行 "重新构建" 即可以得到 msi结果文件.
i accept the terms in the license agreement.
Advanced installer: 高级安装器
是将exe等安装文件, 转换成msi文件, 添加/自动生成 “安装配置文件脚本”, 进行静默安装, 静默安装时, 会自动读取安装配置脚本中的设置。
AI进行Repackage时, 会去 “捕获”抓取, 实际安装exe程序时, 中间的一些选择/输入 对话框界面, 以及这些对话框界面上的 按钮。
ximalaya 下载文件的位置, 并不一定就是 "ting/download", 你要看他的 设置中 指定的 下载文件的位置, 比如: 有些设置 是: /storage/'emulated/0/Andriod/data/com.ximalaya.ting.andriod/files/download/ 中.
- emulate: 两个意思, 一是"模仿, 效仿", 另一个 是" 模拟, 仿真"...
- 下载的文件, 本身就是音频文件, 只是它不是以 mp3结尾的扩展名, 但是即使不用改名, 也可以用音频软件 直接进行播放.
开发web应用程序, 跟桌面应用程序一样,主要的内容和编码还是 实现业务, 功能, 跟桌面应用程序
的开发过程,思想,方法好步骤等应该是一样的, 而不是简单的实现界面。
界面应该是以 功能/业务 为目标为参考依据来实现和设计的。
比如 zhixue网