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 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~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 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的命令!!!!