MySQL笔记

1. 安装

下载地址:官网download地址

  • 注意1:当前MySQL Community Server 5.7.21版本是免安装版,不是exe文件
  • 注意2:不要下载Windows (x86, 64-bit), ZIP Archive Debug Binaries & Test Suite版
    安装参考:
    Win7安装MySQL 64位解压缩版
    Windows 10下mysql 64位 安装(mysql-5.7.11-winx64安装)
    要点归纳:
  • 选择正确版本
  • 设置环境变量
  • 配置my.ini文件
  • 管理员运行cmd,
  • data路径初始化:cd 到mysql bin文件夹中运行mysqld --initialize --console
2018-04-14T03:15:52.711719Z 1 [Note] A temporary password is generated for root@localhost: k9CRxtbKgt?j

记住这里的密码:root@localhost: k9CRxtbKgt?j

  • 安装MySQL服务:mysqld -install
  • 启动MySQL服务:net start mysql
    报错:
(C:\Users\leegang\Anaconda3) D:\MySQL\bin>net start mysql
MySQL 服务正在启动 .
MySQL 服务无法启动。

服务没有报告任何错误。

解决办法:
重新运行mysqld --initialize进行初始化,必要时可把之前配置的data文件夹删除


再次尝试启动MySQL 服务:net start mysql

(C:\Users\leegang\Anaconda3) D:\MySQL\bin>net start mysql
MySQL 服务正在启动 .
MySQL 服务已经启动成功。
  • 进入MySQL,修改root密码为123456
 mysql -u root -p
 alter user root@localhost identified by "123456";

需要确保①已经启动MySQL服务:net start mysql;②用管理员方式打开cmd
安装结束,记住启动MySQL服务的命令,记住你的root密码

2. 数据库系统DBS(Database System)

DBS=DBMS + DB

  • 数据库DB(database):存储数据的介质。分为
    -- 关系型数据库SQL:Qracle, DB2, mysql, access
    特点:安全(保存到磁盘基本不会丢失)、容易理解,但浪费空间(二维表)
    -- 非关系型数据库NoSQL(Not only SQL):mongodb, redis
    特点:效率高,但不安全(断电丢失)
  • 关系型数据库:是一种建立在关系模型(数学模型)上的数据库。
    -- 关系模型包含三个方面:数据结构(行列二维表)、操作指令集合(所有SQL语句)、完整性约束(表内数据约束、表与表之间的约束)
  • 数据库管理系统DBMS(Database Management System):管理数据库的软件
  • 数据库应用程序:数据库管理系统的补充
  • SQL语言:对数据库进行查询和修改的语言
    --DDL:数据定义definition语言,用来维护存储数据的结构。如:create,drop,alter等;
    --DML:数据操作manipulation语言,用来对数据进行操作。如:insert,delete,update等;
    --DCL:数据控制control语言,主要是负责权限管理。如:grant,revoke等。
    补充:SQL是一种约束,但不强制,不同的数据库产品内部可能会有一些细微差别。类似W3C与各类浏览器的关系。
    Q:关系型数据库的设计?
    01.找出系统中的存在的实体对象。比如:教师、学生、教师
    02.找出实体对象应该存在的数据信息:
    --教师:姓名、性别、工资、年龄
    --学生:姓名、性别、学号、学科
    --班级:班级名字、教师编号
    03.设定table表单,明确字段信息之间的关系和约束条件

3. MySQL数据库

MySQL数据库 是一种C/S结构的软件:客户端/服务端。
C/S结构特点:

  • 服务器一直在运行状态,客户端在需要的时候运行;
  • 若想访问服务器,必须通过客户端。

交互方式:

  1. 客户端连接认证,连接服务器,认证身份:mysql.exe -hPup

2.客户端发送SQL指令

3.服务器接收SQL指令:处理SQL指令,返回操作结果

4.客户端接收结果,显示结果

5.断开连接(释放资源):exit,quit,\q

例如:mysql.exe -hlocalhost -p3306 -uroot -p
(-h+主机)+(-p+端口,端口用于找软件)+(-u+)+(-p)
结构:

  • 数据库管理系统:DBMS
  • 数据库:DB
  • 数据表:Table
  • 字段:filed
g

4. SQL基本操作

分为三类:库操作、表操作、数据操作
前注:

  • 1.必须用分号;结尾,\g也等价于分号
  • 2.可以跨行,因为MySQL会自动寻找分号作为结束标记;
  • 3.通常不区分大小写

4.1库操作

A.新增数据库:

create database 数据库名字 [库选项];
  • 库选项:用来约束数据库,分为字符集设定charset、校对集设定collation
    注:常用字符集为GBK、utf8

例如:

create database mydatabase charset utf8;

创建中文名的database:

set names gbk
create database 我的数据库 charset utf8;

执行结果:

  • 会在data目录中创建相应的文件夹
  • 每个数据库文件夹中都会有opt文件,保存着库选项(charset和collations)

B.查看数据库:

  • 查看所有数据库:
show databases;
  • 查看指定部分的数据库,即模糊查询
show databases like 'pattern';

-- pattern表示正则匹配模式

C.查看数据库的创建语句:

show create database 数据库名字

D.更新、修改数据库:
--数据库名字不可以修改
--数据库仅允许修改:字符集charset和校对集collation

  • 修改字符集charset
alter database 数据库的名字 charset GBK;

E.删除数据库:

drop database 数据库名字

注意:删除不可逆

4.2 表操作

前注:表与字段是密不可分的;表的创建必须先明确所依附的数据库
A.新增数据表:

create table if not exists 表名(字段名字 数据类型,字段名字 数据类型)[表选项];
  • if not exists:如果表名不存在,就创建,否则不执行创建代码。
  • 字符集:charset
  • 校对集:collation
  • 存储引擎:engine,包括innodb和myisam

方法1显式指定该表所依附的数据库:

create table if not exists mydatabase.student(name varchar(10), gender varchar(10),
 number varchar(10), age int)charset utf8;

方法2隐式指定该表所依附的数据库:

  • 先进入某个数据库环境
  • 再创建table表
use mydatabase;

create table student(name varchar(10), gender varchar(10),
 number varchar(10), age int)charset utf8;

B.查看数据表:

  • 查看所有表:
show tables 
  • 查看部分表:
show tables like 'pattern'

-- pattern表示正则匹配模式

  • 查看表的创建语句:
show create table 表名;
  • 查看表结构:查看表中的字段信息
desc columns from 表名
或者:
describe columns from 表名
或者:
show columns from 表名

C.修改数据表:
包括修改表本身、修改表中字段两类

  • 修改表本身:表名、表选项(charset collation)
修改表名:
rename table 老表名 to 新表名
修改表选项:
alter table my_student charset utf8
  • 修改表字段:新增、修改、删除、重命名

--新增字段:
alter table 表名 add columns 字段名 数据类型 [列属性][位置];
位置:first、“after 字段名”(默认在最后)

alter table my_student add column id int first;
其中:
my_student为目标数据表;
id为新增字段的名称;
int为新增字段的属性;
 first为新增字段的位置。

--修改字段:
alter table 表名 modify 字段名 数据类型 [属性] [位置];

--重命名字段
alter table 表名 change 旧字段 新字段名 数据类型 [属性] [位置];

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

D.删除数据表
drop table 表名;

4.3数据操作

A.新增数据:insert
场景1:给table中的所有字段都插入数据:无需指定字段所属的列,但要求数据的顺序必须与表中字段列的顺序一致

insert into 表名 values (1列的值,2列的值,3列的值,……);

场景2:只在部分字段中插入数据,则需要选定字段列表:

insert into 表名 字段列表 values (值列表1),(值列表2),……;
insert into my_student(number, sex, name, id) values(“itcast001”,“male”,“Tom”,“3”,),(“itcast002”,“female”,“Mary”,“15”,)

B.查看数据

查看表中全部数据:
select * from 表名
按条件查看数据:
select 筛选列名 from 表名 where 筛选条件;
select id,number,sex from my_student where id=1;

C.更新数据

update 表名 set 字段 = 值 [where 筛选条件]
#这里不加table

D.删除数据

delete from 表名 where 筛选条件
#这里不加table

5.中文数据问题

参考:玩转MySQL数据库P20
编码矛盾:

  • MySQL服务器默认用utf8编码格式来解析输入的数据
  • 然而,输入汉字时,它的编码格式是gbk
  • 因此,解析错误

第一步:查看服务器用于与客户端进行沟通的字符编码格式

show variables like 'character_set%';

第二步:修改服务器与客户端沟通的编码格式为gbk

set character_set_client = gbk;

--服务器端的中文显示正确!

第三步:修改服务器反馈给客户端的数据编码格式为GBK

set character_set_results = gbk;

--客户端从服务器接收中文数据后也能正确显示!

第四步:set = value的更改方法只是当前对话有效,重启后失效。
措施:

set names = gbk;

等效于设置服务器的编码:

set character_set_client, character_set_connection, character_set_results = gbk

其中,character_set_connection是连接层的编码格式,能够提高转码效率,不设也能正常转码。

6. Web乱码问题

参考:玩转MySQL数据库P22
动态网站由三部分构成:浏览器、apache、数据库服务器

7. 校对集问题

参考:玩转MySQL数据库P21
校队集:数据比较的方式,只有当数据产生比较的时候,校对集才会生效。
校对集的三种格式:
_bin:binary,二进制比较,取出二进制位,一位一位的比较,区分大小写;
_cs: case sentive, 大小写敏感,区分大小写;
_ci: case insensitive, 大小写不敏感,不区分大小写;
查看校对集:

show collation;

创建table表时指定校对集:

create table my_table(name char(a))charset utf8 collate utf8_bin;

这里指定了校对集为collate utf8_bin。在对该table进行排序等比较时,将按照二进制进行比较。

修改已存在table的校对集:
修改无效!

8.MySQL的数据类型

列类型

MySQL列数据类型

第一类:数值型
整数型:系统为了节省磁盘空间,将其细分为5类。

  • tinyint(常用): 迷你整型,使用1个字节存储,最多为256种;
  • smallint:小整型,使用2个字节存储;
  • mediumint:中整型,使用3个字节存储;
  • int(常用):标准整型,使用4个字节存储;
  • bigint:大整型,使用8个字节存储;

创建整型数据表:

create table my_table_int(
name1 tinyint, name2 smallint,
names int, name4 bigint
)charset utf8;

指定数据的显示宽度:当数据不够显示宽度的时候,就会自动添加前导0让数据变成相应的显示宽度。

create table my_table_int(name1 tinyint(5))charset utf8;
#这里name1 tinyint(5)的5就是指定显示宽度,不影响内部运算时的数据类型

第二类:小数型
SQL中将小数型又细分为浮点型和定点型。

  • 定点型decimal:保证整数部分绝对不会被四舍五入,而小数部分有可能丢失精度。
    ----引用方法:decimal(M,D)
    其中,M为总长度,不能超过65;D为小数部分长度,不能超过30;整数部分长度为M-D
  • 浮点型float、double:是一种精度型数据,因为超出范围后会自动四舍五入。
    ----引用方法:float(M,D)
    其中,M为总长度,D为小数部分长度,整数部分长度为M-D

你可能感兴趣的:(MySQL笔记)