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

MySQL数据库服务概述

什么是数据库

数据库介绍

  • 什么是数据库?
    存储数据的仓库
  • 数据是什么?
    生活中,视频、音频、图片、文本等都是数据
  • 提供数据库服务的软件有哪些?
软件名开源跨平台厂商
Oracle甲骨文
MySQL甲骨文
SQLServer微软
DB2IBM
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 Server
   Loaded: 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 CMD
 11724 ?        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.ibd

mysql> 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: 0

mysql> 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: 0

mysql> 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~1270~255
smallint小整数-327678~327670~65535
mediumint中整型-2 23~223-10~224-1
int大整型-231~231-10~224-1
bigint极大整型-263~263-10~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-381.175494351E-38 到 3.402823466E+38
double双精度-1.7976931348623157E+308 到 -2.2250738585072014E-3082.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 CST

mysql> 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的命令!!!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值