修改表结构的方式
(1)修改表名:
【1】ALTER TABLE tbl_name RENAME [TO|AS] new_name
【2】RENAME TABLE tbl_name TO n
修改表结构的方式
(1)修改表名:
【1】ALTER TABLE tbl_name RENAME [TO|AS] new_name
【2】RENAME TABLE tbl_name TO n
唯一性约束 UNIQUE KEY (KEY可省略)
(主键PRIMARY KEY中PRIMARY可省略):一个表中只能有一个主键,但能有多个唯一,NULL之不算重复
完整性约束:
CREATE TABLE [IF NOT EXISTS] tbl_name(
字段名称 字段类型 [UNSIGNED|ZERIFUKK] [NOT NULL] [DEFAULT 默认值] [[PRIMARY] KEY] | UNIQUE [KEY]] [AUTO_INCREMENT]
)ENGINE=INNODB CHARSET=UTF8 AUTO_INCREMENT=100
DEFAULT 默认值,常和NOT_NULL配合使用
NOT NULL非空:不能输入空值,也不能不输入值
AUTO_INCREMENT
一个表中只能有一个自增长字段,且必须配合主键使用,且只对整数列、整数串有意义,对字符串没意义
ENUM:1或2个字节最多枚举65535个值;选取时只能从中选择一个
SET:1、2、3、4或者8个字节,取决于set的成员数目,最多可64个成员,可同时选取多个,且会按照顺序排放,也可按照数字进行选取,数字为各序号位置字符表示的数值的代数和,从左往右序号为1,2,3,4...,表示的值为1,2,4,
CHAR类型,VARCHAR类型和TEXT类型
(1)CHAR为定长字符串,占用空间大,速度快;CHAR字符串前的空格会被自动消除;CHAR字符串前的空格会保留
(2)VARCHAR为边长字符串,占用空间小,速度慢;VARCHAR前后的字符串都会被保留
(3)TEXT是一种特殊的字符串类型,只能保存字符数据,而且不能有默认值
(4)中文字符的在utf8编码中的length为3;但CHAR_LENGTH仍然为1
(4)3个存储和检索数据的方式不同,数据检索效率为:CHAR>VARCHAR>TEXT
查看指定的表结构
(1)DESC tbl_name
(2)DESCRIBE tbl_name
(3)SHOW COLUMNS FROM tbl_name
完整性约束条件:
(1)零填充:ZEROFILL
(2)无符号:UNSIGNED
注释方法
(1)#注释内容
(2)--注释内容
(3)字段注释:comment'注释内容'
存储引擎
(1)存储引擎是指表的类型,数据库的存储类型决定了表在计算机中的存储方式,用户可以根据不同的存储方式、是否进行事物处理等来选择合适的存储引擎
(2)如何查看MySQL存储引擎:
【1】查看MySQL支持的存储引擎:SHOW ENGINES
【2】查看显示支持的存储引擎信息:SHOW VARIABLES LIKE 'have%'
【3】查看默认的存储引擎:SHOW VARIABLES LIKE 'storage_engine'
(3)MySQL常用存储引擎及特点:
【1】InnoDB存储引擎:较快的事物处理
【2】MyISAM存储引擎:较快的查询速度和写入速度
【3】MEMORY存储引擎:对数据库中查询的临时表
数据表的特性:
(1)数据表是数据库中最重要的组成部分之一,是其他对象的基础
(2)数据表是存储数据的数据结构
(3)数据表是包含了特定实体类型的数据
(4)数据表是由行和列构成的二维网络
(5)数据表一定先有表结构,再有数据
(6)数据表至少有一列,可以没有行或者有多行(先有表结构,再有数据)
(7)数据表名称要唯一,而且不包含特殊字符
创建数据表:
CREATE TABLE [IF NOT EXISTS] tbl_name(字段名称 字段类型[完整性的约束条件])ENGINE = 引擎名称 CHARSET='编码方式'
MySQL数据类型
1. 整数类型
(1)TINYINT 有符号数-128~127;无符号数0~255 1
(2)SMALLINT 有符号数:-32768~32767;无符号数0~65535 2
(3)MEDIUMINT 有符号数-8388608~8388607;无符号数0~16777215 3
(4)INT 有符号数-2147683648~2147683647;无符号数0~4294967295 4
(5)BIGINT 有符号数-9223372036854775808~9223372036854775807;无符号数:0~18446744073709551615 8
(6)BOOL 等价于TINYINT(1),0位false,其余为true 1
2. 浮点类型
(1)FLOAT[(M,D)] 4
(8)DOUBLE[(M,D)] 8
(9)DECIMAL[(M,D)] M+2
3. 字符串类型
(1)CHAR M
(2)VARCHAR l+1字节
(3)TINYTEXT l+1字节
(4)TEXT l+2字节
(5)MEDIUMTEXT l+3字节
(6)LONGTEXT l+4字节
(7)ENUM 1或2字节
(8)SET 1、2、3、4或8字节(最多64字节)
4. 日期时间类型
(1)TIME 3
(2)DATE 3
(3)DATETIME 8
(4)TIMESTAMP 4
(5)YEAR 1
DDL常用命令:
(1)SHOW WARNINGS:查看上一步操作产生的警告信息
(2)DROP {DATABASE|SCHEMA} [IF EXISTS] db_name:删除指定的数据库
(3)USE db_name:打开指定数据库
(4)ALTER {DATABASE|SCHEMA} db_name [DEFAULT] CHANGER SET [=] charset_name:修改指定数据库的编码方式
(5)SELECT DATABAME|SCHEMA();:显示当前数据库名称
(6)CREATE {DATABASE|SCHEMA} [IF EXISTS] db_name [DEFULT] CHARACTER SER [=] charset_name
(7)SHOW {DATASETS|SCHEMAS}:查看当前服务器下的数据库列表
(8)SHOW CREATE {DATABASE|SCHEMA} db_name
显示当前版本信息:SELECT VERSION();
显示当前日期时间:SELECT NOW()'
显示当前用户SELECT USER();
地址开启输出日志\T
MySQL语句的规范:
(1)关键字与函数名称全部大写
(2)数据库名称,表名称,字段名称全部小写
(3)SQL语句必须以分隔符结尾
(4)SQL支持折行操作,只要不把单词,标记或引号字符串分割为两部分,可以在下一行继续写
(5)数据库名称、表名称、字段名称尽量不要使用MySQL保留字,如果需要可以使用('')将名称括起来
MySQL的安装目录
(1)bin目录,存储可执行文件
(2)data目录,存储数据文件
(3)include目录,存储包含的头文件
(4)lib目录,存储库文件
(5)docs目录,存储文档
(6)share目录,错误消息和字符文件
(7)my.ini文件,MySQL的配置文件
登录/退出MySQL
登录:mysql -u用户名 -p密码
退出:exit或quit或者\q
-P 端口号(默认3306)
--delimiter=name指定分隔符
-V 版本号
-h 服务器名称
-D 打开指定数据库
--promote 修改命令提示符
e.g. -hlocalhost -uroot -p --prompt=king
ctrl+c相纸退出
1. 什么是数据库
数据库(database)是保存数据的仓库,为了方便数据的存储和管理,为了方便数据的存储和管理,将数据按特定的规律存储在磁盘上,通过数据库管理系统,有效的组织和管理存储在数据库中的数据。
2. 什么是数据库系统
DBS,比数据库大很多,由数据库,数据库管理系统,应用开发工具构成
3. 什么是数据库管理系统
* database management system(DBMS),用来定义数据,管理数据和维护数据的软件,是数据库系统的一种重要组成部分
* 常见的数据库系统:
(1)甲骨文oracle
(2)IBM的DB2
(3)微软的SQL Server,Access
(4)PostgreSql
(5)MySQL
3. MySQL数据库
(1)开放源代码,可以自由使用的数据库
(2)跨平台数据库
(3)开源免费
(4)功能强大使用方便
4. SQL
(1)structured query language,简称SQL,结构化语言查询,数据库管理通过SQL语言来管理数据库中的数据
(2)DML主要包括对数据的增删改查,INSERT插入数据,UPDATE更新数据,DELETE删除数据
(3)DQL数据检索语句,用来从表中获得数据,确定数据怎样在应用程序中给出,例如SELECT查询语句
(4)DCL数据库控制语言,永不控制用户的访问权限,例如GRANT, REVOKE, COMMIT, ROLLBACK
1. 虚拟机重启错误:
由于磁盘有损坏
修复磁盘:
step1:回车后输入root密码
step2:fsck /dev/sda2
step3:fix<y>? yes
step 4:reboot
#### shell基础编程
1. shell程序介绍
(1)shell程序时已文件形式存放批量的linux命令集合,该文件能够被shell解释执行,这种文件就是shell脚本程序,shell文件是文本文件
(2)shell程序通常由一段Linux命令,Shell命令、控制语句以及注释语句构成
(3)shell脚本是纯文本文件,可以使用任何编译器编写,通常以.sh作为后缀名
(4)第一行:指定用哪个程序来编译和执行脚本
#!/bin/bash
#!/bin/sh
(4)除第一行外,使用#表示注释
(5)执行脚本的三种方式
① $ ./test.sh
② $ . test.sh
③ $ sh test.sh
2. 变量的使用
(1)变量名必以字母或下划线开头,后面可以跟字母,数字或下划线。
(2)对大小写敏感
(3)变量的赋值(等号两边不能有空格):$ x=123
变量值的回显:$ echo ${sex}或$ echo $sex
(4)变量作用域
本地变量:只在创建它们的shell程序可用
环境变量(全局变量):在shell的所有用户进程中可用,如果父shell进程产生了子shell进程,则环境变量可被“继承”并复制。环境变量按照惯例需要大写
(5)清除变量:unset variable
(6)显示所有变量:set
3. 位置参量
(1)位置参量是一组特殊的内置变量,通常被shell脚本用来从命令行接收参数,或被函数用来保存传递给它的参数
(2)执行shell脚本时,用户可以通过命令行向脚本传递信息,跟在脚本后面的用空格隔开的字符串都成为位置参量
(3)脚本使用这些参数时,需要通过位置参量引用:$1表示第一个参数,$2表示第二个参数,从${10}开始,需要用花括号括起来
(4)表示位置参数的个数:$#
(5)以单个字符串显示所有位置参量:$*
(6)脚本运行的当前进程号:$$
(7)表示最后一个后台运行的进程的进程号:$!
(8)显示前面最后一个命令的退出状态,0表示没有错误,其他任何值表示有错误:$?
应用中通常会在关键步骤后判定$?,以确定关键步骤的执行是否正常。尤其是调度系统里需要监控sh返回码
shell脚本的返回码取决于最后一个命令的返回码
(9)如果位置参数中有空格,需要用引号引起
4. 数组
$ arr=(zhangsan lisi wangwu) //数组赋值
$ echo ${arr[0]} //读取数组中第一个元素
$ echo ${arr[*]} //显示数组中的所有字符
$ echo ${#arr[*]} //显示数组中字符个数
$ arr[0]=zhaoliu //更改第一位元素
5. date(时间)
(1)e.g.以年月日时分表的形式展示时间
$ date +%Y/%m/%dT%H:%M:%S
(2)显示时间变量
date1=$(date +%Y/%m/%dT%H:%M:%S)
echo ${date1}
(3)显示两天前的日期
date2=$(date --date='2 days ago' +%Y/%m/%d)
echo ${date2}
(3)显示一天后的日期
date3=$(date --date='-1 days ago' +%Y/%m/%d)
//或
date3=$(date --date='1 days' +%Y/%m/%d)
echo ${date3}
(4)查看日历
$ cal 12 2020
6. 判断
【1】文档类型的判断
(1)判断某个文件是否存在:test -e filename
或:[-e filename]
(2)判断某个文档是否存在且为档案:test -
f filename
(3)判断某个文件是否存在且为目录:test -d filename
【2】文档权限的判断
(1)判断某个文档是否有可读权限:-r
(2)判断某个文档是否有可写权限:-w
(3)判断某个文档是否有可执行权限:-x
【3】两个整数间的判定
(1)两数值相等:-eq
(2)两数值不等:-ne
(3)n1大于n2:-gt
(4)n1小于n2:-lt
【4】判定字符串的数据
(1)判断字符串是否为0,若为空则true:test -z string
(2)判断字符串是否非0莫若为空则false:test -n string
(3)判断str1是否等于str2,若相等则返回true:test str1=str2
(4)判断str1是否不等于str2,若相等则返回false:test str1!=str2
(5)if判断
if...; then...;
elif...;then...;
else...;
fi
7.循环
【1】for循环
(1)
for var in 1 2 3 4 5
do
echo ${var}
done
(2)
num=10
s=0
for((i=0; i<${num}; i=i+1))
do
s=$((${s}+${i}))
done
【2】while循环
while[condition]
do
程序段落
done
【3】until循环
until[condition]
do
程序段落
done
【4】while read line 从文件或命令中逐行读取
(1)
cat file | while read line
do
echo $line
done
(2)cat 'ls ./*.txt' | while read line
do echo $line
done
系统管理
1. 系统信息查看命令
uname:显示系统
uname -r:显示内核版本
cat /proc/cpuinfo:服务器信息
cat /proc/meminfo:查看内存信息
date:显示系统日期起
data -R:显示时区时间
cal 2015:显示某年的日历表
date -s:设置日期和时间(必须要root用户)
2. 磁盘相关
df -lh:查看磁盘的使用情况
dh -sh:预估使用空间的大小
fdisk -l:挂载(只能在root目录下使用)
fsck /dev/sda3:自动修复磁盘(使用root用户)
mount:查看挂载磁盘信息
mount /dev/sdb1 /data01:挂载某个设备
nmount /dev/sdb1:写在磁盘
3. 内存相关
free -m:看系统内存使用情况
M:各个进程内存的详细使用情况
4. linux下软件安装三种方式
① RPM命令
* rpm -qa|grep ××:检查某个软件是否安装
* rpm -e --nodeps ××:卸载已安装的软件
* rpm -ivh ×××.rpm:安装软件
② tar包(不推荐用源码编译方式安装软件)
* tar
* tar -zxvf ××.tar.gz:解压到当前目录
* tar -zxvf ××.tar.gz -C dir:解压到指定目录
* tar -zcvf zzzz.tar.gz dir:压缩
* 源码
* 编译
* zip软件的解压
* unzip ××.zip:解压
* zip ××.zip:解压
③ yum(需要配置源,自动解决软件包依赖关系以及各个软件的安装顺序)
如何设置普通用户的sudo权限
$ su
# vi/etc/sudoers
在第一行细啊添加内容:
beifeng ALL = (root)NOPASSWD: ALL
防火墙
* $ sudo service iptables status:查看防火墙的状态
* $ sudo service iptables stop:关闭防火墙
* $ sudo service iptables start:重启防火墙
* $ sudo service iptables off|on:永久关闭|开启防火墙
* SELINUX 禁用
$ sudo vi /etc/sysconfig/selinux
SELINUX = disabled
sudo reboot
定时任务
在linux中,自带的调度功能,crontab
针对用户:每个用户都可以调度自己的任务
e.g.在beifeng用户下创建定时任务,每分钟执行一次,将时间写入到指定文件中
$ crontab -e
### first crobtab
* /1 * * * * /bin/date >> /home/beifeng/bf-log.txt
列出当前所有的定时任务
$ crontab -l
* /1 * * * * /bin/date >> /home/beifeng/bf-log.txt
删除所有的定时任务
$ crontab -r
crontab的基本定义
语法:* * * * * command
说明:
(1)六个字段之间使用逗号隔开
(2)第一个星:代表执行的分钟(1-59)
每十分钟:*/10
(3)第二个星:代表执行的小时(0-23)
每两小时:*/2
(3)第三个星:代表执行的日(1-31)
(3)第四个星:代表执行的月(1-12)
(3)第五个星:代表执行的是周几(0-6)
e.g.1 每天21:30执行
30 21 * * * cmd01
e.g.2 每个月1,11,21的2:30执行
30 2 1,11,21 * * cmd02
e.g.3 每周六或者周日,1:45执行
45 1 * * 6,0 cmd03
e.g.4 每天20:00至23:00,每半个小时执行一次
0,30 20-23 * * *cmd04
e.g.4 每天每一个小时执行一次
* * /1 * * cmd05
用户和组
linux系统行,创建用户的时候,默认情况会给我们创建一个用户组(名称与用户名称相同)
文件
在linux系统下面,文件类型(常见三种类型)
* 文件:_
* 目录(类似win7下的文件夹):d
* 链接(类似win7下的快捷方式):l
* 创建连接 $ ln
* 软链接 soft link
* 硬链接 hard link
区别:删除链接时是否删除源文件
e.g. 创建一个软链接
$ ln -s file/dir linkName
创建一个硬链接,相当于拷贝一个文件
* 使用场景:保证一致性
文件搜索
* find
find ~/ -name file
find ~/ -name file\*
文件权限:
* 可读 r
* 可写 w
* 可执行(脚本,比如shell脚本) x
* 特殊字符 - 表示没有任何权限
* 权限的数字表示方法
* 二进制数字之和的方式:
r = 4,w = 2, x = 1
文件的归属
* 拥有者 u
* 属于组 g
* 其他人 o
为什么是三组?
因为一个文件对于用户来说,三个部分
* 拥有者
* 所属组
* 其他人
第一部分:
-rw-rw-r--是个字符,代表不容的意义
第一字符:表示文件的类型
后面的九个字符分为三组,不表示此文件针对不同用户的权限关系
第二部分:
* 第一个字符串:文件的拥有者
* 第二个字符串:文件所属组
* man 查询语句作用
*对命令行来说,有自动补全功能,Tab
如何设置文件对不同用户的权限
需要使用root用户
# chmod命令
change mode
e.g:需求:对于同组用户来说,仅仅可读,对于其他用户来说,既不可读,也不可写
① 字母形式修改
# chmod g-w hive-select-log.sql
# chmod o-r hive-select-log.sql
②数值形式修改
# chmod 664 hive-select-log.sql
拷贝文件:
$ cp hive-select-log.sql /home
原文件 目标
改变文件的拥有者和所属组
命令
# chown
# chgrp
如果针对目录
# chown -R
案例:将/home/hive-select-log.sql 拥有者和所属设置为senior用户和senior组可使用一条命令操作完成:
# chown senior: senior /home/hive-select-log.sql
如果针对一个目录设置权限呢?目录中有很多文件,需要同样的权限设置
-R, --recursive 递归
change files and directories recursively
# chmod -R 664 /opt/softwares
文件创建
* 使用touch命令
$ touch test.data
* 使用vi/vim方式
$ vi test.data
* 对文件的内容进行追加
$ echo '001' >>text.txt
* 编辑文件内容 vi/vim
快捷键(在vi查看模式下)
* dd:删除光标所在的行的内容
* ZZ:保存文件内容
* x:表示将光标处的字符删除
* o:在光标的下一行插入数据
查看文件内容的常见方式
* cat:查看文件的全部内容,文件内容比较少时用
* more:翻页查看,文件内容比较大时用
* tail:看文件末尾内容,通常与-f参数连用,适合于查看服务实时动态日志信息
e.g. tail -f abcd.log
tail -200f yyy.log
* head:文件开头,文件格式,查看内容模板样式
文件的拷贝,移动,重命名
* 拷贝:cp source dest
其中dest可以是文件,也可以是一个目录
(1)拷贝一个文件到目录中
$ cp test.txt test-dir
(2)拷贝一个文件的内容到文件中(新文件)
$ cp test.txt cp-tsts.txt
(3)拷贝一个目录
$ cp -r test-dir test-dir2
* 移动或重命名:mv src dest
* 重命名 src和dest在同一目录下
$ mv test-dir/ sub-dir
$ mv test.txt/ test.log
* 移动 src和dest不同一目录下,或者
$ mv test-dir2/ sub-dir/test-dir
文件的删除
$ emdie test-dir
rmdir 注意删除的目录必须是空目录
$ rm -rf src
使用的时候:src最好是绝对路径,确定好以后再删除
创建目录
* mkdir test
* 创建多级目录
$ mkdir -p ~/data/dfs/tmp
Linux用户(多用户)
对于Linux系统安装时,有一个默认的超管管理员用户root
root/123456
虚拟机链接网络,可以是内网或外网,有一个IP地址即可,外面系统(win7)能够远程连接即可
[root@promote Desktop]#
用户名 主机名称 目录名称
最后有两个字符:
#:表示当前用户是root用户,超级管理员用户,对系统进行配置,管理的时候,用配置用户
$:表示用户属于普通用户
查询ip地址:# ifconfig
类似于在win系统下,查看ip地址的命令:ipconfig
自动获取ip地址 --可以连接互联网
自动获取ip地址有时会进行改变,需要设置固定的ip地址
手动设置ip地址以后,虚拟机不能链接到互联网
linux基本命令
清理屏幕:
# clear
创建用户
#useradd beifen
对linux下每个用户,都有密码
#passwd beifen
在linux下,默认情况下,创建一个用户的同时会给用户在系统的目录下创建一个属于自己的用户目录,该目录称为用户主目录
用户名规则:/home/username,用户主目录可以用~进行表示
linux系统的显示主机名称:
1. 查看主机名称
#|$ hostname
2. 设置主机名称
# hostname hadoop-senior.ibeifeng.com
此种方式设置主机名称,仅仅在当前使用没有问题,当重启机器时,主机名称会变化
原因:在linux系统中,系统的配置信息都是来自于文件中,这种设置方式没有写在文件中,所以会变。
永久不会变的方法:
# cat /etc/sysconfig/network
# cat 读取linux系统上文件内容的命令
linux下编辑工具VI
#vi filename
进入编辑插入模式
i --编辑
hostname = hadoop - senior.ibeifrn.com
:wq -- 保存
esc -- 退出
不保存文件
:q!
重启系统
*关机
#halt
*重启
#reboot
#reboot
远程链接工具
辅助进行系统使用,方便操作
四大远程链接工具
远程链接的四要素
*ip地址
*用户名
*密码
*协议ip
*远程命令行工具
SecureCRT
注意事项,当第一次远程链接到linux系统时,进入当前用户的主目录
远程FTP
File Transfer Protocol
远程编辑工具:
NotePad++
ULtraEdit
远程界面工具:
Xmanager4
主机名和ip地址的映射
hadoop - senior.ibeifeng.com
192.169.217.110
配置文件
/etc/hosts
192.168.217.110 hadoop-senior.ibeifeng.com hadoop-senior
win7系统
c:\windows\system32\drivers\etc\host
192.168.217.110 hadoop-senior.ibeifeng.com hadoop-senior
切换用户
#|$ su - beifen
直接切换到root用户 $ su
从管理员用户切换到普通用户不需要密码,从普通用户切换到管理员用户需要密码
显示当前用户所在目录
$|# pwd
当前目录下有哪些文件
ls - list
ls-l
ll - 详细信息
lt - 按时间顺序
ls-a -显示多有目录,多了一些以.开头的文件,隐藏文件
特殊目录标识符:
. :一个点,表示的是当前目录
.. :两个点,表示上级(父亲)目录。
切换目录:
ds dirName
创建文件:
touch
python2 中 range返回列表,相当于python3的xrange
python3 中 range返回可迭代对象
#测试不同种形成list的效率
import timeit
def test1():
li = []
for i in range (10000):
li.append(i)
def test2():
li = []
for i in range (10000):
li += [i]
def test3():
li = [li for i in range(10000)]
def test4():
li = [li for i in range(10000)]