MySQL数据库服务概述

什么是数据库

数据库介绍

  • 什么是数据库?
    存储数据的仓库
  • 数据是什么?
    生活中,视频、音频、图片、文本等都是数据
  • 提供数据库服务的软件有哪些?
软件名 开源 跨平台 厂商
Oracle 甲骨文
MySQL 甲骨文
SQLServer 微软
DB2 IBM
Redis 开源软件
Memcached 开源软件
MongoDB 开源软件
  • 如何决定使用哪种软件搭建数据库服务?
    1)是否要花钱买?
    2)是否跨平台?

  • 专业术语

DB(DataBase)
数据库
依照某种数据模型进行组织并存放到存储器的数据集合

DBMS(DataBase Management System)
数据库管理系统
用来操纵和管理数据库的服务软件

DBS(DataBase System)
数据库系统 :即DB+DBMS
指带有数据库并整合了数据库管理软件的计算机系统

MySQL介绍

起源与发展

  • 应用最广泛的开源数据库软件
    最早隶属于瑞典的MySQL AB公司
    2008年1月,MySQL AB被Sun收购
    2009年4月,Sun被Oracle收购
  • 崭新的开源分支MariaDB
    为应付MySQL可能会闭源的风险而诞生
    由MySQL原作者Windenius主导开发
    与MySQL保持最大的兼容

特点及应用

  • 主要特点
    1.适用于中小规模、关系型数据库系统
    2.支持Linux、Unix、Windows等多种操作系统
    3.支持Python、Java、Perl、PHP等编程语言
  • 典型应用环境
    LAMP平台,与Apache HTTP Server组合
    LNMP平台,与Nginx组合

构建MySQL服务

MySQL安装

  • 基本需求

1.创建CentOS系统虚拟机一台

2.配置IP地址为192.168.4.51

3.关闭firewalld

systemctl stop firewalld

4.禁用SELinux

setenforce 0
vim /etc/sysconfig/selinux
7 SELINUX=permissive

5.拷贝软件mysql-5.7.17.tar
tar包链接提取码:nj8d

6.配置yum源

  • 安装软件

从官网下载RPM包链接在此!
如果有tar包则进行解包安装

[root@host51 opt]# tar  -xvf  mysql-5.7.17.tar
./mysql-community-server-5.7.17-1.el7.x86_64.rpm
##提供服务的软件包
[root@host51 opt]# yum  -y  install  mysql-community*.rpm
[root@host51 opt]# du  -sh  mysql-5.7.17.tar
544M    mysql-5.7.17.tar
[root@host51 opt]# rpm  -qa  |  grep  -i  mysql
mysql-community-common-5.7.17-1.el7.x86_64             //数据库和客户端库共享文件
mysql-community-client-5.7.17-1.el7.x86_64             //客户端应用程序
mysql-community-devel-5.7.17-1.el7.x86_64              //客户端应用程序的库和头文件
mysql-community-test-5.7.17-1.el7.x86_64
mysql-community-libs-compat-5.7.17-1.el7.x86_64        //客户端应用程序的共享兼容库
mysql-community-minimal-debuginfo-5.7.17-1.el7.x86_64
mysql-community-libs-5.7.17-1.el7.x86_64               //MySQL数据库客户端应用程序的共享库
mysql-community-server-5.7.17-1.el7.x86_64
mysql-community-embedded-5.7.17-1.el7.x86_64           //嵌入式函数库
mysql-community-embedded-devel-5.7.17-1.el7.x86_64     //头文件和库文件作为MySQL的嵌入式文件
mysql-community-embedded-compat-5.7.17-1.el7.x86_64    //嵌入式兼容函数库
[root@host51 opt]# rpm  -qa  |  grep  -i  mysql   |  wc  -l
11
  • 启动服务
    首次启动服务,会执行数据初始化
[root@host51 opt]# ls  /var/lib/mysql     #默认的数据库目录,没有启动时该目录内容为空
[root@host51 opt]# systemctl  start  mysqld   #起服务[root@host51 opt]# systemctl  status  mysqld    #查看状态
● mysqld.service - MySQL ServerLoaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)Active: active (running) since 三 2020-02-12 18:22:54 CST; 2h 34min ago[root@host51 opt]# ls  /var/lib/mysql     #再次查看,此时目录内已经加载出数据库的目录
auto.cnf         client-key.pem  ib_logfile1  mysql.sock.lock     server-cert.pem
ca-key.pem       ib_buffer_pool  ibtmp1       performance_schema  server-key.pem
ca.pem           ibdata1         mysql        private_key.pem     sys
client-cert.pem  ib_logfile0     mysql.sock   public_key.pem[root@host51 opt]# systemctl  enable  mysqld    #设置开机自启[root@host51 opt]# ss  -nutlp   |  grep  3306          #查看服务信息
tcp    LISTEN     0      80       :::3306                 :::*                   users:(("mysqld",pid=11724,fd=22))[root@host51 opt]# ps  -C  mysqld              #查看进程PID TTY          TIME CMD11724 ?        00:00:04 mysqld
  • 相关参数
文件 说明
/etc/my.cnf 主配置文件
/var/lib/mysql 数据库目录
默认端口号 3306
进程名 mysqld
传输协议 TCP
进程所有者 mysql
进程所属组 mysql
错误日志文件 /var/log/mysqld.log
[root@host51 opt]# mysql [tab][tab]
mysql                       mysqld                      mysql_secure_installation
mysqladmin                  mysqld-debug                mysqlshow
mysqlbinlog                 mysqld_pre_systemd          mysqlslap
mysqlcheck                  mysqldump                   mysql_ssl_rsa_setup
mysql_client_test           mysqldumpslow               mysqltest
mysql_client_test_embedded  mysqlimport                 mysqltest_embedded
mysql_config                mysql_install_db            mysql_tzinfo_to_sql
mysql_config-64             mysql_plugin                mysql_upgrade
mysql_config_editor         mysqlpump                   mysqlxtest
[root@host51 opt]# ls  /var/log/mysqld.log      显示的进程所有者和所属必须是mysql
/var/log/mysqld.log
[root@host51 opt]#ps aux | grep mysql    #查看进程
mysql     11724  0.0  9.4 1119528 175516 ?      Sl   18:22   0:04 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
root      11914  0.0  0.0 112720   972 pts/0    S+   21:11   0:00 grep --color=auto mysql

MySQL初始配置

  • 初始密码登录
  • 数据库管理员名为root
  • 默认允许root本机连接
  • 首次登录密码在安装软件时随机生成
  • 随机密码存储在日志文件/var/log/mysqld.log里
  • 连接命令mysql -h数据库IP地址(如果连接本机服务器可以不用写-h) -u用户名 -p密码 [数据库名](如果加库名可以直接进入该库,如果不加库名,则在/var/lib/mysql目录中)
[root@host51 opt]# grep  "password" /var/log/mysqld.log             #查看随机密码
2020-02-12T10:22:51.184949Z 1 [Note] A temporary password is generated for root@localhost: r-yF/1/eQ,xk[root@host51 opt]# mysql   -uroot  -p'r-yF/1/eQ,xk'     ##连接
  • 修改root密码

使用alter user 命令修改登录密码
新密码必须满足密码策略
管理员root使用新密码连接服务

[root@host51 opt]# mysql   -uroot  -p'r-yF/1/eQ,xk'
.....
mysql> show   databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
#此时会报错,必须要修改密码才可以进行下一步操作mysql> alter  user  root@"localhost"  identified  by  "123qqq...A";
Query OK, 0 rows affected (0.00 sec)
#修改密码为123qqq...A,密码要必须包含字母数字特殊符号大写字母
[root@host51 opt]# mysql   -uroot  -p'123qqq...A'  #用重新设置的密码再次连接数据库
  • 修改密码策略
策略名称 验证方式
0 or LOW 长度
1 or MEDIUM(默认) 长度;数字,小写/大写和特殊字符
2 or STRONG 长度;数字,小写/大写和特殊字符;字典文件
临时配置
mysql> show  variables  like  "%password%";    #查看变量
mysql> set  global  validate_password_policy=0;  #修改密码策略
mysql> set  global  validate_password_length=6;   #修改密码长度,默认值是8个字符永久配置
[root@host51 opt]#vim   /etc/my.cnf
4   [mysqld]
5   validate_password_policy=0    #添加此行
6   validate_password_length=6    #添加此行

MySQL数据库基本管理

连接MySQL服务

  • 连接方式

客户端连接MySQL服务的方法
①命令行,优点是连接方式通用,更为便捷
②web页面
③安装图形软件
④编写脚本(PHP、Java、Python…)
使用mysql命令
mysql -h服务器IP -u用户名 -p密码 [数据库名]
quit或exit退出

  • 数据存储流程

客户端把数据存储到数据库服务器上的步骤
①连接数据库服务器
②建库 //类似于文件夹
③建表 //类似于文件
④插入记录 //类似于文件内容
⑤断开连接

  • MySQL管理环境

SQL命令使用规则
SQL命令不区分字母大小写(密码、变量值除外)
每条SQL命令以;结束
默认命令不支持Tab键自动补齐
\c或Ctrl+c键终止SQL命令

常用的SQL命令分类
管理数据库使用SQL(结构化查询语言)
DDL 数据定义语言 如:create、alter、drop
DML 数据操作语言 如:insert、update、delete
DCL 数据控制语言 如:grant、revoke
DTL 数据事物语言 如:commit、rollback、savepoint

MySQL基本操作

库管理命令
  • 库 类似于文件夹,用来存储表
  • 可以创建多个库,通过库名区分
  • show databases; //显示已有的库
  • select user(); //显示连接用户
  • use 库名; //切换库
  • select database(); //显示当前所在的库
  • create database 库名; //创建新库
  • show tables; //显示已有的表
  • drop database 库名; //删除表
  • 库名 命名规则
  • 仅可以使用数字、字母、下划线、不能纯数字,也可以用中文
  • 区分字母大小写,具有唯一性
  • 不可以使用指令关键字、特殊字符
mysql> show  databases;                               #查看现有的库
+--------------------+
| Database            |
+--------------------+
| information_schema |                              //信息概要库
| mysql               |                              //授权库
| performance_schema |                              //性能结构库
| sys                  |                              //系统元数据库
+--------------------+
4 rows in set (0.15 sec)mysql> create  database  db1;     #创建库
Query OK, 1 row affected (0.00 sec)
[root@host51 opt]# ls  /var/lib/mysql     #查看数据库,此时多了一个db1目录,就是新创建的库
auto.cnf         client-key.pem  ib_logfile0  mysql.sock          public_key.pem
ca-key.pem       db1             ib_logfile1  mysql.sock.lock     server-cert.pem
ca.pem           ib_buffer_pool  ibtmp1       performance_schema  server-key.pem
client-cert.pem  ibdata1         mysql        private_key.pem     sys
######################################################
/var/lib/mysql中没有information_schema库是因为information_schema是虚拟库,存储在内存中,其他库都存放在硬盘中,只能读取,存放一些服务运行时的参数信息
表管理命令
  • 建表
  • 表存储数据的文件
    Mysql > create table 库名.表名(“字段名1” 类型(宽度),“字段名2” 类型(宽度))DEFAULT CHARSET=utf8 ; //指定中文字符集,可以给字段赋值中文
mysql> create  table  db1.sutinfo(  name  char(10) ,  homeaddr  char(20) );
Query OK, 0 rows affected (0.01 sec)
mysql> show  create  table  db1.user;    #显示建表时的字符集
+-------+---------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                |
+-------+---------------------------------------------------------------------------------------------+
| user  | CREATE TABLE `user` (`name` char(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+---------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)mysql> show  create  table  db1.user \G   #查看表结构,以列表形式展现,末尾不用写分号
*************************** 1. row ***************************Table: user
Create Table: CREATE TABLE `user` (`name` char(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)建表时指定表的字符集,使其可以存储中文
mysql> create  table  db1.user2 (name  char(3)) default  charset=utf8;
Query OK, 0 rows affected (0.06 sec)mysql> show  create  table  db1.user2 \G    #查看user2表结构,以列表形式展现,末尾不用分号
*************************** 1. row ***************************Table: user2
Create Table: CREATE TABLE `user2` (`name` char(3) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)mysql> insert  into  db1.user2  values ("哈哈哈");
Query OK, 1 row affected (0.01 sec)mysql> select  * from  db1.user2;
+-----------+
| name      |
+-----------+
| 哈哈哈    |
+-----------+
1 row in set (0.00 sec)
  • 表 类似于文件
  • desc 库名.表名; //查看表结构
  • drop table 库名.表名; //删除表
mysql> desc  sutinfo;
+----------+----------+------+-----+---------+-------+
| Field    | Type     | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| name     | char(10) | YES  |     | NULL    |       |
| homeaddr | char(20) | YES  |     | NULL    |       |
+----------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)[root@host51 opt]# ls  /var/lib/mysql/db1
db.opt  sutinfo.frm  sutinfo.ibdmysql> drop  table  db1.sutinfo;
Query OK, 0 rows affected (0.01 sec)
记录管理命令
  • 记录类似于文件里的行
  • select * from 库名.表名; //查看表记录
  • insert into 库名.表名 values(值列表); //插入表记录
  • update 库名.表名 set 字段=“值” //修改表记录
  • delete from 表名; //删除表记录
mysql> select  *  from  sutinfo;
Empty set (0.00 sec)
mysql> insert  into  db1.sutinfo  values ("tian","china"),("haha","usa");
mysql> select  *  from  sutinfo;
+------+----------+
| name | homeaddr |
+------+----------+
| tian | china    |
| haha | usa      |
+------+----------+
2 rows in set (0.00 sec)mysql> insert  into  db1.sutinfo  values ("aaa","zzz");        #添加
Query OK, 1 row affected (0.01 sec)mysql> select  *  from  sutinfo;
+------+----------+
| name | homeaddr |
+------+----------+
| tian | china    |
| haha | usa      |
| aaa  | zzz      |
+------+----------+
3 rows in set (0.00 sec)mysql> select  name  from  sutinfo;
+------+
| name |
+------+
| tian |
| haha |
| aaa  |
+------+
3 rows in set (0.00 sec)mysql> update  db1.sutinfo set  homeaddr="bj";      #修改sutinfo表中所有homeaddr为bj
Query OK, 3 rows affected (0.04 sec)
Rows matched: 3  Changed: 3  Warnings: 0mysql> select  *  from  sutinfo;
+------+----------+
| name | homeaddr |
+------+----------+
| tian | bj       |
| haha | bj       |
| aaa  | bj       |
+------+----------+
3 rows in set (0.01 sec)mysql> update  db1.sutinfo set  homeaddr="sz"  where  name="aaa";
Query OK, 1 row affected (0.00 sec)        #修改sutinfo表中name字段为aaa的homeaddr为sz
Rows matched: 1  Changed: 1  Warnings: 0mysql> select  *  from  sutinfo;
+------+----------+
| name | homeaddr |
+------+----------+
| tian | bj       |
| haha | bj       |
| aaa  | sz       |
+------+----------+
3 rows in set (0.00 sec)
mysql> delete  from   db1.sutinfo  where  name="aaa";     #删除sutinfo表中名字叫aaa的字段
Query OK, 1 row affected (0.00 sec)mysql> select  *  from  sutinfo;
+------+----------+
| name | homeaddr |
+------+----------+
| tian | bj       |
| haha | bj       |
+------+----------+
2 rows in set (0.00 sec)mysql> delete  from  db1.sutinfo;     #删除表中所有
Query OK, 2 rows affected (0.00 sec)mysql> select  *  from  sutinfo;      #查看,此时sutinfo表中没有表结构
Empty set (0.00 sec)mysql> desc  sutinfo;
+----------+----------+------+-----+---------+-------+
| Field    | Type     | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| name     | char(10) | YES  |     | NULL    |       |
| homeaddr | char(20) | YES  |     | NULL    |       |
+----------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)mysql> drop  table  db1.sutinfo;
Query OK, 0 rows affected (0.01 sec)mysql> show  tables;
Empty set (0.00 sec)

MySQL数据类型

常见的信息种类

  • 数值型:体重、身高、成绩、工资
  • 字符型:姓名、工作单位、通信地址
  • 枚举型:兴趣爱好、性别、专业
  • 日期时间型:出生日期、注册时间

字符类型

定长char

  • 定长:char(字符个数)
  • 最大字符个数255个
  • 不够指定字符个数时在右边用空格补全
  • 字符个数超出时,无法写入数据

变长varchar

  • 变长:varchar(字符个数)
  • 按数据实际大小分配存储空间
  • 字符个数超出时,无法写入数据
  • 大文本类型:text/blob
  • 字符数大于65535存储时使用
mysql> create  table  db1.t1  (-> name  char(5),-> class  char(7),-> email  varchar(50) -> );
Query OK, 0 rows affected (0.06 sec)mysql> desc  t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | char(5)     | YES  |     | NULL    |       |
| class | char(7)     | YES  |     | NULL    |       |
| email | varchar(50) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)mysql> insert  into db1.t1 values(-> "aaa","bbb","ccc");
Query OK, 1 row affected (0.00 sec)mysql> insert  into db1.t1 values( "zzz","yyy","xxx");
Query OK, 1 row affected (0.00 sec)mysql> select *  from  db1.t1;
+------+-------+-------+
| name | class | email |
+------+-------+-------+
| aaa  | bbb   | ccc   |
| zzz  | yyy   | xxx   |
+------+-------+-------+
2 rows in set (0.00 sec)

数值类型

整数型

  • 只能存储整数
类型 名称 有符号范围 无符号范围
tinyint 微小整数 -128~127 0~255
smallint 小整数 -327678~32767 0~65535
mediumint 中整型 -2 23~223-1 0~224-1
int 大整型 -231~231-1 0~224-1
bigint 极大整型 -263~263-1 0~264-1
unsigned 使用无符号存储范围
mysql> create table db1.t2(name char(10) , age tinyint unsigned);   #name字段不超过10个字符,age字段为微笑整型,使用无符号的存储范围
Query OK, 0 rows affected (0.06 sec)mysql> insert into  db1.t2 values ("bob" , 256);
ERROR 1264 (22003): Out of range value for column 'age' at row 1    #会报错,超出取值范围mysql> insert into  db1.t2 values ("bob" , 25);
Query OK, 1 row affected (0.00 sec)mysql> insert into  db1.t2 values ("tom" , -1);
ERROR 1264 (22003): Out of range value for column 'age' at row 1    #会报错,age字段的取值范围不在规定范围内mysql> insert into  db1.t2 values ("tom" , 1);
Query OK, 1 row affected (0.01 sec)mysql> insert into  db1.t2 values ("jerry" , 19.5);      #整数型也支持小数,四舍五入
Query OK, 1 row affected (0.00 sec)mysql> insert into  db1.t2 values ("jack" , 19.4);
Query OK, 1 row affected (0.01 sec)mysql> select  *  from  db1.t2;
+-------+------+
| name  | age  |
+-------+------+
| bob   |   25 |
| tom   |    1 |
| jerry |   20 |
| jack  |   19 |
+-------+------+
4 rows in set (0.00 sec)

浮点型

  • 浮点型
  • 格式1:字段名 类型;
  • 格式2:字段名 类型(总宽度,小数位数 )
类型 名称 有符号范围 无符号范围
float 单精度 -3.4028323466E+38 到 -1.175494351E-38 1.175494351E-38 到 3.402823466E+38
double 双精度 -1.7976931348623157E+308 到 -2.2250738585072014E-308 2.2250738585072014E-308 到 1.7976931348623157E+308

单精度和双精度的区别
双精度比单精度表示的位数大 精确的位数多
简单地说, float表示的小数点位数少,double能表示的小数点位数多
单精度在32位机器上用4个字节存储,而double则用8个字节存储,双精度比单精度占用空间大

mysql> insert  into  db1.t3  value  ("aaa" , 4300);mysql> insert  into  db1.t3  value  ("tian" , 18739.22);
Query OK, 1 row affected (0.00 sec)mysql> select  *  from  db1.t3;
+------+----------+
| name | money    |
+------+----------+
| aaa  |  4300.00 |
| tian | 18739.22 |
+------+----------+
2 rows in set (0.00 sec)

日期时间类型

  • 日期时间 datetime

范围:1000-01-01 00:00:00~9999-12-31 23:59:59
格式:yyyymmddhhmmss

  • 日期时间 timestamp

范围:1970-01-01 00:00:00~2038-01-19 00:00:00
格式:yyyymmddhhmmss

  • 日期 date

0001-01-01~9999-12-31
yyyymmdd

  • 年 year

范围:1901~2155
格式:yyyy

  • 时间 time

格式:HH:MM:SS

  • 关于日期时间字段

当未给timestap字段赋值时,自动以当前系统时间赋值,而datetime值为NULL(空)

  • year 类型

要求使用4位数赋值
当使用2位数赋值时:
01~69视为 2001~2069
70~99视为 1970~1999

日期时间类型:
年 ---------------------- year---------YYYY---------2020---------出生年份
日期-------------------- date--------- YYYYMMDD-------20200214----- 聚会时间
时间(24小时制)------- time---- HHMMSS------- 100000------ 聚会结束时间
日期时间----------------- datetime 和 timestamp-----YYYYMMDDHHMMSS

mysql> create  table  db1.t5 (name  char(15) , csnf   year  ,  birthday  date , up_class time ,party  datetime );
Query OK, 0 rows affected (0.02 sec)mysql> desc  db1.t5;
+----------+----------+------+-----+---------+-------+
| Field    | Type     | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| name     | char(15) | YES  |     | NULL    |       |
| csnf     | year(4)  | YES  |     | NULL    |       |
| birthday | date     | YES  |     | NULL    |       |
| up_class | time     | YES  |     | NULL    |       |
| party    | datetime | YES  |     | NULL    |       |
+----------+----------+------+-----+---------+-------+
5 rows in set (0.04 sec)mysql> insert  into  db1.t5  values ( "bob" ,  1990  , 20200120  ,  093000  ,  20200214180000  );
Query OK, 1 row affected (0.00 sec)mysql> select  *  from  db1.t5;
+------+------+------------+----------+---------------------+
| name | csnf | birthday   | up_class | party               |
+------+------+------------+----------+---------------------+
| bob  | 1990 | 2020-01-20 | 09:30:00 | 2020-02-14 18:00:00 |
+------+------+------------+----------+---------------------+
1 row in set (0.00 sec)
  • 时间函数
  • 可以使用时间函数给字段赋值
类型 用途
curtime() 获取当前系统的时间
curdate() 获取当前的系统日期
now() 获取当前系统日期和时间
year() 获取年
month() 获取月
day() 获取日
date() 获取日期
time() 获取时间

使用命令的值给日期时间类型字段赋值:

Linux命令行查当前时间
[root@host51 ~]# date  +%F
2020-02-14
[root@host51 ~]# date  +%Y
2020
[root@host51 ~]# date
2020年 02月 14日 星期五 09:36:23 CSTmysql> select  curdate();      #获取当前日期
+------------+
| curdate()  |
+------------+
| 2020-02-14 |
+------------+
1 row in set (0.06 sec)mysql> select  curtime();       #获取当前时间
+-----------+
| curtime() |
+-----------+
| 09:36:54  |
+-----------+
1 row in set (0.00 sec)mysql> select  now();          #查看当前日期和时间
+---------------------+
| now()               |
+---------------------+
| 2020-02-14 09:37:00 |
+---------------------+
1 row in set (0.00 sec)mysql> select  month(now());     #获取当前日期中的月份
+--------------+
| month(now()) |
+--------------+
|            2 |
+--------------+
1 row in set (0.00 sec)mysql> select  day(now());      #获取当前日
+------------+
| day(now()) |
+------------+
|         14 |
+------------+
1 row in set (0.00 sec)mysql> select  time(now());       #获取当前时间
+-------------+
| time(now()) |
+-------------+
| 09:37:46    |
+-------------+
1 row in set (0.00 sec)mysql> select  year(now());     #获取当前年份
+-------------+
| year(now()) |
+-------------+
|        2020 |
+-------------+
1 row in set (0.00 sec)mysql> select  date(now());     #获取当前系统日期
+-------------+
| date(now()) |
+-------------+
| 2020-02-14  |
+-------------+
1 row in set (0.00 sec)mysql> insert  into  db1.t5  values  ("jerry"  ,  year(now()) ,  date(now()) ,time(now()),now()  );
Query OK, 1 row affected (0.00 sec)mysql> select  *  from  db1.t5;
+-------+------+------------+----------+---------------------+
| name  | csnf | birthday   | up_class | party               |
+-------+------+------------+----------+---------------------+
| bob   | 1990 | 2020-01-20 | 09:30:00 | 2020-02-14 18:00:00 |
| jerry | 2020 | 2020-02-14 | 09:40:55 | 2020-02-14 09:40:55 |
+-------+------+------------+----------+---------------------+

year类型:

mysql> insert  into  db1.t5  values ("tom"  ,  81  ,  date(now())  ,time(now())  ,  now()   );
Query OK, 1 row affected (0.01 sec)mysql> insert  into  db1.t5  values ("john"  ,  53  ,  date(now())  ,time(now())  ,  now()   );
Query OK, 1 row affected (0.01 sec)mysql> select  *  from  db1.t5;
+-------+------+------------+----------+---------------------+
| name  | csnf | birthday   | up_class | party               |
+-------+------+------------+----------+---------------------+
| bob   | 1990 | 2020-01-20 | 09:30:00 | 2020-02-14 18:00:00 |
| jerry | 2020 | 2020-02-14 | 09:40:55 | 2020-02-14 09:40:55 |
| tom   | 1981 | 2020-02-14 | 09:52:23 | 2020-02-14 09:52:23 |
| john  | 2053 | 2020-02-14 | 09:52:46 | 2020-02-14 09:52:46 |
+-------+------+------------+----------+---------------------+
4 rows in set (0.00 sec)

日期时间字段datetime和timestap:

mysql> create table  db1.t6 (name  char(10) , meeting  datetime  ,party  timestamp );
Query OK, 0 rows affected (0.02 sec)mysql> insert  into  db1.t6  values ("tian" , 20200214130000  , 20200214183000 );
Query OK, 1 row affected (0.00 sec)mysql> desc  db1.t6;
+---------+-----------+------+-----+-------------------+-----------------------------+
| Field   | Type      | Null | Key | Default           | Extra                       |
+---------+-----------+------+-----+-------------------+-----------------------------+
| name    | char(10)  | YES  |     | NULL              |                             |
| meeting | datetime  | YES  |     | NULL              |                             |
| party   | timestamp | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+---------+-----------+------+-----+-------------------+-----------------------------+
3 rows in set (0.00 sec)mysql> select  *  from  db1.t6;
+------+---------------------+---------------------+
| name | meeting             | party               |
+------+---------------------+---------------------+
| tian | 2020-02-14 13:00:00 | 2020-02-14 18:30:00 |
+------+---------------------+---------------------+
1 row in set (0.00 sec)mysql> insert into  db1.t6(name,meeting)  values ("nb" , 20200214140000);          #此时没有给party字段赋值,直接获取当前系统时间赋值给party字段
Query OK, 1 row affected (0.00 sec)mysql> select  *  from  db1.t6;
+------+---------------------+---------------------+
| name | meeting             | party               |
+------+---------------------+---------------------+
| tian | 2020-02-14 13:00:00 | 2020-02-14 18:30:00 |
| nb   | 2020-02-14 14:00:00 | 2020-02-14 10:03:53 |
+------+---------------------+---------------------+
2 rows in set (0.00 sec)mysql> insert  into  db1.t6(name ,party )   values ("wk" , 20200214203000 );      #此时没有给meeting字段赋值,所以当前meeting值datetime为空
Query OK, 1 row affected (0.01 sec)mysql> select  *  from  db1.t6;
+------+---------------------+---------------------+
| name | meeting             | party               |
+------+---------------------+---------------------+
| tian | 2020-02-14 13:00:00 | 2020-02-14 18:30:00 |
| nb   | 2020-02-14 14:00:00 | 2020-02-14 10:03:53 |
| wk   | NULL                | 2020-02-14 20:30:00 |
+------+---------------------+---------------------+
3 rows in set (0.00 sec)

枚举类型

  • enum 单选:

格式:字段名 enum(值1,值2,值N)
仅能选择一个值
字段值必须在列表里选择

  • set 多选

格式:字段名 set(值1,值2,值N)
选择一个或多个值
字段值必须在列表里选择

mysql> create  table  db1.t7 (name  char(15)  ,sex  enum("boy" , "girl")  , likes  set("eat" , "game"  , "money" , "it"));
Query OK, 0 rows affected (0.01 sec)mysql> desc  db1.t7;
+-------+--------------------------------+------+-----+---------+-------+
| Field | Type                           | Null | Key | Default | Extra |
+-------+--------------------------------+------+-----+---------+-------+
| name  | char(15)                       | YES  |     | NULL    |       |
| sex   | enum('boy','girl')             | YES  |     | NULL    |       |
| likes | set('eat','game','money','it') | YES  |     | NULL    |       |
+-------+--------------------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)mysql> insert  into db1.t7  values ("nb" , "boy" ,"eat,it");
Query OK, 1 row affected (0.00 sec)mysql> insert  into db1.t7  values ("wk" , "man" ,"eat,it");     #报错,sex字段只能选择“boy”“girl”
ERROR 1265 (01000): Data truncated for column 'sex' at row 1
mysql> insert  into db1.t7  values ("wk" , "girl" ,"it");
Query OK, 1 row affected (0.01 sec)mysql> desc  db1.t7;
+-------+--------------------------------+------+-----+---------+-------+
| Field | Type                           | Null | Key | Default | Extra |
+-------+--------------------------------+------+-----+---------+-------+
| name  | char(15)                       | YES  |     | NULL    |       |
| sex   | enum('boy','girl')             | YES  |     | NULL    |       |
| likes | set('eat','game','money','it') | YES  |     | NULL    |       |
+-------+--------------------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
like不能用做字段名,like是mysql的命令!!!!

Mysql数据库基础(一)基本概述、构建服务、基本管理、数据类型相关推荐

  1. 【笔记】——MySQL数据库——基础知识-——快速回顾——(加深印象篇)

    文章目录 前言 一.MySQL是什么? 二.数据库的常见概念 三.数据库存储数据的特点 四.SQL语言的分类 1.)DML 2.)DDL 3.)DCL 五.数据库的基本操作 5.1.)创建数据库 5. ...

  2. MySQL数据库 --基础

    MySQL数据库 --基础 一.数据库介绍 1.1 数据库管理系统 数据库管理系统(DataBase Management System,DBMS)由一个互相关联的数据的集合和一组用以访问这些数据的程 ...

  3. mysql数据库基础语句讲解

    mysql数据库基础讲解 一.数据库客户端命令 二.数据库基础sql语句 三.数据表基础语句 四.数据的增删改查(重点) 切记sql语句之后一定要加 ; 一.数据库客户端命令 1.mysql: mys ...

  4. Linux Mysql 数据库基础

    目录 Linux Mysql 数据库基础 一.数据库 数据库简介 数据库的分类 数据库的发展史 数据库系统发展阶段 DBMS 数据库管理系统 数据库管理系统的优点 数据库管理系统的基本功能 数据库系统 ...

  5. MySQL数据库基础01 韩顺平 自学笔记

    MySQL数据库基础 数据库简单原理图 连接Mysql 启动和关闭mysql服务 连接Mysql指令 数据库三层结构 数据在数据库中的存储方式 SQL语句的分类 简单通过Java操作Mysql数据库 ...

  6. MySQL 数据库基础(1)

    MySQL 数据库基础(1) 前言 一.使用MySQL数据库 1.常见的数据类型 2.查看数据库结构 3.SQL语句 二.创建及删除库和表 1.创建新的数据库 2.创建新的表 3.删除指定的数据表 4 ...

  7. MySQL数据库基础(一)

    MySQL数据库基础 一.数据库的基本概念 1.1数据的时代 1.2 数据库的发展史 1.2.1 文件管理系统的缺点 1.3 DBMS 数据库管理系统 1.4 数据库管理系统的优点 1.5数据库管理系 ...

  8. MYSQL数据库周德伟教程后题_《MySQL数据库基础实例教程》编者:周德伟,覃国蓉著【摘要 书评 在线阅读】-苏宁易购图书...

    商品参数 作者: 编者:周德伟,覃国蓉著 出版社:人民邮电出版社 出版时间:2017-08-01 版次:1 开本:16开 装帧:平装 ISBN:9787115461872 版权提供:人民邮电出版社 基 ...

  9. php大牛额城战笔记,PHP语言大牛开发笔记(8)——MySQL数据库基础回顾[2]

    本文主要向大家介绍了PHP语言大牛开发笔记(8)--MySQL数据库基础回顾[2],通过具体的实例向大家展示,希望对大家学习php语言有所帮助. 一.数据表 为了确保数据的完整性和一致性,在创建表时指 ...

  10. 1.0 MySQL数据库基础知识

    MySQL数据库基础知识 MYSQL介绍 MySQL分支版本的发展 MySQL. Oracle. SQLServer的市场区别 MYSQL数据库使用上的结构 MYSQL体系架构图 MYSQL体系架构- ...

最新文章

  1. RDKit | 基于分子形状的比对
  2. Druid如何自动根据URL自动识别DriverClass的
  3. 视频会议H.323协议SIP协议
  4. java文件客户端下载_使用Java写一个minio的客户端上传下载文件
  5. 网站页首可关闭广告条
  6. php实现中间件6,说一说ThinkPHP6中五花八门的中间件_PHP开发框架教程
  7. hough变换连接边缘matlab,边缘检测与Hough变换实验报告 Matlab - 图文
  8. zzulioj1111: 多个整数的逆序输出(函数专题)
  9. windows下shutdown/up oracle数据库的批处理
  10. Android 常用adb shell 命令
  11. python基础语法学习常见小问题
  12. 42. Element hasChildNodes() 方法
  13. 如何使用Beyond Compare中心窗格
  14. Excel作图-显示多层分类轴标签
  15. api 3.0 个性化地图缩放时出现白色的底图,然而 api GL缩放时显示正常,调用api 3.0 接口时,如何避免地图缩放时出现白色底图
  16. 基于FFmpeg4.1的视频播放器的极简实现(音视频学习笔记四)
  17. 实用的费曼学习法 | 一些思考
  18. 无线网卡(RTL8188EU)驱动编译、使用DHCP配置无线网络(1
  19. 要求树根像果实一样作贡献,就只好把它做柴烧了
  20. linux嵌入式vi使用,嵌入式Linux编辑器vi最基本的使用.doc

热门文章

  1. 利用Maya进行论文中网格动画数据的渲染
  2. 还原JavaScript的真实历史~
  3. C++和MATLAB混合编程-DLL篇
  4. 如何用Python实现八大排序算法
  5. 【OpenCV3】彩色映射——cv::applyColorMap()与cv::LUT()详解
  6. Mybatis的第三章动态sql总结
  7. Windows 10 Edge 浏览器续航对比火狐/Chrome
  8. 【转】简单的java缓存实现
  9. apache的动态编译和静态编译
  10. 【机器学习】LBP特征融合最大灰度差、平均灰度、平均梯度改善SVM检测效果