Taohong的博客


  • Home

  • Archives

scss基础

Posted on 2017-07-16

scss基础

找一个点看官网的demo入手,入手后边用边找对应的API。只要学会最基本的东西,如何编译,嵌套的写法,如何计算。就和学js一样,最开始只要学习变量,判断,循环,随着项目过程,不断的看api,慢慢就熟了,然后可以看一看背后的东西。
只要知道是什么,和最基本的东西就行。

前端技术发展的很快,要不断的学一些新东西,这样以这些东西为基础的新东西发展出来时,才能很快知道和学习。

变量

scss中可以定义变量,方便统一修改和维护。

1
2
3
4
5
6
7
8
9
//scss style
//-----------------------------------
$fontStack: Helvetica, sans-serif;
$primaryColor: #333;

body {
font-family: $fontStack;
color: $primaryColor;
}

1
2
3
4
5
6
//css style
//-----------------------------------
body {
font-family: Helvetica, sans-serif;
color: #333;
}

嵌套

scss可以进行选择器的嵌套,表示层级关系,看起来很优雅整齐。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//scss style
//-----------------------------------
nav {
ul {
margin: 0;
padding: 0;
list-style: none;
}

li { display: inline-block; }

a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//css style
//-----------------------------------
nav ul {
margin: 0;
padding: 0;
list-style: none;
}

nav li {
display: inline-block;
}

nav a {
display: block;
padding: 6px 12px;
text-decoration: none;
}

导入

1
2
3
4
5
6
7
8
9
10
11
12
scss中如导入其他scss文件,最后编译为一个css文件,优于纯css的@import
//scss style
//-----------------------------------
// _reset.scss

html,
body,
ul,
ol {
margin: 0;
padding: 0;
}
1
2
3
4
5
6
7
8
9
10
//scss style
//-----------------------------------
// base.scss

@import 'reset';

body {
font-size: 100% Helvetica, sans-serif;
background-color: #efefef;
}
1
2
3
4
5
6
7
8
9
10
11
//css style
//-----------------------------------
html, body, ul, ol {
margin: 0;
padding: 0;
}

body {
background-color: #efefef;
font-size: 100% Helvetica, sans-serif;
}

mixin

scss中可用mixin定义一些代码片段,且可传参数,方便日后根据需求调用。从此处理css3的前缀兼容轻松便捷。

1
2
3
4
5
6
7
8
9
10
11
//scss style
//-----------------------------------
@mixin box-sizing ($sizing) {
-webkit-box-sizing:$sizing;
-moz-box-sizing:$sizing;
box-sizing:$sizing;
}
.box-border{
border:1px solid #ccc;
@include box-sizing(border-box);
}
1
2
3
4
5
6
7
8
//css style
//-----------------------------------
.box-border {
border: 1px solid #ccc;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}

扩展/继承

scss可通过@extend来实现代码组合声明,使代码更加优越简洁。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//scss style
//-----------------------------------
.message {
border: 1px solid #ccc;
padding: 10px;
color: #333;
}

.success {
@extend .message;
border-color: green;
}

.error {
@extend .message;
border-color: red;
}

.warning {
@extend .message;
border-color: yellow;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//css style
//-----------------------------------
.message, .success, .error, .warning {
border: 1px solid #cccccc;
padding: 10px;
color: #333;
}

.success {
border-color: green;
}

.error {
border-color: red;
}

.warning {
border-color: yellow;
}

运算

scss可进行简单的加减乘除运算等

1
2
3
4
5
6
7
8
9
10
11
12
13
//scss style
//-----------------------------------
.container { width: 100%; }

article[role="main"] {
float: left;
width: 600px / 960px * 100%;
}

aside[role="complimentary"] {
float: right;
width: 300px / 960px * 100%;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//css style
//-----------------------------------
.container {
width: 100%;
}

article[role="main"] {
float: left;
width: 62.5%;
}

aside[role="complimentary"] {
float: right;
width: 31.25%;
}

颜色

scss中集成了大量的颜色函数,让变换颜色更加简单。

1
2
3
4
5
6
7
8
9
10
//scss style
//-----------------------------------
$linkColor: #08c;
a {
text-decoration:none;
color:$linkColor;
&:hover{
color:darken($linkColor,10%);
}
}
1
2
3
4
5
6
7
8
9
//css style
//-----------------------------------
a {
text-decoration: none;
color: #0088cc;
}
a:hover {
color: #006699;
}

compass

compass由scss的核心团队成员Chris Eppstein创建,是一个非常丰富的样式框架,包括大量定义好的mixin,函数,以及对scss的扩展。

sublime快捷键设置

Posted on 2017-07-16

sublime快捷键设置

快捷键设计原则

  1. 尽量不改变原有快捷键
  2. 手指跨幅不要太大
  3. 语义化表达
  4. 相反操作用ctrl和ctrl+alt操作

快捷键配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[
// 字母大小写
{ "keys": ["ctrl+k", "ctrl+u"], "command": "title_case" },
{ "keys": ["ctrl+u", "ctrl+u"], "command": "upper_case" },
{ "keys": ["ctrl+k", "ctrl+l"], "command": "lower_case" },

// 折叠代码操作
{ "keys": ["ctrl+shift+["], "command": "fold" },
{ "keys": ["ctrl+shift+]"], "command": "unfold" },
{ "keys": ["ctrl+k", "ctrl+1"], "command": "fold_by_level", "args": {"level": 1} },
{ "keys": ["ctrl+k", "ctrl+2"], "command": "fold_by_level", "args": {"level": 2} },
{ "keys": ["ctrl+k", "ctrl+3"], "command": "fold_by_level", "args": {"level": 3} },
{ "keys": ["ctrl+k", "ctrl+4"], "command": "fold_by_level", "args": {"level": 4} },
{ "keys": ["ctrl+k", "ctrl+5"], "command": "fold_by_level", "args": {"level": 5} },
{ "keys": ["ctrl+k", "ctrl+6"], "command": "fold_by_level", "args": {"level": 6} },
{ "keys": ["ctrl+k", "ctrl+7"], "command": "fold_by_level", "args": {"level": 7} },
{ "keys": ["ctrl+k", "ctrl+8"], "command": "fold_by_level", "args": {"level": 8} },
{ "keys": ["ctrl+k", "ctrl+9"], "command": "fold_by_level", "args": {"level": 9} },
{ "keys": ["ctrl+k", "ctrl+0"], "command": "unfold_all" },
{ "keys": ["ctrl+alt+k", "ctrl+alt+0"], "command": "fold_all" },
{ "keys": ["ctrl+k", "ctrl+j"], "command": "unfold_all" },
{ "keys": ["ctrl+alt+k", "ctrl+alt+j"], "command": "fold_tag_attributes" },
]

快捷键

导航/跳转

ctrl+p:根据文件名快速打开文件
+@:跳转到所定义模块
+#:跳转到关键字
+:跳转到行

tabs

ctrl+shift+t:打开最近关闭的tab
ctrl+pgUp:逆序显示tab
ctrl+pgUp:顺序序显示tab
ctrl+w:关闭tab

分屏

alt+shift+2
alt+shift+1

编辑

删除
ctrl+x:删除行
ctrl+kk:删除光标后所有内容
ctrl+j:将下一行与当前行连接

移位
ctrl+回车:在当前行下方另起一行
ctrl+shift+回车:在当前行上方另起一行
ctrl+shift+上下键:交换上下行

选中
ctrl+方向键:选中
ctrl+shift+左右键:以词为单位选中
ctrl+shift+m:选中封闭模块内容
ctrl+m:跳转到模块处
ctrl+d:选中相同词
ctrl+K,ctrl+d:跳过最后选中的词
alt+f3:选择全部相同单词
ctrl+l:选中行
ctrl+shift+l

查询

ctrl+f:查找
ctrl+h:替换

标签

ctrl+f2:设置书签
f2:上一个书签
shift:下一个书签
ctrl+shift+f2:清除所有书签

文本操作

ctrl+ku 首字母大小写
ctrl+uu 大写
ctrl+kl 小写

代码折叠

ctrl+shift+[:折叠
ctrl+shift+]:取消折叠
ctrl+k, ctrl+0:取消所有折叠
ctrl+alt+k, ctrl+alt+0:折叠全部
ctrl+k, ctrl+j:取消所有折叠
ctrl+alt+k, ctrl+alt+j:折叠所有标签

sublime常用插件

Posted on 2017-07-16

sublime常用插件

设置(setting)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"auto_complete_triggers":
[
{
"characters": "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.<",
"selector": "text.html"
}
],
"font_size": 14,
"ignored_packages":
[
"Vintage"
],
"tab_size": 2
}

插件

安装插件

1
ctrl+shirt+p

install package control

常用插件

emmet

介绍:仿选择器语法生成代码

docBlock

介绍:自动补全注释

html/css/js prettify

介绍:整理代码

CSScomb

介绍:规范css,整理css顺序
配置网站:http://csscomb.com/config
配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
"node-path" : "C:\\Program Files\\nodejs.node.exe",
"config": {
"remove-empty-rulesets": true,
"always-semicolon": true,
"color-case": "lower",
"block-indent": "\t",
"color-shorthand": true,
"element-case": "lower",
"eof-newline": false,
"leading-zero": false,
"quotes": "single",
"sort-order-fallback": "abc",
"space-before-colon": "",
"space-after-colon": " ",
"space-before-combinator": " ",
"space-after-combinator": " ",
"space-between-declarations": "\n",
"space-before-opening-brace": " ",
"space-after-opening-brace": "\n",
"space-after-selector-delimiter": "\n",
"space-before-selector-delimiter": "",
"space-before-closing-brace": "\n",
"strip-spaces": true,
"tab-size": true,
"unitless-zero": true,
"vendor-prefix-align": true
}
}

file header

介绍:添加文件header

jQuery

介绍:jquery代码提示

Bootstrap 3 Snippets

介绍:bootstrap3 代码片段

SCSS

介绍:scss代码提示

ES6-Toolkit

介绍:es6转es5,es6代码片段

SideBarEnhancements

介绍:打开浏览器

Terminal

介绍:打开命令行工具

linux常用命令

Posted on 2017-07-16

linux常用命令

命令的基本格式

命令 [选项] [参数]

注意:个别命令使用不遵循此格式
当有多个选项时,可以写在一起
简化选项等于完整选项
-a 等于 –all

查询目录中内容:ls
ls [选项] [文件或目录]
选项:
-a 显示所有文件,包含隐藏文件
-l 显示详细信息
-d 查看目录本身属性
-h 人性化显示文件大小
-i 显示inode节点(储存时生成的编码,格式化硬盘时候,分成等大的内存块4k,同时生成相应的节点表)

文件处理命令

目录和文件处理命令

建立目录:mkdir

  • mkdir -p [目录名]
    -p 递归创建
    命令英文原意:make directories

切换所在目录:cd

  • cd [目录]
    命令英文原意:change directory

  • 简化命令
    cd和cd ~进入当前用户的家目录
    cd - 进入上次目录
    cd .. 进入上一级目录
    cd . 进入当前目录

Ctrl+L 清屏
tab 可以补全目录或命令

查询所在目录位置:pwd

命令英文原意:print working directory

删除空目录:rmdir

  • rmdir [目录名]
    命令英文原意:remove empty directories

删除文件或目录:rm

  • rm -rf [目录名]
    命令英文原意:remove
  • 选项:
    -r 删除目录
    -f 强制

复制命令:cp

  • cp [选项] [原文件或目录] [目标目录]
    命令英文原意:copy
  • 选项:
    -r 复制目录
    -p 连带文件属性复制
    -d 若源文件是链接文件,则复制链接属性
    -a 相当于 -pdr

剪切或改名命令:mv

  • mv [原文件或目录] [目标目录]
    命令英文原意:move

ll 等于 ls -l

常用目录的作用

  • /根目录
    • /bin命令保存目录(普通用户就可以读取的命令)
    • /boot启动目录,启动相关文件
    • /dev设备文件保存目录
    • /etc配置文件保存目录
    • /home普通用户的家目录
    • /lib系统库保存目录
    • /mnt系统挂载目录
    • /media挂载目录
    • /root超级用户的家目录
    • /tmp临时目录
    • /sbin命令保存目录(超级用户才能使用的目录)
    • /proc直接写入内存的
    • /sys
    • /usr系统软件资源目录
      • /usr/bin/系统命令(普通用户)
      • /usr/sbin/(超级用户)
    • /var系统相关文档内容

链接命令

  • ln -s [原文件] [目标文件]
    命令英文原意:link
  • 功能描述:生成链接文件
  • 选项: -s 创建软链接

硬链接特征:
1、拥有相同的i节点和存储block块,可以看作是同一个文件
2、可通过i节点识别
3、不能跨分区
4、不能针对目录使用

软链接特征:
1、类似Windows快捷方式
2、软链接拥有自己的i节点和Block块,但是数据块中只保存原文件的文件名和i节点号,并没有实际的文件数据
3、lrwxrwxrwx l 软链接
4、修改任意文件,另一个文件都改变
5、删除原文件,软链接不能使用

文件搜索命令

文件搜索命令 locate

  • locate 文件名
    在后台数据库中安文件名搜索,搜索速度更快
  • updatedb
    更新数据库

命令搜索命令 whereis 和 which

  • whereis 命令名
    搜索命令所在路径及帮助文档所在位置
    选项:
    -b:只查找可执行文件
    -m:只查找帮助文档

  • which 文件名
    搜索命令所在路径及别名

文件搜索命令 find

  • find [搜索范围] [搜索条件]
    搜索文件

  • find / -name install.log
    避免大范围搜索,会非常消耗系统资源
    find是在系统当中搜索符合条件的文件名。如果需要匹配,使用通配符匹配,通配符是完全匹配。

  • find / -iname install.log
    不区分大小写

  • find / -user install.log
    按照所有者搜索

  • find /root -nouser
    查找没有所有者的文件

  • find /var/log/ -mtime +10
    查找10天亲修改的文件

    +10 10天以前
    -10 10天内
    10 10天当天
    -mtime 修改文件内容
    -ctime 修改文件属性
    -atime 文件访问时间

  • find . -size 25k
    查找文件大小是25KB的文件

-25k 小于25KB的文件
25k 等于25KB的文件
+25k 大于25KB的文件

  • find . -inum 262422
    查找i几点是262422的文件

find /ect -size +20k -a -size -50k
查找/etc/目录下,大于20KB并且小于50KB的文件
-a and 逻辑与
-o or 逻辑或

find /ect -size +20k -a -size -50k -exec ls -lh {} \;
查找/etc/目录下,大于20KB并且小于50KB的文件,并显示详细信息
-exec/-ok 命令 {} \; 对搜索结果执行操作

字符串搜索命令 grep

  • grep [选项] 字符串 文件名
    在文件当中匹配符合条件的字符串

选项:
-i 忽略大小写
-v 排除指定的字符串

帮助命令

man 命令

查看命令拥有哪个级别的帮助
man -f 命令
相当于
whereis 命令

举例:
man -5 passwd

查看和命令相关的所有帮助
man -k 命令
相当于
apropos 命令

选项帮助
命令 –help

shell内部命令帮助
help shell内部命令

详细命令info
info 命令
回车:进入子帮助页面
u:进入上层页面
n:进入下一个帮助小节
p:进入上一个帮助小节
q:退出

MySQL运算符和函数

Posted on 2017-07-16

MySQL运算符和函数

字符函数

函数名称 描述
CONCAT() 字符连接
CONCAT_WS() 使用指定的分隔符进行字符连接
FORMAT() 数字格式化
LOWEER() 转换成小写字母
UPPER() 转换成大写字母
LEFT() 获取左侧字符
RIGHT() 获取右侧字符
LENGTH() 获取字符串长度
LTRIM() 删除前导空格
RTRIM() 删除后续空格
TRIM() 删除前导和后续空格
SUBSTRING() 字符串截取
[NOT] LIKE() 匹配模式
REPLACE() 字符串替换

数值运算符与函数

函数名称 描述
CEIL() 进一取整
DIV 整数除法
FLOOR() 舍一取整
MOD 取余数(取模)
POWER() 幂运算
ROUND() 四舍五入
TRUNCATE() 字数截取

比较运算符与函数

函数名称 描述
[NOT] BETWEEN…AND… [不]在范围之内
[NOT] IN() [不]在列出值范围内
IS [NOT] NULL [不]为空

日期时间函数

函数名称 描述
NOW() 当前日期和时间
CURDATE() 当前日期
CURTIME() 当前时间
DATE_ADD() 日期变化
DATEDIFF() 日期差值
DATE_FORMAT() 日期格式化

信息函数

函数名称 描述
CONNECTION_ID() 连接ID
DATEBASE() 当前数据库
LAST_INSERT_ID() 最后插入记录的ID号
USER() 当前用户
VERSION() 版本信息

聚合函数

函数名称 描述
AVG() 平均值
COUNT() 计数
MAX() 最大值
MIN() 最小值
SUM() 求和

加密函数

函数名称 描述
MD5() 信息摘要算法
PASSWORD() 密码算法

bash示例和书写流程

Posted on 2017-07-14

bash示例和书写流程

新建文件test.sh

1
touch test.sh

添加可执行权限

1
$ chmod +x test.sh

编辑test.sh,test.sh内容如下:

1
2
3
4
5
#!/bin/bash

echo "hello bash"

exit 0

说明:

  • #!/bin/bash : 它是bash文件声明语句,表示是以/bin/bash程序执行该文件。它必须写在文件的第一行!
  • echo “hello bash” : 表示在终端输出“hello bash”
  • exit 0 : 表示返回0。在bash中,0表示执行成功,其他表示失败。

执行bash脚本

1
2
3
4
./test.sh
#或者
sh test.sh
bash test.sh

在终端输出“bash hello”

参考:
linux bash总结

MySQL语句

Posted on 2017-07-12

MySQL语句

初涉MySQL

MySQL的安装与配置

default-character-set=utf8
character-set-server=utf8

MySQL常用命令以及语法规范

MySQL语句规范:
关键字与函数名称全部大写;
数据库名称、表名称、字段名称全部小写;
SQL语句必须以分号结尾;

修改提示符:
PROMPT

参数 描述
\D 完整的日期
\d 当前数据库
\h 完整的服务器名称
\u 当前用户

数据类型

整型:

Col1 存储范围 字节
tinyint 有符号:-128到127 (-2的7次方到 2的7次方-1) 无符号 :0-255 (0-2的8次方-1) 1
smallint 有符号:-128到127 (-2的7次方到 2的7次方-1)无符号 :0-255 (0-2的8次方-1) 2
mediumint 有符号:-8388608到8388608 (-2的23次方到 2的23次方-1)无符号 :0-16777215 (0-2的24次方-1) 3
int 有符号:-2147483648到2147483648 (-2的31次方到 2的31次方-1)无符号 :0-4294967295 (0-2的32次方-1) 4
bigint 有符号:-9223372036854775808到9223372036854775808 (-2的63次方到 2的63次方-1)无符号 :0-18446744073709551616 (0-2的63次方-1) 8

1.整形
1.1 tinyint 1字节
有符号:-128到127 (-2的7次方到 2的7次方-1)
无符号 :0-255 (0-2的8次方-1)

1.2 smallint 2字节
有符号:-32768到32768 (-2的15次方到 2的15次方-1)
无符号 :0-65535 (0-2的16次方-1)

mediumint 3字节
有符号:-8388608到8388608 (-2的23次方到 2的23次方-1)
无符号 :0-16777215 (0-2的24次方-1)

int 4字节
有符号:-2147483648到2147483648 (-2的31次方到 2的31次方-1)
无符号 :0-4294967295 (0-2的32次方-1)

bigint 8字节

有符号:-9223372036854775808到9223372036854775808 (-2的63次方到 2的63次方-1)
无符号 :0-18446744073709551616 (0-2的63次方-1)

操作数据库

创建数据库:

CREATE {DATABASE | SCHEMA}[IF NOT EXISTS] db_name [[DEFAULT] CHARACTER SET [=] charset_name];

修改数据库:

ALTER {DATABASE|SCHEMA}[db_name] [DEFAULT] [CHARACTER SET [=] charset_name];

删除数据库:

DROP {DATABASE|SCHEMA}[IF EXISTS] db_name;

查看数据库:

SHOW DATABASE; 

警告信息:

SHOW WARNINGS;

SHOW CREATE DATABASE t1;

##基础操作

INSERT 插入

  • INSERT INTO
    1
    INSERT [INTO] table_name [(column_name,...)] {VALUES|VALUE} ({expr|DEFAULT},...),(...),...;

此方法比较常用,可以一次性插入多条记录,并且可以输入表达式甚至是函数,但是无法进行子查询。

  • INSERT SET
    1
    INSERT [INTO] tb1_name SET col_name={expr|DEFAULT},...;

与第一种方式的区别在于,此方法可以使用子查询(SubQuery);且只能一次性插入一条记录。

  • INSERT SELECT
    1
    INSERT [INTO] table_name [(column_name,...)] SELECT...;

此方法可以将查询结果插入到指定数据表中

举例:

1
INSERT test(username) SELECT username FROM users WHERE age >=30;

UPDATE 更新(单表)

1
UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT}[,col_name2={expr2|DEFAULT}]...[WHERE where_condition];

一般来说要用WHERE指定位置,不然所有数据都会被更新.

举例:

1
UPDATE users SET age = age + 5 - id,sex = 0;

//更新多个字段的值

1
UPDATE users SET age = age+ 10 WHERE id % 2=0;

//更新id为偶数的位置age的值

DELETE 删除(单表)

1
DELETE FROM tbl_name [WHERE where_conditon];

SELECT 查找

1
2
3
4
5
6
7
8
9
SELECT select_expr [,select_expr ...] --只查找某一个函数或表达式
[
FROM table_references --查询表名
[WHERE where_conditon] --查询条件
[GROUP BY {col_name|position} [ASC|DESC],...] --按某个字段进行分组,相同的只显示第一个
[HAVING where_conditon] --分组时,给出显示条件
[ORDER BY {col_name|expr|position} [ASC|DESC],...] --排序
[LIMIT {[offset,]row_count|row_count OFFSET offset}] --限制返回数量
]

每一个表达式表示想要的一列,必须至少有一个
多个列之间以英文逗号分隔
星号( )表示所以列 tbl_name.可以表示命名表的所有列
查询表达式可以使用[As]alias_name为其赋予别名
别名可用于GROUP BY,ORDRE BY或HAVING子句

SELECT 字段出现顺序影响结果集出现顺序,字段别名也影响结果集字段别名。

  • 利用GROUP BY 分组 添加分组条件 [HAVING where_condition]
    要么为一个聚合函数,要么出现在SELECT 条件中。(聚合函数:max(),min(),avg(),sum(),count() 永远只有一个返回结果)

##子查询和连接

子查询简介

  • 子查询是指出现在【其他SQL语句内】的SELECT子句
    eg:
    SELECT FROM t1 WHERE column1 = (SELECT column1 FROM t2);
    其中,SELECT
    FROM t1 …称为Outer Query(外查询或者Outer Statement)
    SELECT column1 FROM t2 称为Sub Query(子查询)

  • 子查询可以返回标量、一行、一列或者子查询。

使用比较运算符的子查询

  • 子查询查询出的结果出现多个时,使用ANY\SOME(符合其中一个),ALL(全部符合)来来修饰。

[NOT] IN 的子查询

=ANY 等价于 IN
!=ALL或<>ANY等价于NOT IN

使用[NOT]EXISTS的子查询(不常用):

若子查询返回任何行,则返回TRUE,否则为FALSE。

使用INSERT…SELECT插入记录

INSERT [INTO] tbl_name SET col_name={exprDEFAULT},... --可以使用子查询
INSERT [INTO] tbl_name [(col_name,...)] SELECT ... --将查询结果写入数据表

eg:
DESC tdb_goods_cates; //显示出tdb_goods_cates表中的项目名称,与SHOW COLUMNS FROM tdb_goods_cates;作用相同

INSERT tdb_goods_cates(cate_name) SELECT goods_cate FROM tdb_goods GROUP BY goods_cate;//在表tdb_goods_cates中插入tdb_goods中的cate

多表更新

UPDATE table_references SET col_name1={expr1|DEFAULT} [,col_name2={expr2|DEFAULT}]... [WHERE where_condition]

INNER JOIN,内连接
在MySQL中,JOIN, CROSS JOIN 和 INNER JOIN 是等价的。
LEFT [OUTER] JOIN ,左外连接
RIGHT [OUTER] JOIN,右外连接

update tdb_goods inner join tdb_goods_cates on goods_cate=cate_name set goods_cate=cate_id;

多表更新(一步到位)

建表、查询、写入三合一

CREATE TABLE tdb_goods_brands (
brand_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
brand_name VARCHAR(40) NOT NULL
) SELECT brand_name FROM tdb_goods GROUP BY brand_name;

多表更新

UPDATE tdb_goods INNER JOIN tdb_goods_brands ON tdb_goods.brand_name = tdb_goods_brands.brand_name
SET tdb_goods.brand_name = tdb_goods_brands.brand_id;

通过ALTER TABLE语句修改数据表结构
ALTER TABLE tdb_goods
CHANGE goods_cate cate_id SMALLINT UNSIGNED NOT NULL,
CHANGE brand_name brand_id SMALLINT UNSIGNED NOT NULL;

外键,不一定是物理的外键,逻辑的外键也行,当然,物理外键更能保证数据的完整性和一致性

注意:数字类型的字段占用的空间更小,查询的效率也更高

连接语法结构

MySQL在SELECT语句、多表更新、多表删除语句中支持JOIN操作。
语法结构

table_reference A
{[INNER|CROSS] JOIN | {LEFT|RIGHT} [OUTER] JOIN}
table_reference B
ON condition_expr

数据表参照
table_reference
tbl_name [[AS] alias] table_subquery [AS] alias
数据表可以使用tbl_name AS alias_name 或 tbl_name alias_name赋予别名。
table_subquery可以作为子查询使用在FROM子句中,这样的子查询必须为其赋予别名。

内连接INNER JOIN

1、内连接:在MySQL中JOIN,INNER JOIN,CROSS JOIN是等价的
2、外连接:LEFT JOIN左外连接;RIGHT JOIN右外连接
3、连接条件:使用ON设定连接条件,也可以用WHERE代替
· ON:设定连接条件
· WHERE:进行结果集记录的过滤
4:内连接是返回左表及右表符合连接条件的记录
eg:

SELECT * FROM tabA JOIN tabB ON tabA.name = tabB.name; --表示返回都含有的name值对应的字段

外连接OUTER JOIN

1、LEFT JOIN:显示左表全部和左右符合连接条件的记录
2、RIGHT JOIN:显示左右符合连接条件的记录和右表全部记录
3、若某字段只存在某一表,则另一表的里字段返回null

多表连接

SELECT goods_id,goods_name,cate_name,brand_name,goods_price FROM tdb_goods AS g
INNER JOIN tdb_goods_cates AS c ON g.cate_id = c.cate_id
INNER JOIN tdb_goods_brands AS b ON g.brand_id = b.brand_id\G;

注意:INNER和INNER之间是没有逗号的

关于外连接的几点说明

外连接:
以左外连接为例:
A LEFT JOIN B join_condition
数据表B的结果集依赖于数据表A
数据表A的结果集根据左连接条件依赖所有数据表(B表除外)
左外连接条件决定如何检索数据表B(在没有指定WHERE条件的情况下)
如果数据表A的某条记录符合WHERE条件,但是在数据表B不存在符合连接条件的记录,将生成一个所有列为空的额外的B行
内连接:
使用内连接查找的记录在连接数据表中不存在,并且在WHERE子句中尝试一下操作:column_name IS NULL 。如果 column_name 被指定为 NOT NULL,MySQL将在找到符合连接着条件的记录后停止搜索更多的行(查找冲突)

无极限分类表设计

无限分类:即在同一张表中既有父类,又有子类。
通过在分类表中再增加多一个字段标识其属于哪一个父类的 ID 来实现。
可以通过对同一张数据表的自身连接来进行查询,需要对表标识别名。

查找父级对应的名称:

select s.type_id ,s.type_name,p.type_name As parent_name from tdb_goods_types s left join tdb_goods_types p on s.parent_id=p.type_id;

查找子级对应的名称:

select p.type_id ,p.type_name,s.type_name from tdb_goods_types p left join tdb_goods_types s on p.type_id=s.parent_id;

查找有多少子级:

select p.type_id ,p.type_name,COUNT(s.type_name) child_count from tdb_goods_types p left join tdb_goods_types s on p.type_id=s.parent_id GROUP BY p.type_name ORDER BY p.type_id;

多表删除

(1)多表删除,将重复记录删除,保留ID号比较小的项
(2)查找重复记录

SELECT goods_id,goods_name FROM tdb_goods GROUP BY goods_name HAVING count(goods_name) >= 2;

(3) 删除重复记录

DELETE t1 FROM tdb_goods AS t1 LEFT JOIN (SELECT goods_id,goods_name FROM tdb_goods GROUP BY goods_name HAVING count(goods_name) >= 2 ) AS t2 ON t1.goods_name = t2.goods_name WHERE t1.goods_id > t2.goods_id;

运算符和函数

字符函数

函数名称 描述
CONCAT() 字符连接
CONCAT_WS() 使用指定的分隔符进行字符连接
FORMAT() 数字格式化
LOWER() 转换成小写字母
UPPER() 转换成大写字母
LEFT() 获取左侧字符
RIGHT() 获取右侧字符

数值运算符和函数

比较运算符和函数

日期时间函数

信息函数

聚合函数

加密函数

输出csv

Posted on 2017-07-09
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
function exportToCsv(filename, rows) {
var processRow = function (row) {
var finalVal = '';
for (var j = 0; j < row.length; j++) {
var innerValue = row[j] === null ? '' : row[j].toString();
if (row[j] instanceof Date) {
innerValue = row[j].toLocaleString();
};
var result = innerValue.replace(/"/g, '""');
if (result.search(/("|,|\n)/g) >= 0)
result = '"' + result + '"';
if (j > 0)
finalVal += ',';
finalVal += result;
}
return finalVal + '\n';
};

var csvFile = '';
for (var i = 0; i < rows.length; i++) {
csvFile += processRow(rows[i]);
}

var blob = new Blob([csvFile], { type: 'text/csv;charset=utf-8;' });
if (navigator.msSaveBlob) { // IE 10+
navigator.msSaveBlob(blob, filename);
} else {
var link = document.createElement("a");
if (link.download !== undefined) { // feature detection
// Browsers that support HTML5 download attribute
var url = URL.createObjectURL(blob);
link.setAttribute("href", url);
link.setAttribute("download", filename);
link.style.visibility = 'hidden';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
}
}



exportToCsv('export.csv', [
['name','description'],
['david','123'],
['jona','""'],
['a','b'],
])

install_ftp

Posted on 2017-07-09 | In 技术

安装ftp服务

安装

1
2
rpm -qa|grep vsftp
yum install vsftpd -y

启动服务

1
service vsftpd start

添加ftp用户

1
2
adduser test
passwd test

My New Post

Posted on 2016-11-28

#111

##2222

1…78

Taohong

记录前端技术,学习心得与生活感悟

80 posts
6 categories
65 tags
© 2020 Taohong
Powered by Hexo
|
Theme — NexT.Muse v5.1.4