一、MySQL概述
1、什么是数据库 ?
答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库
2、什么是 MySQL、Oracle、SQLite、Access、MS SQL Server等 ?
答:他们均是一个软件,都有两个主要的功能:
a. 将数据保存到文件或内存
b. 接收特定的命令,然后对文件进行相应的操作
3、什么是SQL ?
答:MySQL等软件可以接受命令,并做出相应的操作,由于命令中可以包含删除文件、获取文件内容等众多操作,对于编写的命令就是是SQL语句。
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
二 MySQL数据库的基本使用
1 启动MySQL数据库服务并设置开机自启
[root@localhost ~]# systemctl start mysqld //启动mysql服务
[root@localhost ~]# systemctl enable mysqld //设置开机自启
[root@localhost ~]# systemctl status mysqld //查看mysql服务状态
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since 日 2018-11-18 11:40:33 CST; 9h ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 3913 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
Process: 3892 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 3917 (mysqld)
CGroup: /system.slice/mysqld.service
└─3917 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mys..
1 获取初始密码
[root@mysql50 ~]# grep password /var/log/mysqld.log
2018-11-16T02:28:07.364587Z 1 [Note] A temporary p
2 登录数据库
[root@mysql50 ~]# mysql -u root -p'oRbpo69YNM?G'
3 数据库内 \c 结束一条命令
4 修改密码 (默认初始密码是不能处理数据库)
mysql> alter user root@localhost identified by 'Taren111`'; 要求:字母大小写,数字,特殊符号。
5 查看包含password的变量:
mysql> show variables like '%password%';
6 临时修改密码策略:
mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=6;
mysql> alter user root@localhost identified by '123456;
7 永久修改密码策略:
关闭mysqld服务,进入mysql配置文件:
vim /etc/my.cnf
[mysqld]
validate_password_policy=0
validate_password_length=6
8 数据库命名规则:可以使用数字/字母/下划线 ,但是不能是纯数字
区分大小写,具有唯一性
不可使用指令关键字,特殊字符
9 练习查看/删除/创建库的相关操作
mysql> show databases; //查看现有的库
mysql> use sys; //切换到sys库
mysql> create database newdb; //新建名为newdb的库
mysql> drop database newdb; //删除名为newdb的库
10 查看指定表的字段结构
mysql> desc columns_priv\G //查看表结构,以列表形式展现,末尾不用分号
mysql> desc columns_priv; //查看表结构,以表格形式展现末尾需要有分号
当引用非当前库中的表时,可以用“库名.表名”的形式。比如,切换为mysql库再执 行“desc columns_priv;”,与以下操作的效果是相同的:
mysql> desc mysql.columns_priv;
11 在mydb库中创建一个名为pwlist的表,包括name、password两列,其中name列作为主键。两个字段值均不允许为空,其中密码列赋予默认空值,相关操作如下所述。
mysql> use mydb; //切换到mydb库
mysql> create table pwlist( //新建pwlist表
-> name char(16) not null,
-> password char(48)default '',
-> primary key(name)
-> );
mysql> show tables; //确认新创建的表
mysql> desc pwlist; //查看pwlist表的字段结构
mysql> drop table pwlist; //删除当前库中的pwlist表
mysql> show tables; //确认删除结果
12 mydb库中创建一个学员表
在MySQL表内存储中文数据时,需要更改字符集(默认为latin1不支持中文),以便MySQL支持存储中文数据记录;比如,可以在创建库或表的时候,手动添加“DEFAULT CHARSET=utf8”来更改字符集。
根据上述表格结构,创建支持中文的student表
mysql> CREATE TABLE mydb.student(
-> 学号 char(9) NOT NULL,
-> 姓名 varchar(4) NOT NULL,
-> 性别 enum('男','女') NOT NULL,
-> 手机号 char(11) DEFAULT '',
-> 通信地址 varchar(64),
-> PRIMARY KEY(学号)
-> ) DEFAULT CHARSET=utf8; //手工指定字符集,采用utf8
mysql> DESC mydb.student; //查看student表的字段结构
mysql> SHOW CREATE TABLE mydb.student; 查看student表的实际创建指令
13 若要修改MySQL服务的默认字符集,可以更改服务器的my.cnf配置文件,添加character_set_server=utf8 配置,然后重启数据库服务。
[root@dbsvr1 ~]# systemctl stop mysqld //关闭服务
[root@dbsvr1 ~]# vim /etc/my.cnf //修改运行服务配置
[mysqld]
.. ..
character_set_server=utf8
[root@dbsvr1 ~]# systemctl restart mysqld //重启服务
[root@dbsvr1 ~]# mysql –u root -p
Enter password:
. . ..
mysql> SHOW VARIABLES LIKE 'character%'; //确认更改结果
三 MySQL 数据类型
1 整形
MySQL数据类型 | 含义(有符号) |
tinyint(m) | 1个字节 范围(-128~127) |
smallint(m) | 2个字节 范围(-32768~32767) |
mediumint(m) | 3个字节 范围(-8388608~8388607) |
int(m) | 4个字节 范围(-2147483648~2147483647) |
bigint(m) | 8个字节 范围(+-9.22*10的18次方) |
取值范围如果加了unsigned,则最大值翻倍,如tinyint unsigned的取值范围为(0~256)。
int(m)里的m是表示SELECT查询结果集中的显示宽度,并不影响实际的取值范围,没有影响到显示的宽度。
2、浮点型(float和double)
MySQL数据类型 | 含义 |
float(m,d) | 单精度浮点型 8位精度(4字节) m总个数,d小数位 |
double(m,d) | 双精度浮点型 16位精度(8字节) m总个数,d小数位 |
设一个字段定义为float(5,3),如果插入一个数12.345678,实际数据库里存的是12.346,但总个数还以实际为准,即5位。
3、定点数
浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。 4、字符串(char,varchar,_text) char和varchar: 5.二进制数据(_Blob) 1._BLOB和_text存储方式不同,_TEXT以文本方式存储,英文存储区分大小写,而_Blob是以二进制方式存储,不分大小写。 6.日期时间类型 若定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间。 数据类型的属性
decimal(m,d) 参数m<65 是总个数,d<30且 d
MySQL数据类型
含义
char(n)
固定长度,最多255个字符
varchar(n)
固定长度,最多65535个字符
tinytext
可变长度,最多255个字符
text
可变长度,最多65535个字符
mediumtext
可变长度,最多2的24次方-1个字符
longtext
可变长度,最多2的32次方-1个字符
1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。
2.varchar(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),所以varchar(4),存入3个字符将占用4个字节。
3.char类型的字符串检索速度要比varchar类型的快。
varchar和text:
1.varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字节。
2.text类型不能有默认值。
3.varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用。
2._BLOB存储的数据只能整体读出。
3._TEXT可以指定字符集,_BLO不用指定字符集。
MySQL数据类型
含义
date
日期 '2008-12-2'
time
时间 '12:25:36'
datetime
日期时间 '2008-12-2 22:06:44'
timestamp
自动存储记录修改时间
MySQL关键字
含义
NULL
数据列可包含NULL值
NOT NULL
数据列不允许包含NULL值
DEFAULT
默认值
PRIMARY KEY
主键
AUTO_INCREMENT
自动递增,适用于整数类型
UNSIGNED
无符号
CHARACTER SET name
指定一个字符集
新建studb库,创建stuinfo表,表结构、字段类型自定义
表结构自定义,并合理使用数据类型
练习各种时间函数的使用
1 新建studb库,并切换到studb库
mysql> CREATE DATABASE studb;
Query OK, 1 row affected (0.00 sec)
mysql> USE studb;
Database changed
2 新建stuinfo表
mysql> CREATE TABLE stuinfo (
-> name varchar(16) NOT NULL,
-> gender enum('male','femal') DEFAULT 'male',
-> birth date NOT NULL,
-> job varchar(16) DEFAULT '',
-> relation varchar(24) NOT NULL,
-> PRIMARY KEY(name)
-> );
mysql> DESC stuinfo; //查看stuinfo表的字段结构
3 练习各种时间函数的使用
1)使用now()查看当前的日期和时间
mysql> SELECT now();
2)使用sysdate()查看系统日期和时间
mysql> SELECT sysdate();
3)使用curdate()获得当前的日期,不含时间
mysql> SELECT curdate();
4)使用curtime()获得当前的时间,不含日期
mysql> SELECT curtime();
5)分别获取当前日期时间中的年份、月份、日
mysql> SELECT year(now()),month(now()),day(now());
6)获取系统日期时间中的月份、日
mysql> SELECT month(sysdate()),day(sysdate());
7)获取系统日期时间中的时刻
mysql> SELECT time(sysdate());