zoukankan      html  css  js  c++  java
  • 数据库之初识MySQL

    什么是数据库

    数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,
    每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。
    我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。
    所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
    RDBMS即关系数据库管理系统(Relational Database Management System)的特点:
    1.数据以表格的形式出现
    2.每行为各种记录名称
    3.每列为记录名称所对应的数据域
    4.许多的行和列组成一张表单
    5.若干的表单组成database

    RDBMS常见术语

    • 数据库: 数据库是一些关联表的集合。.
    • 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
    • 列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
    • 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
    • 冗余:存储两倍数据,冗余可以使系统速度更快。(表的规范化程度越高,表与表之间的关系就越多;查询时可能经常需要在多个表之间进行连接查询;而进行连接操作会降低查询速度。例如,学生的信息存储在student表中,院系信息存储在department表中。通过student表中的dept_id字段与department表建立关联关系。如果要查询一个学生所在系的名称,必须从student表中查找学生所在院系的编号(dept_id),然后根据这个编号去department查找系的名称。如果经常需要进行这个操作时,连接查询会浪费很多的时间。因此可以在student表中增加一个冗余字段dept_name,该字段用来存储学生所在院系的名称。这样就不用每次都进行连接操作了。)
    • 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
    • 外键:外键用于关联两个表。
    • 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
    • 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
    • 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

    初识MySQL

    Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

    • Mysql是开源的,所以你不需要支付额外的费用。
    • Mysql支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
    • MySQL使用标准的SQL数据语言形式。
    • Mysql可以允许于多个系统上,并且支持多种语言。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
    • Mysql对PHP有很好的支持,PHP是目前最流行的Web开发语言。
    • MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。
    • Mysql是可以定制的,采用了GPL协议,你可以修改源码来开发自己的Mysql系统。

    MySQL安装

    Linux安装MySQL

    参考博客:https://www.cnblogs.com/phpxiebin/p/4988156.html

    Windows安装MySQL

    方式一:官网下载直接安装,网址http://dev.mysql.com/downloads/mysql/

    方式二:压缩包安装,参考博客:https://www.cnblogs.com/wusir66/p/9726933.html

    数据库基础操作

    用户操作

    创建用户:
    create user '用户名'@'主机名(%表示任意)' identified by '密码';      
    例:
    create user 'wusir'@'192.168.1.1' identified by '123123';
    create user 'wusir'@'192.168.1.%' identified by '123123';
    create user 'wusir'@'%' identified by '123123';
    删除用户
    drop user '用户名'@'IP地址';
    修改用户:
    rename user '用户名'@'IP地址' to '新用户名'@'新IP地址';
    修改密码:
    set password for '用户名'@'IP地址' = Password('新密码');

    PS:用户相关的信息保存在mysql库中的user表里

    授权

    格式:
    grant 具体操作的权限 on 数据库.表 to '用户名'@'主机名';
    例:
    grant select,insert,update on db1.t1 to 'wusir'@'%';
    grant all privileges on db1.t1 to 'wusir'@'%';

    数据中常见的数据类型

    数字
    整数:
            tinyint[(m)] [unsigned] [zerofill]
                小整数,数据类型用于保存一些范围的整数数值范围:
                有符号:
                    -128 ~ 127.
                无符号:
                    0 ~ 255
        int[(m)][unsigned][zerofill]
                整数,数据类型用于保存一些范围的整数数值范围:
                    有符号:
                        -2147483648 ~ 2147483647
                    无符号:
                        0 ~ 4294967295
        bigint[(m)][unsigned][zerofill]
                大整数,数据类型用于保存一些范围的整数数值范围:
                    有符号:
                        -9223372036854775808 ~ 9223372036854775807
                    无符号:
                        0  ~  18446744073709551615
    小数:
           decimal[(m[,d])] [unsigned] [zerofill]
                准确的小数值,m是数字总个数(负号不算),d是小数点后个数。 m最大值为65,d最大值为30。
                特别的:对于精确数值计算时需要用此类型
                       decaimal能够存储精确值的原因在于其内部按照字符串存储。
           FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
                单精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。
                    无符号:
                        -3.402823466E+38 to -1.175494351E-38,
                        0
                        1.175494351E-38 to 3.402823466E+38
                    有符号:
                        0
                        1.175494351E-38 to 3.402823466E+38
    
            DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
                双精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。
                    无符号:
                        -1.7976931348623157E+308 to -2.2250738585072014E-308
                        0
                        2.2250738585072014E-308 to 1.7976931348623157E+308
                    有符号:
                        0
                        2.2250738585072014E-308 to 1.7976931348623157E+308
    字符串
         char (m)
                char数据类型用于表示固定长度的字符串,可以包含最多达255个字符。其中m代表字符串的长度。
                PS: 即使数据小于m长度,也会占用m长度
          varchar(m)
                varchar数据类型用于变长的字符串,MySQL 数据库的varchar类型在4.1以下的版本中的最大长度限制为255。在 MySQL5.0以上的版本中,varchar数据类型的长度支持到了65535,也就是说可以存放65532个字节的数据。其中m代表该数据
    类型所允许保存的字符串的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中。 注:虽然varchar使用起来较为灵活,但是从整个系统的性能角度来说,char数据类型的处理速度更快,有时甚至可以超出varchar处理速度的50%。
    因此,用户在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡 text text数据类型用于保存变长的大字符串,可以组多到65535(2**16 − 1)bytes mediumtext A TEXT column with a maximum length of 16777215 (2**24 − 1)bytes longtext A TEXT column with a maximum length of 4294967295 or 4GB (2**32 − 1)bytes
     enum
                枚举类型,
                An ENUM column can have a maximum of 65,535 distinct elements. (The practical limit is less than 3000.)
                示例:
                    CREATE TABLE shirts (
                        name VARCHAR(40),
                        size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
                    );
                    INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),('polo shirt','small');
    
    set
                集合类型
                A SET column can have a maximum of 64 distinct members.
                示例:
                    CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));
                    INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');
    TIME
            DATE
                YYYY-MM-DD(1000-01-01/9999-12-31)
            TIME
                HH:MM:SS('-838:59:59'/'838:59:59')
            YEAR
                YYYY(1901/2155)
            DATETIME
                YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59)
            TIMESTAMP
                YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)

    数据库基本操作

    show databases;
    #显示有哪些数据库    
    use 数据库名称;
    #切换到选择的数据库    
    show tables;
    #展示当前数据库下有哪些表
    create database db2 default charset utf8;
    完整的创建一个数据库
    drop database db2;
    删除一个数据库
    create table t1(id int primary key auto_increment,name char(10))engine=innodb default charset=utf8;
    创建一个包含主键id和name字段的表
    delete from t1;
    清空表(id计数仍从清空前计数)
    truncate table t1;
    清空表(id计数从1计数)
    drop table t1;
    删除表
    desc 表名;
    查看表的字段
    show create table 表名;
    show create table 表名G;
    查看表的创建语句
    show variables like '%datadir%';
    查看mysql数据存储路径信息
    show variables like "%char%";
    查看mysql编码
      主键,一种特殊的唯一索引,不允许有空值,如果主键使用单个列,则它的值必须唯一,如果是多列,则其组合必须唯一。
                create table tb1(
                    nid int not null auto_increment primary key,
                    num int null
                )
                或
                create table tb1(
                    nid int not null,
                    num int not null,
                    primary key(nid,num)
                )
    主键
    外键,一个特殊的索引,只能是指定内容
                creat table color(
                    nid int not null primary key,
                    name char(16) not null
                )
    
                create table fruit(
                    nid int not null primary key,
                    smt char(32) null ,
                    color_id int not null,
                    constraint fk_cc foreign key (color_id) references color(nid)
                )
    外键

    表的基本操作

    1、增

    insert into 表 (列名,列名...) values (值,值,值...)
    insert into 表 (列名,列名...) values (值,值,值...),(值,值,值...)

    2、删

    delete from 表
    delete fromwhere id=1 

    3、改

    update 表 set name = 'wusir' where id>1

    4、查

    select * fromselect * fromwhere id > 1
    select nid,name,gender fromwhere id > 1
  • 相关阅读:
    git中Please enter a commit message to explain why this merge is necessary.
    用$(this)选择其下带有class的子元素
    将某页面中ajax中获取到的信息放置到sessionStorage中保存,并在其他页面调用这些数据。
    返回顶部黑科技
    对于div里面内容过大根据长度或者宽度进行适配,然后可以滚轮缩放的功能
    vue runtime报错问题
    webpack简单配置
    input type=color 设置颜色
    vue统一注册组件
    vue模板字符串写法
  • 原文地址:https://www.cnblogs.com/wusir66/p/10105969.html
Copyright © 2011-2022 走看看