Mysql教程(Windows)

一.
数据库分类

http://www.jb51.net/article/139219.htm  安装说明

https://www.cnblogs.com/xyabk/p/8967990.html

1. 网络数据库

2. 层级数据库

3. 关系数据库

另一种区分方式:基于介质

存储介质分为两种:磁盘和内存

关系型数据库:存储在磁盘中

非关系型数据库:存储在内存中

关系型数据库

关系数据结构:数据以什么方式存储(二维表

关系操作集合:关联和管理对应的存储数据(SQL指令

关系完整性约束:数据内部有对应的关联关系,数据与数据之间也有对应的关联联系

表内约束:对应的具体列只能放对应的数据(不能乱放)

表间约束:(外键)

 

典型关系型数据库:

小型:Microsoft AccessSQLite

中型:SQL ServerMysql

大型:OracleDB2

 

二.SQL介绍

1. 数据查询语言DQL    专门用于查询数据select/show

2. 数据操作语言DML    专门用于写数据 insert/update/delete

3. 事务处理语言TPL     专门用于事务安全处理transaction/

4. 数据控制语言DCL     专门用于权限管理grant/revoke

5. 数据定义语言DDL     专门用于结构管理create/dropalter

 

三.Mysql

启动和停止MySQL服务

C/S结构  客户端 服务端

服务端对应的软件Mysqld.exe

1. 通过命令行的形式cmd

net start 服务(Mysql):开启服务

net stop Mysql:关闭服务

2. 系统服务方式

前提:安装MySQL时将其添加到Windows的服务中

(计算机管理服务)或命令行  service.msc

找到mysql打开服务

登录和退出MySQL服务

通过客户端mysql与服务器进行连接认证,就可以操作

通常:客户端与服务端不在一台电脑上

登录

1. 找到MySQL.exe(通过cmd如果安装时指定了mysql.exe所在路径为环境变量,就可以直接访问;如果没有,进入到mysql所在路径)

2. 输入对应的服务器地址 -h:host  -h[IP 地址/域名]

3. 输入服务器中mysql监听的端口  -P:port  -P:3306

4. 输入用户名 -u:username -u:root

5. 输入密码  -p:password  -p:root

连接认证基本语法:

mysql.exe/mysql   -h主机地址  -P3306  -u用户名  -p密码

例:mysql.exe -hlocalhost -P3306  -uroot  -proot

注意:通常端口都可以默认:mysql默认3306

密码的输入可以先输入-p,直接换行,然后以密文方式输如密码

例:mysql -hlocalhost  -uroot  -p

Enter password:****

 

退出

断开与服务器的连接

建议使用SQL提供的指令

exit

\q

quit:

MySQL服务端架构

以下几层:

1. 数据库管理系统(最外层)DBMS 专门管理服务端的所有内容

2. 数据库(第二层):DB 专门用于存取数据的仓库(可以有多个)

3. 二维数据表(第三层):Table 专门用于存储具体实体的数据

4. 字段(第四层)fileld  具体存储某种类型的数据(实际存储单元)

数据库中常用的关键字

row:行

column:列(field

 

数据库基本操作

— xxxx   (注释)

创建数据库

基本语法:create datebase数据库名字【库选项】

库选项:数据库的相关属性

字符集:charset 字符集 代表当前数据库下的所有表存储的数据默认指定的字符集(如果不指定,采用DBMS默认的UTF-8

create database 数据库名称 charset 字符集名称;

create database myfatabase charset gbk

校对集:collate 校对集  随字符集

 

显示数据库

每当用户通过sql指令创建一个数据库,系统就会产生一个对应的存储数据的文件夹(通常存储在安装目录是data下)

并且每个数据库文件夹下都有一个opt文件,保存的数对应的数据库选项

显示全部

基本语法:show databases

显示部分、、

基本语法:show databases like ‘匹配模式’;

_:匹配当前位置单个字符

%:匹配指定位置多个字符

 

显示数据库创建语句

基本语法:show create database 数据库名字;

看到的指令并非原始指令,已经被系统加工过

 

选择数据库

如果要操作数据必须要进入到对应的数据库才行

基本语法:use 数据库名字

 

修改数据库

修改数据库 库选项(字符集和校对集)

基本语法:alter database 数据库名字 charset=字符集

mysql5.5之前rename 可修改数据库名字,5.5后不行

 

删除数据库

基本语法:drop database 数据库名字;

删除虽简单,不要轻易删,做好安全操作,确保数据没问题。

对应的文件夹和opt文件都被删除了

 

数据表操作

创建数据表

普通创建表

基本语法:create table   表名(字段名 字段类型[字段属性],字段名 字段类型[字段属性]…..[表选项];

表必须放在数据库下,两种方式将表放在指定数据库下

1. 在数据表名字前面加上数据库名字,用.”连接   数据库.数据表

 create table mydatabase.class(name varchar(10));

2.在创建数据表前进入到某个具体数据库   use 数据库名字;

 use database

 create table newtable(name varchar(10));

默认创建到当前所在数据库

 

表选项,与数据库选项类似

engine:存储引擎,MySQL提供的具体的存储数据方式,默认innodb5.5以前默认myisam

charset:字符集,只对当前自己表有效(级别比数据库高)

collate:校对集,只对当前自己表有效

 

复制已有表结构

从已经存在的表复制(只复制结构,表中有数据不复制)

基本语法:create table新表名 like 表名;  只要使用数据库.表名,就可以在任何数据库下访问其他数据库的表名

use test(进入test数据库)

create table teacher like mydatabase.teacher

alter user ‘root’@’localhost’ identified with mysql_native_password by ‘password’

显示数据表

.frm文件代表结构文件(结构文件来自于innodb存储引擎)

ibdata存储所有innodb存储引擎所对应的表数据

显示所有表

基本语法:show tables

匹配显示表

基本语法:show tables like ‘匹配模式’;

show tables like’c%’;

显示表结构

本质含义:显示表中包含的字段信息(名字,类型,属性等)

describle 表名

desc 表名

show columns from 表名

显示表创建语句

查看数据表创建时的语句(看到的语句已经不是用户之前输入的)

基本语法:show create table 表名;

 

mysql结束语句

\g  (前两个字段在上排横着,下面跟对应的数据)

\G  (字段在左侧,数据在右侧)有时候更直观

 

设置表属性

表属性指的就是;engine引擎 ,charset字符集 , collate校对集

基本语法:alter  table  表名 表选项 [=]可有可无   所做的修改;

注意:如果数据库已经确定了,里面有很对数据了,不要轻易修改表选项(字符集影响不大)

修改表结构

修改表名:rename table 旧表名 to 新表名;          (数据库中数据表名字通常有前缀,取数据名前两个字母加下划线 例:my_表名)

 

修改表选项:alter table 表名 表选项 [=] 新值;

 

新增字段:alter table 表名 add [column] 新字段名 列类型[列属性]  [位置first/after 字段名]     (默认加到表的最后面)     

字段位置:字段想要存放的位置。

first:在某某之间(最前面),第一个字段

after 字段名:放在某个具体的字段后(默认的)

 

修改字段名

alter table 表名 change 旧字段名 新字段名 字段类型[列属性] [位置属性]   (修改名字需要修改字段类型)

 

修改字段类型(属性):

alter table  表名  modify 字段名  新类型 [新属性]  [新位置]

 

删除字段:alter  table 表名 drop 字段名;

 

删除表结构

基础语法:drop  table 表名[,表名2….];     可同时删除多个表

 

数据基础操作

插入操作

本质:将数据以SQL的形式存储到指定的数据表(字段)里面。

基本语法(向表中指定字段插入):insert into 表名[(字段列表)]  values(对应字段列表)

例:insert into test_mysql1 (name,age) values (‘jack’,11);

注意:后面values中 ,对应的值列表只需与前面的字段列表相对应即可(不一定与表结构完全一致)

字段列表不一定非要有所有的表中字段

向表中所有字段插入:insert into 表名 values (对应表结构)  //值列表必须与字段列表一致  

 

查询操作

查询表中全部数据:select * from 表名;   *表示匹配表中所有字段

查询表中部分数据:select 字段列表 from 表名;  字段列表使用‘ , ’隔开

简单条件查询:select 字段列表/* from 表名 from 表名 where 字段名=

 

例:select name from test_mysql1 where age =33;    mysql中没有==

 

删除操作

基本语法:delete from 表名 [where条件] 如果没有where条件,意味着系统会自动删除该表所有数据(慎用)

 

更新操作

将数据进行修改(通常是修改部分字段数据)

基本语法:update 表名 set 字段名 = 新值 [where条件]

如果没有where 那么 表中所有数据对应字段都会被修改成统一值。

 

字符集

字符编码

字符在计算机中对应的编码(二进制)

字符集

多个字符集合,常见的有:ASCII字符集,GB2312字符集,Unicode字符集

 

设置客户端所有字符集

如果直接通过cmd 下的mysql.exe来操作msqld.exe 可能会出错。

原因:

1.用户通过mysql.exe来操作mysqld.exe

2.真正SQL执行是mysqld.exe来执行

3.mysql.exe 将数据传入mysqld.exe 的时候,没有告知其对应的符号规则(字符集),而mysqld也没有能力自己判断,就会使用默认的(字符集)

 

解决方案:mysql.exe 客户端在进行数据操作之前将自己所使用的字符集告诉mysqld

cmd 下的mysql.exe默认都只有一个字符集:GBK

 

mysql如何告知mysqld对应字符集的类型是GBK

快捷方式:set names 字符集;

重新进行数据插入:GBK

深层原理:客户端,服务端,连接层

mysql.exe mysqld.exe 之间关系分为三层:

客户端传入数据给服务端:client:character_set_client

服务端返回数据给客户端:server:character_set_results

客户端与服务端之间的连接:connection(中间层):character_set_connection

set names 字符集 本质:一次性打通三层关系的字符集 ,变得一致。

在系统中有三个变量来记录着这三个关系对应的字符集:show variables like ‘character_set_%’;

修改服务器端对应的值: set 变量名=值;

set charaset_set_client=gbk

connection 只是为了方便客户端与服务端进行字符集转换而设,不修改也没有关系。

只要让client:character_set_client server:character_set_results字符集一致就可以了

set names gbk

1.set charaset_set_client=gbk; 为了让服务器识别客户端传来的数据

2.set charaset_set_connection=gbk; 更好的帮助客户端与服务端进行字符集转换

3.set charaset_set_results=gbk;  为了告诉客户端服务端所有的返回的数据字符集

校对集

数据比较的方式

校对集有三种格式:

_bin:binary, 二进制比较,取出二进制位,一位一位的比较,区分大小写

_cs:case sensitive,大小写敏感,区分大小写

_ci:case insensitice ,大小不写敏感,不区分大小写

 

查看数据库所支持的校对集:

show collation

校对集应用

只有当数据产生比较的时候,校对集才会生效

默认校对集ci

对比: 使用utf-8_bin_ci来验证不同的校对集的效果

1. 创建不同校对集对应的表

create table my_collate_bin(name char(1)) charset utf8 collate utf8_bin;

create table my_collate_ci(name char(1)) charset utf8 collate utf8_general_ci;

2.插入数据:insert into my_collate_bin values (‘a’),(‘b’),(‘c’),(‘d’);

insert into my_collate_ci values (‘a’),(‘b’),(‘c’),(‘d’);

3.比较:根据某个字段进行排序:order by 字段名[asc|desc]

select *from my_collate_bin order by name;

select*from my_collate_ci order by name;

ci不区分大小写,排序不会变化

校对集:必须在有数据之前声明好,有了数据再进行校对集修改,修改无效。

乱码问题

列类型

整型(整数类型)

tinyint迷你整形,系统采用一个字节来保存的整型 一个字节=8bit 最大0-255-128-127

smallint小整形,系统采用两个字节来保存的整型,0-65535

mediunint中整型,系统采用三个字节来保存的整型

int整型,系统采用四个字节来保存的整型

bigint,系统采用八个字节来保存的整型

1.创建数据表

mysql> create table my_int(int_1 tinyint,int_2 smallint,int_3 mediumint,int_4 in

t,int_5 bigint) charset utf8;

2. 插入数据(tinyint255错误的,超出范围)

3. 并非没有那么大的空间,而是mysql默认为整型增加负数,实际为-128-127

实际中:根据对应数据范围来选定对应的整形类型,通常使用比较多的是tinyintint

 

无符号标识设定

无符号表示:存出数据在当前字段中没有负数(只有整数,区间0-255

基本语法:在类型后加一个unsigned

tinyint3unsigned:表示最长可以显示3位(unsigned 0-255永远不会超过3个长度)

tinyint4):表示最长可以显示4位(-128-127

 

(显示长度)代表了数据是否可以达到指定长度,但不会自动满足到指定长度,如果想要数据显示的时候,保持最高位显示长度,那么还需要给字段增加一个zerofill属性。

 

zerofill:从左侧开始填充0,(左侧不会改变数值大小),所以负数时不能使用zerofill

一旦使用zerofill就相当于确定该字段为unsigned

数据显示时,zerofill会在左侧填充0到指定位,如果不足三位,那么填充到3位,如果已经够了或超出那么不填充。

 

tinyint2

可以指定显示长度,超出长度(不超出范围)不会影响,只会对不够长度的进行补充(显示长度)

小数类型

专门用来存储小数的

浮点型和定点型

浮点型

浮点型能存较大的数,但不精确,利用存储数据的位来存指数

又称精度类型,有可能丢失精度的数据类型,数据有可能不那么准确,尤其是在超出精度长度范围时。

float:有称单精度类型,系统提供4个字节存储数据,但表示的数据范围比整型大,大概10^38,但只能保证大概7个精度以内,超过7位不准确。

double 双精度,8个字节存储数据,10^308,精度15位左右。

 

float:表示不指定小数位的浮点数

floatM,D):一共存储M位的有效数字,小数位为D

float10,2):整数位8,小数位2

如果插入数据超出精度,精度丢失那么浮点型按四舍五入计算。

用户不能插入数据直接超过指定的整数部分长度,但如果是系统自动进位导致,系统可以承担。

浮点数可以用科学计数法来存储数据。  例:10e5    =10^5

浮点数应用:保存一些数量大,大到可以不用那么精确的数据。

 

Double:又称双精度,系统用8个字节存储数据,10^308, 但精度只有15位。

 

定点数

能够保证数据精确的小数(小数部分可能不精确,超出长度四舍五入),整数部分一定精确

 

decimal定点数,系统自定根据存储的数据来分配存储的空间。每大概9个数会分配4个字节来进行存储,同时整数和小数部分是分开的。

decimalM,D):M表示总长度,最大值不能超过65D代表小数部分长度,最长不能超过30

定点数如果整数进位超过长度也会报错。

应用:如果涉及到钱的时候有可能使用定点数

 

日期时间类型

1.date

日期类型:系统使用三个字节来存储数据,对应的格式为:YYY-mm-dd :能表示的范围是1000-01-019999-12-12

2.Time

时间类型,能表示某个指定时间,系统提供3个字节来存储 HH:ii:ss  mysqltime能表示的范围大得多,从-83859:59-83859:59,在mysql中具体的用处是用来描述时间段。

 

3.datetime

日期时间类型:将前面的datatime合并起来,表示的时间 ,使用8个字节存储数据,YYY-mm-dd HH:ii:ss ,表示的区间1000-01-01 00:00:00  9999-12-12 23:59:59

可以为0值  0000-00-00 00:00:00

 

4.timestamp

时间戳类型,表示从格林威治时间开始,格式仍然是:YY-mm-dd HH:ii:ss

 

5.year

年类型:占用一个字节来保存,能保存1900-2155年,但year有两种数据插入方式:0-99和四位数的具体年。

 

 

    原文作者:Lxy_Python
    原文地址: https://blog.csdn.net/Lxy_Python/article/details/80301512
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞