我们知道MySQL的主要组件主要是由服务端(mysqld)和客户端(mysql)组成的。它们都共用一个配置文件(通常叫做my.cnf),这个配置文件很独特,它需要使用中括号括起来标明是为哪种组件使用的,例如[mysql]下面的指令就表示为客户端配置的参数,如果[mysqld]下面的指令就表示为服务端配置的参数。其实MySQL的客户端组件有很多个,本篇博客是用的mysql命令只是MySQL客户端之一,其他常见的客户端如:Navicat for Mysql,EMSSQL ManagerforMySQL等等。
在Linux操作系统中我还是推荐使用mysql客户端的,如果在windows的话我推荐使用Navicat for Mysql,mysql在Linux连接服务器是很简单,我们用mysql连接数据库的时候通常会用到三个参数,分别是“-u(指定登录数据库的用户名)”,“-h(指定登录数据库的主机名)”,“-p(指定登录数据库的密码)”,“-e(指定SQL命令即可执行)”等等。
http://dev.mysql.com/downloads/mysql/ #Mysql官网
主要特点:
适用于中小规模、关系型数据库系统
支持Linux/Unix、Windows等多种操作系统
使用C和C++编写、可移植性强
通过API支持python/java/perl/PHP等语言
典型应用环境:
LAMP平台,与Apache HTTP Server组合
LNMP平台,与Nginx组合
#查看软件包大小
#解压mysql整合包
#yum安装自动解决mysql需要的依赖包。
#主配置文件
#数据库目录,数据库没起服务之前是空,起完服务才有初始数据,初始数据不能删除,不然服务起不来
。#启动服务,服务名mysqld
#查看服务监听的端口
#服务起来查进程。
#查看随机生成的root管理密码
ei4lMn#-)uwe
#这里为随机生成的管理密码。
#填入前一步获得的随机密码,验证成功即可进入“mysql> ”环境:,但是要注意随机密码有特殊符号要用双引号引起来。
#输入查看库的命令,无法完成
validate_password_policy与validate_password_length。validate_password_length默认值为8,最小值为4,如果你显性指定validate_password_length的值小于4,尽管不会报错,但validate_password_length的值将设为4。
mysql> show variables like “% password%”; #查看密码策略
±--------------------------------------±-------+
| Variable_name | Value | #变量名
±--------------------------------------±-------+
| default_password_lifetime | 0 | #默认密码的生存期
| disconnect_on_expired_password | ON | #密码过期时断开连接
| log_builtin_as_identified_by_password | OFF | #将内置的日志记录为
密码标识的日志
| mysql_native_password_proxy_users | OFF |
| old_passwords | 0 |
| report_password | |
| sha256_password_proxy_users | OFF |
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 8 | #密码长度
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | MEDIUM | #密码策略
| validate_password_special_char_count | 1 |
±--------------------------------------±-------+
14 rows in set (0.28 sec)
validate_password_policy验证密码策略
0 or LOW 长度 1 or MEDIUM(默认) 长度;数字;小写/大写、和特殊字符 2 or STRONG
长度;数字、小写/大写和特殊字符;字典文件
mysql> set global validate_password_policy=0; #只验证长度
mysql> set global validate_password_length=6; #修改密码长度,默认值是8个字符
mysql> alter user user() identified by “123456”; #修改登入密码
上述操作的结果是——更改数据库用户root从本机访问时的密码,设为123456。
[root@dba5 ~]# mysql -uroot -p123456 #用新密码登录
[root@dba5 ~]# mysql -h127.0.0.1 -uroot -p123456
#查看现有的库
#信息概要库
#授权库
#性能结构库
#系统元数据库
#切换到库
#确认当前所在的库
#新建名为nsd1902的库
#删除名为nsd1902的库
#显示当前数据库已有的表
#显示已有的库
#存放数据库用户的表
数据库的命名规则: 可以使用数字、字母、下划线,但不能使用纯数字 区分大小写,具有唯一性 不可使用指令关键字,特殊字符
表管理命令
新建指定名称的表:
create table 库名.表名( 字段1 字段类型(宽度)约束条件,字段2 字段类型(宽度)约束条件,…字段名N 字段类型(宽度)约束条件);
“表” 类似于系统的文件
desc 表名; #查看表结构
select * from 表名; #查看表记录
drop table 表名; #删除表
记录管理命令
“记录” 类似于文件里的行
select * from 表名; #查看表记录
insert into 表名 values(值列表); #插入表记录
update 表名 set 字段=值; #修改表记录
delete from 表名; #删除表记录
常见的信息种类
数值型:体重、身高、成绩、工资
字符型:姓名、工作单位、通信住址
枚举型:兴趣爱好、性别
日期时间型:出生日期、注册时间
类型 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1字节 -128~127 0~255 微小整数
SMALLINT 2字节 -32768~32767 0~65535 小整数
MEDIUMINT 3字节 -2的23次方~2的23次方减1 0~2的24次方减1 中整数
INT 4字节 -2的31次方~2的31次方减1 0~2的32次方减1 大整数
BIGINT 8字节 -2的63次方~2的63次方减1 0~2的64次方减1 极大整数
FLOAT 4字节 单精度浮点数
DOUBLE 8字节 双精度浮点数
DECIMAL 对DECIMAL(M,D),其中M为有效位数、D为小数位数、M应大于D、占用M+2字节
unsigned 使用无符号存储范围
浮点型
关于浮点型字段
定义格式:float(总宽度,小数位数)
当字段值与类型不匹配时,字段值作为0处理
数值超出范围时,仅保存最大/最小值
字符类型
定长:char(字符数)
最大长度255字符
不够指定字符数时在右边用空格补齐
字符数断超出时,无法写入数据 #意思就是设定多少就是多少,不能超出设定的字符数
变长:varchar(字符数)
按数据实际大小分配存储空间
字符数断超出时,无法写入数据 #意思就是设定多少就是多少,不能超出设定的字符数
大文本类型:text/blob
字符数大于65535存储时使用
日期时间类型
日期时间,DATETIME
占用8个字节
范围:1000-01-01 00:00:00.000000~9999-12-31 23:59:59.999999
日期时间,TIMESTAMP
占用4个字节
范围:1970-01-01 00:00:00.000000~2038-01-19 03:14:07.999999
日期,DATE
占用4个字节
范围:0001-01-01~9999-12-31
年份,YEAR
占用1个字节
范围:1901~2155
时间,TIME
占用3个字节
格式:HH:MM:SS
关于日期时间字段
当未给TIMESTAMP字段赋值时,自动以当前系统时间赋值,而DATETIME字段默认赋值为NULL #null为空的意思
YEAR年份的处理
默认用4位数字表示
当只用2位数字赋值时,
0169视为20012069
7099视为19701999
创建一个人员表:包括姓名,入职年份,生日,工作时间段
mysql> create table nsd(
-> name varchar(10),
-> starty year,
-> birthe date,
-> ttime1 time,
-> ttime2 time
-> );
mysql> show tables;
±------------------+
| Tables_in_nsd1902 |
±------------------+
| nsd |
±------------------+
1 row in set (0.00 sec)
时间函数
now() 获取系统当前日期和时间
year() 获取指定时间中的年份
day() 获取指定时间中的日期
sleep(N) 休眠N秒
curdate() 获取当前的系统时间
curtime() 获取当前的系统时刻
month() 获取指定时间中的月份
date() 获取指定时间中的日期
time() 获取指定时间中的时刻
无需库、表,可直接调用
使用select指令输出函数结果
mysql> desc user\G #查看表结构,以列表形式展现,末尾不用分号
mysql> desc user; #查看表结构,以表格形式展现末尾需要有分号
上述操作中,当引用非当前库中的表时,可以用“库名.表名”的形式。比如,切换为mysql库再执行“desc columns_priv;”,与以下操作的效果是相同的:
mysql> desc mysql.user; #引用表的绝对路径
新建nsd表:
mysql> create table nsd(
-> name char(16)not null,
-> password char(10)default"",
-> primary key(name)
-> );
mysql>创建表nsd(
->名称字符(16)不为空,
->密码字符(10)默认“”,
->主键(名称)
);
mysql> show tables; #查看新创建的表
±------------------+
| Tables_in_nsd1902 |
±------------------+
| nsd |
±------------------+
mysql> desc nsd; #查看nsd表的字段结构
±---------±---------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±---------±---------±-----±----±--------±------+
| name | char(16) | NO | PRI | NULL | |
| password | char(10) | YES | | | |
±---------±---------±-----±----±--------±------+
mysql> drop table nsd1902.nsd; #删除指定的表