MySQL数据类型以及基本使用详解

一.MySQL服务器的主要组件

我们知道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命令即可执行)”等等。

构建MySQL服务器

http://dev.mysql.com/downloads/mysql/ #Mysql官网

MySQL的特点及应用

主要特点:
适用于中小规模、关系型数据库系统
支持Linux/Unix、Windows等多种操作系统
使用C和C++编写、可移植性强
通过API支持python/java/perl/PHP等语言
典型应用环境:
LAMP平台,与Apache HTTP Server组合
LNMP平台,与Nginx组合

  • 搭建数据库服务器
  • 环境说明:装mysql之前系统是没有mariadb的软件包,因为这两种数据库提供的是一种服务。
    [root@dba5 ~]# du -sh mysql-5.7.17.tar #查看软件包大小
    544M mysql-5.7.17.tar
    [root@dba5 ~]# tar -xf mysql-5.7.17.tar #解包
    [root@dba5 ~]# tar -xvf mysql-5.7.17.tar    #解压mysql整合包
    ./mysql-community-client-5.7.17-1.el7.x86_64.rpm
    ./mysql-community-common-5.7.17-1.el7.x86_64.rpm
    ./mysql-community-devel-5.7.17-1.el7.x86_64.rpm
    ./mysql-community-embedded-5.7.17-1.el7.x86_64.rpm
    ./mysql-community-embedded-compat-5.7.17-1.el7.x86_64.rpm
    ./mysql-community-embedded-devel-5.7.17-1.el7.x86_64.rpm
    ./mysql-community-libs-5.7.17-1.el7.x86_64.rpm
    ./mysql-community-libs-compat-5.7.17-1.el7.x86_64.rpm
    ./mysql-community-minimal-debuginfo-5.7.17-1.el7.x86_64.rpm
    ./mysql-community-server-5.7.17-1.el7.x86_64.rpm
    ./mysql-community-test-5.7.17-1.el7.x86_64.rpm
    [root@dba5 ~]# yum -y install mysql-community-*.rpm #yum安装自动解决mysql需要的依赖包。
    /etc/my.cnf #主配置文件
    /var/lib/mysql #数据库目录,数据库没起服务之前是空,起完服务才有初始数据,初始数据不能删除,不然服务起不来
  • 5.7版本以后,启动mysqld服务首次登录需要密码,为root生成的随机密码在错误日志文件/var/log/mysqld.log
  • 不创建MySQL匿名账户。
  • 不创建测试数据库。
  • 在安装完成后你需要去启动服务,以root身份,用初始的随机密码来进行连接,并且在连接后选择一个新的密码。在完成这些操作之前,root用户无法做其他的任何事情。
    systemctl start mysqld #启动服务,服务名mysqld
    [root@dba0 ~]# netstat -utnlp | grep mysqld #查看服务监听的端口
  • 默认的端口是3306
  • [root@dba5 ~]# ps -C mysqld #服务起来查进程。
  • [root@dba0 ~]# grep password /var/log/mysqld.log    #查看随机生成的root管理密码
    2019-05-05T12:41:25.527526Z 1 [Note] A temporary password is generated for root@localhost: ei4lMn#-)uwe    #这里为随机生成的管理密码。
    [root@dba5 ~]# mysql -hlocalhost -uroot -p"ei4lMn#-)uwe" #填入前一步获得的随机密码,验证成功即可进入“mysql> ”环境:,但是要注意随机密码有特殊符号要用双引号引起来。
  • 用该密码登录到服务端后,必须马上修改密码,不然会报如下错误:
    mysql> show databases; #输入查看库的命令,无法完成
    ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
  • 连接MysQl服务器
  1. 使用mysql命令
    mysql [-h服务器 -u用户名 -p密码 数据库]
    \h #查看帮助
    mysql> alter user root@“localhost"identified by"123qqq…A”; #修改密码,密码必须符合四分之三原则
    quit或exit退出。
  2. 修改密码策略
    这个其实与validate_password_policy的值有关,默认为1,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。如果我们不希望密码设置的那么复杂,需要修改两个全局参数:

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 #用新密码登录

  • 连接MySQL服务器时,最基本的用法是通过 -u 选项指定用户名、-p指定密码。密码可以写在命令行(如果不写,则出现交互,要求用户输入)
    默认情况下,msyql命令会连接本机的MySQL服务。但在需要的时候,可以通过 -h 选项指定远程主机

[root@dba5 ~]# mysql -h127.0.0.1 -uroot -p123456

  1. 查看/删除/创建库的相关操作
    以root用户登入“mysql> ”环境后,可以执行各种MySQL指令、SQL指令。
    操作指令不区分大小写(库名/表名、密码、变量值等除外)。
    每条SQL指令以 ; 结束或分隔。
    不支持 Tab 键自动补齐。
    \c 可废弃当前编写错的操作指令。
    常用的SQL操作指令
    DDL 数据定义语言 (create 、alter、drop desc)
    DML 数据操作语言(insert 、update、delete、select)
    DCL 数据控制语言 (grant、revoke)
    DTL 数据事物语言 (commit、rollback、savepoink)
    mysql> show databases; #查看现有的库
    ±-------------------+
    | Database |
    ±-------------------+
    | information_schema | #信息概要库
    | mysql | #授权库
    | performance_schema | #性能结构库
    | sys | #系统元数据库
    ±-------------------+
    mysql> use 库名; #切换到库
    mysql> select database(); #确认当前所在的库
    mysql> create database nsd1902; #新建名为nsd1902的库
    mysql> drop database nsd1902; #删除名为nsd1902的库
    mysql> show tables; #显示当前数据库已有的表
    show databases; #显示已有的库
    user #存放数据库用户的表

数据库的命名规则: 可以使用数字、字母、下划线,但不能使用纯数字 区分大小写,具有唯一性 不可使用指令关键字,特殊字符

  • 表管理命令
    新建指定名称的表:
    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; #删除指定的表

你可能感兴趣的:(mysql,致力于明天的运维技术生涯)