MySQL笔记

作者: GaGLee | 来源:发表于2018-04-14 18:51 被阅读0次

    1. 安装

    下载地址:官网download地址

    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笔记

        本文链接:https://www.haomeiwen.com/subject/ognkkftx.html