一、搭建数据库服务器
1.选购合适的服务器:
配置: CPU 内存 存储
用途:云服务器、硬件服务器
2.安装软件包的选择:
根据服务器操作系统的版本:windows linux unix
软件的版本:开源软件或商业软件
安装方式:
源码安装:自定义安装,想装在哪都,装什么功能都行,但是要解决依赖关系;
rpm包安装:安装简单,封装好了,缺点,无法改变配置
软件包的来源:官网去下或操作系统里的安装包内也有
3.修改配置文件
4.启动服务
5.具体操作过程:用的是开源版,5.7.17版本,rpm装,在IP地址是192.168.4.50上 的主机运行mysql数据库。
[root@host50 08.dba-1]# tar -xf mysql-5.7.17.tar
[root@host50 08.dba-1]# ls
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@host50 08.dba-1]# rpm -qa | grep -i mariadb
mariadb-libs-5.5.56-2.el7.x86_64
[root@host50 yum.repos.d]# rpm -Uvh mysql-community-*.rpm
提示需要perl-JSON依赖包,直接yum安装此依赖包
[root@host50 yum.repos.d]# yum -y install perl-JSON
[root@host50 yum.repos.d]# rpm -Uvh mysql-community-*.rpm
[root@host50 08.dba-1]# rpm -qa | grep -i mysql
mysql-community-client-5.7.17-1.el7.x86_64
mysql-community-minimal-debuginfo-5.7.17-1.el7.x86_64
mysql-community-test-5.7.17-1.el7.x86_64
mysql-community-common-5.7.17-1.el7.x86_64
mysql-community-devel-5.7.17-1.el7.x86_64
mysql-community-libs-compat-5.7.17-1.el7.x86_64
mysql-community-libs-5.7.17-1.el7.x86_64
mysql-community-embedded-5.7.17-1.el7.x86_64
mysql-community-embedded-compat-5.7.17-1.el7.x86_64
mysql-community-embedded-devel-5.7.17-1.el7.x86_64
mysql-community-server-5.7.17-1.el7.x86_64
至此,安装完成,生成数据库目录:/var/lib/mysql空目录
[root@host50 mysql]# systemctl start mysqld
第一次启动服务,需要初始化,加载文件,需要一定时间,不会秒起
此时再查看数据库目录:/var/lib/mysql,自动生成了很多目录和文件
[root@host50 mysql]# systemctl enable mysqld 设置开机自启
[root@host51 mysql]# systemctl status mysqld查状态为running确认启动成功。
6.步骤总结:
1.解压安装包mysql-5.17.7
2.检查机器是否安装其他版本的数据库
3.安装依赖包perl-JSON(镜像有)
4.升级安装mysql-community-*.rpm
5.启动服务,查状态
7.参数总结:
1.配置文件位置:/etc/my.cnf
2.数据库目录:/var/lib/mysql
3.进程名:mysqld
4.默认端口号:3306
5.传输协议:tcp
6.进程所有者,所属组:mysql
二、数据库服务的基本使用
1.数据存储到数据库服务器上过程:
连接数据库服务器(命令连接 图形工具)
选择库(文件夹)
建表(文件)
插入记录(行)
断开连接
2.连接数据库服务器
mysql -hlocalhost -uroot -p密码 [库名] //连接数据库的命令root是数据库管理员的用户名,与系统管理员同名,但不是同一个用户
[root@host50 mysql]# grep -i password /var/log/mysqld.log //查看管理员初始密码,将“:”后的内容复制然后登陆
此时对数据库进行操作会提示:ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. //你必须先重置密码才可以进行操作。
ps:默认设置的密码为复杂密码:包括大小写,数字加特殊符号
可以通过修改密码策略简化:
mysql>set global validate_password_policy=0;//将策略设置简单
mysql> set global validate_password)length=6;//将密码最短长度设为6位
mysql> alter user root@'localhost' identified by '123456'; //设置密码
//global为全局设置,在数据库里修改只是临时生效,要永久设置需要在配置文件内添加:
validate_password_policy=0
validate_password)length=6
然后停掉数据库再启动确认设置成功。
3.选择库(文件夹)
a.操作指令类型:
mysql指令:环境切换,看状态,推出等控制;
sql指令:数据库定义,查询,操纵,授权语句:
DDL数据定义语言(cresate alter drop)
DML数据操作语言(insert update delete)
DCL 数据控制语言(grant revoke)
DTL 数据事物语言(commit rollback savepoint)
b.使用的基本注意事项:
操作指令不区分大小写(密码,变量除外)
不支持tab键自动补齐
每条sql指令以;结束或分隔
默认的4个库不要删,有些存放的是系统启动所需要的数据
c.库名的命名规则:可以使用数字/字母/下划线,不能纯数字
不能用特殊字符,指令关键字
区分大小写,具有唯一性
d.库管理基本命令:
– Show databases; // 显示已有的库
– Use 库名 ;// 切换库
– Select database(); // 显示当前所在的库
– Create database 库名 ; // 创建新库
– Show tables;// 显示已有的表
– Drop database 库名; // 删除库
ps:把库删掉了,没有备份,能不能恢复?
可以,但是要通过第三方软件,将硬盘上存放库的资料找回来
ps:库与数据库目录下的目录是双向的,在数据库目录下建目录,也会多出一个库,但是拥有者和所属组是root,因此连接数据库后只能查看和进入库,不能写入,因为没权限。
4.建表(文件)
表管理命令:
创建表:
create table 库名.表名(
字段名1 字段类型(宽度) 约束条件,
字段名2 字段类型(宽度) 约束条件,
...
字段名N 字段类型(宽度) 约束条件,
);
eg:mysql> create table t1 (
-> name char(15),
-> class char(7)
-> );
查看表结构: desc t1;
查看表记录: select * from 表名;
删除表: drop table 表名;
5.插入记录(行)
Insert into 表名 values( 值列表 );// 插入表记录,一个()为一行
eg:
mysql> insert into t1 values("haha1","nsd1803"),("haha2","nsd1803");
Update 表名 set 字段 = 值 ; // 修改表记录(批量修改)
eg:
mysql> update t1 set class="nsd1809";
Delete from 表名 ; // 删除表记录(所有行,表还在,字段也还在)
eg:
mysql> delete from t1;
Select * from 表名 ; // 查看表记录(*为全部字段)
eg:
mysql> select * from t1;
ps:mysql默认字符集为latin1,不支持中文,在执行insert时存不了中文字符,但库名和表名可以中文,因此需要在建表时设字符集为支持中文字符的utf8
eg:
mysql> create table 学生信息表2(
-> 姓名 char(15),
-> 班级 char(7)
-> )Default charset=utf8;
执行insert验证或show create table 学生信息表2;查看创建表时的设置。
三、mysql数据类型
1.常见的信息种类:
数值型:
字符型:
枚举型:兴趣还好,性别等只能选一个之类的
日期时间型:
2.数值类型:
默认用的是有符号的存储范围,若要用无符号的在设置类型时后面在unsigned;
整型:存小数点会四舍五入
eg(整数型):
mysql> create table db1.t2(level tinyint);
mysql> insert into t2 values(251);
ERROR 1264 (22003): Out of range value for column 'level' at row 1
mysql> insert into t2 values(127);
Query OK, 1 row affected (0.03 sec)
mysql> create table db1.t3(level tinyint unsigned);
mysql> insert t3 values(255);
Query OK, 1 row affected (0.02 sec)
浮点型(带小数点):整数位.小数位--->总位数
n m
float(m,n)
double(m,n)
eg:
mysql> create table t4(pay double(7,2));
mysql> insert into t4 values(12300);
mysql> insert into t4 values(123);
mysql> insert into t4 values(123000);
ERROR 1264 (22003): Out of range value for column 'pay' at row 1
mysql> select * from t4;
+----------+
| pay |
+----------+
| 123.00 |
| 12300.00 |
+----------+
3.字符类型:
定长:char(字符数)
普通字符,最大长度255个字符,不指定宽度时默认为1;
固定长度,不够指定字符数时在右边用空格补齐,字符数超出时,无法写入数据;
存储数度效率高,因为无需计算存储空间。
变长:varchar(字符数)
普通字符,按数据实际大小分配存储空间,必须指定宽度,不然报错;
字符数断超出时,无法写入数据;
存储速度略低,需要占用cpu来计算存储空间,不建议全部用,消耗资源。
大文本类型:text/blob等二进制文件,字符数打与65535存储时使用,实际应用中不建议存放视频音频等打文件,一般都是存放此文件的路径做好标记方便查找
eg:
mysql> create table t5(
-> name char(15),
-> email varchar(30)
-> );
mysql> insert into t5 values("bob","[email protected]"),("lucy","[email protected]");
Records: 2 Duplicates: 0 Warnings: 0
mysql> insert into t5 values("kdsajlgdlkdsagj","asd");
mysql> insert into t5 values("kdsajlgdlkdsagja","asd");
ERROR 1406 (22001): Data too long for column 'name' at row 1
mysql> select * from t5;
4.枚举类型
1.从给定值集合中选择单个值,ENUM
定义格式:enum(值1,值2...值n),不能超过64个
ps:插入记录时可写值列表内的序号,也可写值内容
2.从给定值集合中选择一个或多个值,SET
定义格式:set(值1,值2...值n)
eg:
mysql> create table t6(
-> name char(15),
-> age tinyint unsigned,
-> pay float(7,2),
-> sex enum("boy","girl","no"),
-> hobby set("woman","money","game","eat")
-> )default charset=utf8;
mysql> desc t6;
mysql> insert into t6 values("bob",21,20000,"no","eat,game");
mysql> insert into t6 values("bob2",29.2000,"man","eat");
ERROR1136 (21S01): Column count doesn't match value count at row 1
mysql> insert into t6 values("bob3",20,200000,"2","woman");
ERROR 1264 (22003): Out of range value for column 'pay' at row 1
mysql> insert into t6 values("bob3",20,20000,"2","woman");
mysql> select * from t6;
5.日期类型
1.日期时间, DATETIME
– 占用 8 个字节
– 范围: 1000-01-01 00:00:00.000000~ 9999-12-31 23:59:59.999999
2.日期时间, TIMESTAMP
– 占用 4 个字节
– 范围: 1970-01-01 00:00:00.000000~ 2038-01-19 03:14:07.999999
3.日期, DATE
– 占用 4 个字节
– 范围: 0001-01-01 ~ 9999-12-31
4.年份, YEAR
– 占用 1 个字节
– 范围: 1901~2155
5.时间, TIME
– 占用 3 个字节
– 格式: HH:MM:SS
ps:
关于日期时间字段
当未给 TIMESTAMP 字段赋值时,自动以当前系统时间赋值,而 DATETIME 字段默认赋值为 NULL。
关于YEAR 年份的处理
– 默认用 4 位数字表示
– 当只用 2 位数字赋值时, 01~69 视为 2000~2069 ,而 70~99 视为 1970~1999
6.小结:
年 year YYYY 2018
日期 date YYYYMMDD 20180614
时间 time HHMMSS 174258
日期时间datetimeYYYYMMDDHHMMSS 20180614174258
eg:
mysql> create table t7(
-> name char(15),
-> syear year,
-> birth date,
-> up_class time,
-> party datetime
-> );
mysql> insert into t7 values
("yaya",1990,20181120,083000,20180618213000);
mysql> select * from t7;
7.时间函数
閱讀更多 VC1212138 的文章