数据库学习01--Mysql安装和操作

数据库学习01

一.认识数据库

1.什么是数据库

数据库—database数据的仓库,应用程序需要持久化数据,生活中和数据相关的都存在数据库中

2.数据库分类:

关系型数据库—oracle(收费的)、MySQL(免费的)、postgresql、SQL server

非关系型数据库——Redis、MangoDB、CouchDB

二.关系型数据库

1.特点

用二维表格来组织数据,有行有列即二维表格,组织和管理数据,方便crud操作(update delete),能避免重复的无效的数据

理论基础:关系代数 + 集合论

2. 术语

(1)

行===记录

列===字段

主键 –唯一确定一条记录的列

(2)数据库的五个基本单位

数据库服务器
数据库
数据表
数据字段(列)
数据行(记录)
3.数据库如何存储数据

数据库服务器:mysql oracle
数据库:boke market
数据表:每一个库里面又有好多的表
数据字段:一个表会有好多字段(表头),姓名、年龄、性别、身高等
数据行:一条真实的数据

4.编程语言:SQL

每一种数据库都有单独的SQL,不同数据库之间不能互相通用

SQL (结构化查询语言)组成部分
(1)DDL ==数据定义语言
三个关键字 create /drop/alter===创建、删除、修改
(2)DML数据操纵语言
三个关键字insert /delete /update

(3)DQL数据查询语言(最重要)
select

(4)DCL数据控制语言

grant /revoke==授权, 收回权限

(5)DTL数据事务语言

三、MySQL简介

1.发展史

MySQL AB前所有者为总部位于瑞典的mysql AB公司所有。AB,的意识在瑞典语中是指”aktiebolag”中文译为”股份公司”的首字母缩写,后来被Oracle公司收购。MySQL 公司是由David Axmark,Allan Larsson和Michael Widenius 3个瑞典人在20世界90年代初期开发的一个关系型数据库。最开始的时候,他们是想用自己的ISAM(索引顺序存取方法)mSQL(MiniSQL)来做连接访问表格。后来他们发现有很多不方便,于是乎开发了一个几乎跟mSQL API接口几乎一样的数据库引擎。

2.被Oracle公司收购
良好的生态
开源、免费
性能强劲

四.MySQL安装和启动(Linux)

1.方式一:用yum方式安装MySQL

(1)先查看是否安装MySQL——yum search MySQL

官网:MySQL.com—>下载—->找到社区版community server(不用商业版,需要付费)–>选择5.7.22版本(不选8版)—->系统选择红帽子

(2)下载安装包步骤(共下载四部分):

common依赖库; libs  底层依赖库;client;server

在linux中用阿里云下载,创建一个存放文件夹==mkdir mysql(建新文件夹命名为“mysql”)—>cd mysql进入文件夹 —>wget 粘贴网址(下方网址) ,

MySQL官方下载地址:(按照这个顺序下载)

https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-common-5.7.22-1.el7.x86_64.rpm
https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-libs-5.7.22-1.el7.x86_64.rpm

https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-client-5.7.22-1.el7.x86_64.rpm

https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-server-5.7.22-1.el7.x86_64.rpm

下载完毕ls命令检查下载好没有

(3)卸载—安装前先用yum安装libaio,卸载mariadb-libs

安装libaio====yum install libaio
卸载mariadb-libs======yum remove mariadb-libs
可以把这几个文件下载到一个单独的目录下然后再用  ls | xargs rpm -ivh

(4)安装==ls| xargs rpm -ivh 把前一个命令的输出作为后一个命令的参数

**【命令】**xargs 把前一个命令的输出作为后一个命令的参数

(5)确认装好了没有=====systemctl start mysqld

       版本7以前   ===service  mysqld  start

( 6 )查看进程状态

     ps   -aux或者ps  -ef======  查看所有进程状态( 减号可有可无)
【例】
ps -ef | grep mysql      搜索是否有mysql进程
ps -ef | grep mysql | grep - v grep    
搜索mysql时但是不要搜索grep(grep -v代表不搜索)

(7)卸载MySQL====== rpm -e <文件名> 移除

2.方式二源代码安装(编译安装)

关闭防火墙和selinux
service iptables stop 
setenforce 01)、安装依赖库
    yum -y install make gcc-c++ cmake bison-devel ncurses-devel

(2)、创建mysql用户(但是不能使用mysql账号登陆系统) 
    useradd mysql -s /sbin/nologin          #创建用户mysql,不允许直接登录系统
    mkdir -p /var/mysql/data                #创建MySQL数据库存放目录
    chown -R mysql:mysql /var/mysql/data    #设置MySQL数据库目录权限

(3)、下载和安装MySQL
    下载
        wget -c https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.41.tar.gz

    安装
        tar -zxvf mysql-5.6.41.tar.gz
        cd mysql-5.6.41
    配置
        cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
        -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
        -DDEFAULT_CHARSET=utf8 \
        -DDEFAULT_COLLATION=utf8_general_ci \
        -DWITH_MYISAM_STORAGE_ENGINE=1 \
        -DWITH_INNOBASE_STORAGE_ENGINE=1 \
        -DWITH_MEMORY_STORAGE_ENGINE=1 \
        -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 \
        -DMYSQL_DATADIR=/var/mysql/data \
        -DMYSQL_USER=mysql -DMYSQL_TCP_PORT=3306 
    编译并安装
        make && make install
(4)、配置MySQL
    cd /usr/local/mysql
    cp ./support-files/my-huge.cnf /etc/my.cnf #拷贝配置文件

    vi /etc/my.cnf              #编辑配置文件,在 [mysqld] 部分增加
    datadir = /var/mysql/data   #添加MySQL数据库路径

    ./scripts/mysql_install_db --user=mysql #生成mysql系统数据库

    #把Mysql加入系统启动
    cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld  

   vi /etc/rc.d/init.d/mysqld #编辑
    basedir=/usr/local/mysql #MySQL程序安装路径
    datadir=/var/mysql/data #MySQl数据库存放目录

    chmod 755 /etc/init.d/mysqld #增加执行权限
    chkconfig mysqld on #加入开机启动

    chown -R mysql /usr/local/mysql #修改/usr/local/mysql所属用户为mysql

     service mysqld start #启动mysqld

    vi /etc/profile     #把mysql服务加入系统环境变量:在最后添加一行
    export PATH=$PATH:/usr/local/mysql/bin

    source /etc/profile #使配置立即生效
    mkdir /var/lib/mysql #创建目录
    ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock #添加软链接
    mysql_secure_installation #设置Mysql密码,根据提示按Y 回车输入2次密码
    功能同上:
    mysqladmin -u root -p password "123456" #或者直接修改密码

    若要设置root用户可以远程访问,执行
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

    使授权立即生效
    FLUSH PRIVILEGES;

3.启动和运行常用操作

启动服务(改了配置一般是重启)

systemctl start mysqld
确认装好了没有=====systemctl start mysqld
版本7以前   ===service  mysqld  start

查看启动状态

netstat -nap | grep mysql

进入Mysql===== mysql -u root -p

[root@izwz9ao2nl8wvmgaymeyr0z ~]# mysql -u root -p
Enter password: 

查看mysql中所有数据类型

mysql> ? data types

查看Mysql中数

mysql> ? varchar

防火墙打开端口3306设置

五、MySQL安装(windows)

关键一步是环境变量配置,可以设置在cmd黑屏终端中使用

1.安装包安装,一路next安装
这里写图片描述
这里写图片描述

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
2、环境变量配置

(1)计算机–>属性–>高级–>环境变量—>新建Path

C:\Program Files\MySQL\MySQL Server 5.7\bin

(2)打开cmd启动MySql服务

net start mysql57

(3)进入mysql

mysql -u root -p   #提示输入密码可进入黑屏中端的Mysql界面

六、Mysql数据类型

数据字段,不同的字段要求有不同的数据类型。

1.整型

数据类型 所占字节 取值范围
tinyint 1字节 -128~127
smallint 2字节 -32768~32767
mediumint 3字节 -8388608~8388607
int 4字节 -2147483648~2147483647
bigint 8字节 +-9.22*10的18次方

无符号-有符号,如何表示负数,最高位代表符号位,如果是1,代表负数,如果是0,代表正数

  原码、反码、补码
            1000 0001    -1的原码
            1111 1110    -1的反码   符号位不变,其它按位取反
            1111 1111    -1的补码
            八位:表示无符号 0-255   表示有符号 -128-127
            int   4个字节
            tinyint 1个字节

2.浮点型

数据类型 所占字节 取值范围
float(m, d) 4字节 单精度浮点型,m总个数,d小数位
double(m, d) 8字节 双精度浮点型,m总个数,d小数位
decimal(m, d) decimal是存储为字符串的浮点数
浮点是非精确值,会存在不太准确的情况;而decimal叫做定点数,在MySQL内部本质上
是用字符串存储的。实际使用过程中如果存在金额、钱精度要求比较高的浮点数存储,
建议使用decimal(定点数)这个类型。
decimal(m,d)   其本质存字符串

3.字符类型

数据类型 所占字节 取值范围
char 0-255字节 定长字符串
varchar 0-65535字节 变长字符串
tinyblob 0-255字节 不超过255个字符的二进制字符串
tinytext 0-255字节 短文本字符串
blob 0-65535字节 二进制形式的长文本数据
text 0-65535字节 长文本数据
mediumblob 0-16 777 215字节 二进制形式的中等长度文本数据
mediumtext 0-16 777 215字节 中等长度文本数据
longblob 0-4 294 967 295字节 二进制形式的极大文本数据
longtext 0-4 294 967 295字节 极大文本数据
varbinary(M) 允许长度0-M个字节 不定长字节字符串,值的长度+1个字节
binary(M) M 允许长度0-M个字节的定长字节字符串
区别:
char类型用于定长字符串,并且必须在圆括号内用一个大小修饰符来定义。这个大小修饰符的范围从 0-255。比指定长度大的值将被截短,而比指定长度小的值将会用空格作填补。
varchar把这个大小视为值的大小,长度不足的情况下不用空格补足,只使用存储字符串实际需要的长度,但长于指定的值仍然会被截短。
text类型与blob类型对于字段长度要求超过 255 个的情况下,MySQL提供了text和blob两种类型。根据存储数据的大小,它们都有不同的子类型。这些大型的数据用于存储文本块或图像。
binary声音文件等二进制数据类型。
text和blob类型在分类和比较上存在区别。blob类型区分大小写,而 text不区分大小写。大小修饰符不用于各种 blob和text子类型。

4.时间类型

数据类型 所占字节 取值范围
date 4字节 日期,格式:2014-09-18
time 3字节 时间,格式:08:42:30
datetime 8字节 日期时间,格式:2014-09-18 08:42:30
timestamp 4字节 自动存储记录修改的时间(current_timestamp)
year 1字节 年份1901~2155
datetime : 日期时间
timestamp ;时间戳
int : 时间戳

5.复合类型

数据类型 所占字节 取值范围
set 集合类型 set(“m1”, “m2″, … ,“m63″)
enum 枚举类型 enum(“m1″, “m2″, … ,“m65535″)
  set :多选  比如爱好   篮球-足球-羽毛球
            enum : 单选 性别  男-女

6.Enum类型

ENUM 类型因为只允许在集合中取得一个值,有点类似于单选项。在处理相互排拆的数据时容易让人理解,比如人类的性别。ENUM 类型字段可以从集合中取得一个值或使用null值,除此之外的输入将会使 MySQL 在这个字段中插入一个空字符串。另外如果插入值的大小写与集合中值的大小写不匹配,MySQL会自动使用插入值的大小写转换成与集合中大小写一致的值。

ENUM 类型在系统内部可以存储为数字,并且从1开始用数字做索引。一个 ENUM 类型最多可以包含 65536 个元素,其中一个元素被 MySQL 保留,用来存储错误信息,这个错误值用索引 0 或者一个空字符串表示。

MySQL 认为 ENUM 类型集合中出现的值是合法输入,除此之外其它任何输入都将失败。这说明通过搜索包含空字符串或对应数字索引为 0 的行就可以很容易地找到错误记录的位置。

7.set类型

SET 类型与 ENUM 类型相似但不相同。SET类型可以从预定义的集合中取得任意数量的值。并且与 ENUM 类型相同的是任何试图在 SET 类型字段中插入非预定义的值都会使MySQL插入一个空字符串。如果插入一个即有合法的元素又有非法的元素的记录,MySQL 将会保留合法的元素,除去非法的元素。

一个 SET 类型最多可以包含 64 项元素。在 SET 元素中值被存储为一个分离的“位”序列,这些“位”表示与它相对应的元素。“位”是创建有序元素集合的一种简单而有效的方式。

并且它还去除了重复的元素,所以SET类型中不可能包含两个相同的元素。
希望从 SET 类型字段中找出非法的记录只需查找包含空字符串或二进制值为 0 的行。

8.Unsigned

UNSIGNED(无符号) 主要用于整型和浮点类型,使用无符号。即没有前面面的负号,所有的数都为正数。

存储位数更长。tinyint整型的取值区间为,-128~127。而使用无符号后可存储0-255个长度。

创建时在整型字段语句后接上unsigned

9.ZEROFILL(0填充-了解)

 0(不是空格)可以用来增补输出的值。使用这个修饰符可以阻止 MySQL 数据库存储负值。
创建时在整型字段语句后接上zerofill

10.auto_increment

自动增加,只用于整型,可以设置起始值,默认为1

常与后面primary key一起使用

创建表时在整型字段后加上:auto_increment=起始值 primary key
修改起始值:alter table user auto_increment=起始值

11.default默认值

default属性确保在没有任何值可用的情况下,赋予某个常量值,这个值必须是常量,因为MySQL不允许插入函数或表达式值。

此外,此属性无法用于BLOB或TEXT列。如果已经为此列指定了NULL属性,没有指定默认值时默认值将为NULL,否则默认值将依赖于字段的数据类型。

创建表时在字段语句后接上:default '值'

12.not null 非空

如果一个字段不能为空,又没有默认值,那么这个字段必须插入值

如果将一个列定义为not null,将不允许向该列插入null值。建议在重要情况下始终使用not null属性,因为它提供了一个基本验证,确保已经向查询传递了所有必要的值。

创建时在字段语句后接上:not null

null为列指定null属性时,该列可以保持为空,而不论行中其它列是否已经被填充。记住,null精确说法是“无”,而不是空字符串或0

七、Mysql基本操作(crud)

注意书写规范:关键字推荐用大写;SQL语句都要以分号结尾,如果发现指令写错了,添加 \c 清掉所有指令;所有的符号都是英文。

1.注释

在nivacat中写代码用到注释
单行注释:--
多行注释:/*    */
也可以在代码后面加comment注释

2.对数据库的操作(database)

(1)连接数据库

mysql -h 服务器地址 -u 用户名 -p密码

(2)创建数据库

分类 详解
基本语法 create database 数据库名;
示例 create database test;
示例说明 创建一个数库,数据库的名字为test

(3)查看数据库

分类 详解
基本语法 create database 数据库名;
示例 create database test;
示例说明 创建一个数库,数据库的名字为test

(4)使用数据库(选中库)

分类 详解
基本语法 use 库名;
示例 use test;
示例说明 使用数据库test

(5)删除数据库

分类 详解
基本语法 drop database 库名;
示例 drop database test;
示例说明 删除一个数据库,数据库的名字为test

3.表操作(table)

表的基本操作就是增删改查 (crud操作)首先通过mysql -uroot -p 进入数据库系统,创建数据库dudu,进入数据库dudu use dudu,然后才是创建表的过程

   创建表开始学习增删改
        mysql> create table user(
            -> id int auto_increment,
            -> name varchar(30) not null,
            -> money int not null,
            -> province varchar(20) default null,
            -> age tinyint unsigned not null,
            -> sex enum('女', '男') not null,
            -> primary key(id)
            -> )engine=innodb default charset=utf8;

【注】单选在插入值的时候,可以直接使用1 2,那么1代表女,2代表男,enum类型如不给值,默认是第一个
(1)创建表

分类 详解
基本语法 create table 表名(字段名1 字段类型,….字段名n 字段类型n);
示例 create table user(username varchar(20),password char(32));
示例说明 创建一个表名叫user的表,第一个字段为username、表的字段类型为varchar长度为20个长度。第二个字段为password,类型为char,长度也为32个长度。

创建表会设置主键primary key

【主键】PRIMARY KEY 约束唯一标识数据库表中的每条记录。

**主键必须包含唯一的值。**

**主键列不能包含 NULL 值。**

**每个表都应该有一个主键,并且每个表只能有一个主键。**

(2)查看表

分类 详解
基本语法 show tables;
示例说明 显示当前数据库下所有的表

(3)查看表字段、表结构

分类 详解
基本语法 desc 表名;
示例 desc user;
示例说明 查看user表的表结构
desc user;

(4)删除表:drop table

分类 详解
基本语法 drop table 表名;
示例 drop table user;
示例说明 删除表user

(5)指定字符集和引擎

查看创建库及表语句

show create database 库名;
show create table 表名;

设置配置文件(统一设置)

存储引擎:default-storage-engine=InnoDB
字符集:character_set_server=utf8

创建表时指定(每次指定)

存储引擎 engine=InnoDB
创建表时指定字符集default charset=utf8

(6)修改字段类型alter

分类 详解
基本语法 alter table 表名 modify 字段名 varchar(20);
示例 alter table user modify username varchar(20);
示例说明 将user表的username的类型改为varchar(20)

(7)增加字段时控制顺序

分类 详解
基本语法 alter table 表名 modify 字段名 varchar(20);
示例 alter table user modify username varchar(20);
示例说明 将user表的username的类型改为varchar(20)
分类 详解
基本语法 alter table 表名 add 字段名 字段类型;
示例 alter table user add id int(10) first;
示例说明 user表中在最开始位置增加一个字段为id,类型为int,长度为10

(8)删除表中字段

分类 详解
基本语法 alter table 表名 drop 字段名;
示例 alter table user drop age;
示例说明 在user表中删除字段age

(9)表字段改名

分类 详解
基本语法 alter table 表名 change 字段原名 字段新名 字段类型;
示例 alter table user change email em varchar(60);
示例说明 在user表中将字段中的email字段名字为em

(10)修改表字段排列顺序(了解)

在之前的字段增加和修改语句(add/change/modify)中,最后都可以加一个可选项 first|after。增加表字段时我们已经学过了如何调整顺序。我们现在在来看看另外的change或modify如何来调整顺序。
我们用first做个小实验。

例:alter  table user modify em varchar(60) first;

(11)修改表名

分类 详解
基本语法 alter table 旧表名 rename 新的表名;
示例 alter table user rename new_user;
示例说明 将user表名改为new_user

八.可视化工具

当你去操作数据库的时候,其实有3中方式
(1)使用mysql自带的客户端进行操作
(2)使用一些第三方的可视化工具管理数据库 比如navicate、sqlyog
(3)使用代码去操作数据库,比如python、java、php

九.表之间的实体关系图(ER图)

– 矩形框:实体
– 椭圆:表示属性
– 菱形:关系的从属

十.案例—学校表school

Navicat中打开代码界面(查询)—>查询—>创建查询

1.删除原表===drop

如果存在名为school的数据库就删除它(初次建表的时候用,在公司一般不用,都会提前有人建好)

drop database if exists school;

2..建表===create

创建名为school的数据库并设置默认字符集编码为UTF8 (注意没有破折号),default==代表默认值

drop database if exists school;
create database school default charset utf8;    -- 创建名为school的数据库并设置默认字符集为UTF8

3.切换到数据库==use

运行上面语句会创建好名为school的表切换到我们要使用的数据库

-- 切换到schol数据库
use school;

4.创建学院表命名为tb_college

并设置主键primary key

【主键】PRIMARY KEY 约束唯一标识数据库表中的每条记录。

主键必须包含唯一的值。

主键列不能包含 NULL 值。

每个表都应该有一个主键,并且每个表只能有一个主键。

5.创建学生表(命名为tb_school)

-- 创建学生表(tb_student)
create table tb_student
(
-- 非空约束
给列起名字,然后后面加上数据类型为int
stuid int not null,
-- 数据长度
stuname varchar(4) not null,
-- 设置性别.bit代表一位,设置默认值为1
stusex bit default 1,
stuaddr varchar(50),
-- 设置主键约束
primary key (stuid)

);

删除表(不执行)

drop table if exists tb_student;
-- 创建学生表(tb_student)
create table tb_student
(
stuid int not null comment '学号',
stuname varchar(4) not null comment '姓名',
stusex bit default 1 comment '性别',
stuaddr varchar(50) comment '籍贯',
colid int not null comment '学院编号'
);

-- 添加主键(primary key)约束
alter table tb_student add constraint pk_stuid primary key (stuid);

-- 添加外键(foreign key)约束
alter table tb_student add constraint fk_student_colid 
foreign key (colid) references tb_college (colid);

-- 如果存在名为tb_student的表就删除
-- drop table if exists tb_student;

-- 修改名为tb_student的表添加新列
-- alter table tb_student add column stutel char(11);
-- alter table tb_student drop column stutel;

-- 修改表设置stutel列不允许重复(唯一约束/唯一索引)
-- alter table tb_student add constraint uni_tel unique (stutel);

-- 创建课程表(tb_course)
create table tb_course
(
cid int not null comment '课程编号',
cname varchar(20) not null comment '课程名称',
ccredit int not null comment '学分',
primary key (cid)
);

-- 创建学生选课表(tb_sc)
create table tb_sc
(
scid int not null auto_increment comment '选课记录好',
sid int not null comment '学号',
cid int not null comment '课程编号',
scdate datetime default now() comment '选课时间日期',
score decimal(4,1) comment '成绩',
primary key (scid)
);

alter table tb_sc add constraint fk_sc_sid 
foreign key (sid) references tb_student (stuid);

alter table tb_sc add constraint fk_sc_cid 
foreign key (cid) references tb_course (cid);

-- 插入数据到tb_college表
insert into tb_college (colid, colname, coltel) values 
(10, '计算机学院', '028-88556678'),
(20, '外国语学院', '028-88650099'),
(30, '经济管理学院', '028-854440098');

-- 插入数据到tb_student表
insert into tb_student values 
(1001, '张三', 1, '四川成都', 10);

-- 删除tb_student表中指定的数据
-- delete from tb_student where stuid=1002;
-- delete from tb_student where stuid in (1001, 1003);
-- delete from tb_student where stuid=1001 or stuid=1003;
-- delete from tb_student where stuid between 1004 and 1010;
-- truncate table tb_student;

-- 更新tb_student表中指定的数据
-- update tb_student set stuaddr='湖南长沙', stutel='13811011119' 
-- where stuid=1002 or stuid=1004;

猜你喜欢

转载自blog.csdn.net/ZZQHELLO2018/article/details/82430087