1.数据库初识

什么是数据库

数据库就是存储数据的仓库

数据库管理系统(Database Management System,简写DBMS)

    是为管理数据库而设计的电脑软件系统,一般具有存储、截取、安全保障、备份等基础功能。

数据库分类

  1.关系型数据库

       关系型数据库把复杂的的数据结构归结为简单的二元关系

       常用的关系型数据库: oracle数据库,Mysql,MariaDB数据库,SQL Server数据库,Access数据库

   2.非关系型数据库

       非关系型数据库也被称为NoSQL数据库

       常见的非关系型数据库: Memcached,Redis,MongoDB

Mysql介绍

  下载地址: https://dev.mysql.com/downloads 

创建服务 mysqld --install

启动指令: net start mysql

关闭指令: net stop mysql

启动mysql自带的客户端来连接操作,指令 mysql -u root -p -u:用户 -p指定密码  -h指定ip地址  -P 指定端口号

 修改密码和忘记密码的解决方法

  第一种方法在命令行直接输入

  1.格式 : mysqladmin -u用户名 -p旧密码 password 新密码

         如  mysqladmin -uroot -proot password 123

   第二种方法在mysql命令行中输入

    格式:mysql> set password for 用户名@localhost = password('新密码'); 
 例子:mysql> set password for root@localhost = password('123'); 

   忘记密码的解决方案

    先打开一个dos命令框跳转到mysql\bin命令下 输入mysqld --skip-grant-tables 命令行卡住再打开一个dos命令框输入mysql回车 use mysql;切换 之后修改密码 update user set password=password("123") where user="root";然后刷新权限 flush privileges;退出 quit 电脑重启就解决 用户名密码就是root 和 123

或者退出后输入 tasklist |findstr mysql 查看mysql的当前进程

taskkill /F /PID 8728 杀死进程, 然后重新启动mysql就行

修改字符集编码

   查看数据库字符编码:

       show create database 数据库名\G;

  查看表格字符编码:

       show create table 表名称\G;

  查看各角色的字符编码

       show variables like '%char%';

  暂时性修改字符编码:

       set names utf8

    永久性修改字符编码

    需要在mysql是配置文件my.ini文件中添加

[mysqld]
character_set_server = utf8

[client]
default-character-set = utf8

[mysql]
user = root
password = root
default-character-set = utf8

   select user();查看当前登录的用户名

初识mysql语句

创建数据库: create database 数据库名;

查询: show databases; #查看所有数据库

         show database 数据库名 #查看单独数据库

修改: alter database 数据库名 charset latin1; 修改数据库字符集为latin1

删除: drop database 数据库名;

要到那个数据库下就要使用use 数据库名;进行切换

   select database();查看当前是那个库

表的创建:create table t1(id int,name char(10));

创建表单后有两文件

后缀名为.frm的文件:这个文件主要是用来描述数据表结构(id,name字段等)和字段长度等信息
后缀名为.ibd的文件:这个文件主要储存的是采用独立表储存模式时储存数据库的数据信息和索引信息;

查询: show tables;查看当前库的所有表

         show create table t1; 查看表单创建信息

         desc t1;

         desctibe t1;

改: alter table t1 modify name char(5); 修改字段的属性 ,将name字段的char长度修改为5

      alter table t1 change name name1 char(2); 修改字段的名字name 为name1 长度为2

删除: drop table t1;

对文件数据的操作:

   增加: insert into t1 values(1,'alex');

   查询: select * from t1; #查看t1表中所有字段的数据

   修改: update t1 set name = "sb" where id = 1; 如果没有写 where 指定就会把所有数据都修改

   删除:delete from t1 where id = 1; #删除id为1的数据

auto_increment 自增

primary key 约束 ;加快查找

\c 退出

数据库存储引擎分类

1.MyISAM引擎

MyISAM引擎特点:
        1.不支持事务
            事务是指逻辑上的一组操作,组成这组操作的各个单元,要么全成功要么全失败。
        2.表级锁定
            数据更新时锁定整个表:其锁定机制是表级锁定,也就是对表中的一个数据进行操作都会将这个表锁定,其他人不能操作这个表,这虽然可以让锁定的实现成本很小但是也同时大大降低了其并发性能。
        3.读写互相阻塞
            不仅会在写入的时候阻塞读取,MyISAM还会再读取的时候阻塞写入,但读本身并不会阻塞另外的读。
        4.只会缓存索引
            MyISAM可以通过key_buffer_size的值来提高缓存索引,以大大提高访问性能减少磁盘IO,但是这个缓存区只会缓存索引,而不会缓存数据。
        
        5.读取速度较快
            占用资源相对较少
        6.不支持外键约束,但只是全文索引
        7.MyISAM引擎是MySQL5.5版本之前的默认引擎,是对最初的ISAM引擎优化的产物。
MyISAM引擎的特点

2.InnoDB

InnoDB引擎
        介绍:InnoDB引擎是MySQL数据库的另一个重要的存储引擎,正称为目前MySQL AB所发行新版的标准,被包含在所有二进制安装包里。和其他的存储引擎相比,InnoDB引擎的优点是支持兼容ACID的事务(类似于PostGreSQL),以及参数完整性(即对外键的支持)。Oracle公司与2005年10月收购了Innobase。Innobase采用双认证授权。它使用GNU发行,也允许其他想将InnoDB结合到商业软件的团体获得授权。

InnoDB引擎特点:
        1.支持事务:支持4个事务隔离界别,支持多版本读。
        2.行级锁定(更新时一般是锁定当前行):通过索引实现,全表扫描仍然会是表锁,注意间隙锁的影响。
        3.读写阻塞与事务隔离级别相关(有多个级别,这就不介绍啦~)。
        4.具体非常高效的缓存特性:能缓存索引,也能缓存数据。
        5.整个表和主键与Cluster方式存储,组成一颗平衡树。(了解)
        6.所有SecondaryIndex都会保存主键信息。(了解)
        7.支持分区,表空间,类似oracle数据库。
        8.支持外键约束,不支持全文索引(5.5之前),以后的都支持了。
        9.和MyISAM引擎比较,InnoDB对硬件资源要求还是比较高的。
        
        小结:三个重要功能:Supports transactions,row-level locking,and foreign keys
InnoDB引擎特点
事务的四大特性:
        1.原子性(Atomicity)
            事务是一个不可分割的单位,事务中的所有SQL等操作要么都发生,要么都不发生。
        2.一致性(Consistency)
            事务发生前和发生后,数据的完整性必须保持一致。
        3.隔离性(Isolation)
            当并发访问数据库时,一个正在执行的事务在执行完毕前,对于其他的会话是不可见的,多个并发事务之间的数据是相互隔离的。也就是其他人的操作在这个事务的执行过程中是看不到这个事务的执行结果的,也就是他们拿到的是这个事务执行之前的内容,等这个事务执行完才能拿到新的数据。
        4.持久性(Durability)
            一个事务一旦被提交,它对数据库中的数据改变就是永久性的。如果出了错误,事务也不允撤销,只能通过'补偿性事务'
事务的四大特性

数据库基础数据类型

unsigned: 无符号

整型:

     tinyinit: 小整数

     有符号: -128 ~ 127

     无符号: 0 ~ 255

     int  整数

      有符号:

     -2147483648 ~ 2147483647

     无符号: 

      0 ~ 4294967295

     bigint: 大整数

  有符号:
       -9223372036854775808 ~ 9223372036854775807
  无符号:
       0  ~  18446744073709551615

模式设置和修改

select @@sql_mode #查看当前的模式

select @@global.sql_mode #查看全局模式

设置严谨模式永久生效

在my.ini文件中添加

[mysqld]   
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER

重启mysql

测试

mysql> create table t3(x tinyint);
mysql> insert into t3 values(-129);
ERROR 1264 (22003): Out of range value for column 'x' at row 1#报错就设置成功
mysql> insert into t3 values(-128);
Query OK, 1 row affected (0.00 sec)

浮点型:

      float: 单精度

    有符号:
               -3.402823466E+38 to -1.175494351E-38,
               1.175494351E-38 to 3.402823466E+38
    无符号:
               1.175494351E-38 to 3.402823466E+38

      double: 双精度

    有符号:
               -1.7976931348623157E+308 to -2.2250738585072014E-308
               2.2250738585072014E-308 to 1.7976931348623157E+308

    无符号:
               2.2250738585072014E-308 to 1.7976931348623157E+308

      decimal:精确,内部使用字符串存储 整数位最高支持65位,小数位最多支持30位

字符串:

      char: 简单粗暴,浪费空间,存储速度快

            字符长度范围:0-255(一个中文是一个字符,是utf8编码的3个字节)

     varchar:精准,节省空间,存储速度慢

             字符长度范围:0-65535(如果大于21845会提示用其他类型 。mysql行最大限制为65535字节,字符编码为utf-8)

时间类型:

        YEAR
            YYYY(范围:1901/2155)2018

        DATE
            YYYY-MM-DD(范围:1000-01-01/9999-12-31)例:2018-01-01 

        TIME
            HH:MM:SS(范围:'-838:59:59'/'838:59:59')例:12:09:32

        DATETIME

            YYYY-MM-DD HH:MM:SS(范围:1000-01-01 00:00:00/9999-12-31 23:59:59    Y)例: 2018-01-01 12:09:32

        TIMESTAMP

            YYYYMMDD HHMMSS(范围:1970-01-01 00:00:00/2037 年某时)

约束

not null 与 default

null 表示空,非字符串

not null 不可空

null 可空

PRIMARY KEY (PK)    标识该字段为该表的主键,可以唯一的标识记录
FOREIGN KEY (FK)    标识该字段为该表的外键
NOT NULL    标识该字段不能为空
UNIQUE KEY (UK)    标识该字段的值是唯一的
AUTO_INCREMENT    标识该字段的值自动增长(整数类型,而且为主键)
DEFAULT    为该字段设置默认值

UNSIGNED 无符号
ZEROFILL 使用0填充

 

posted @ 2019-02-24 15:14  等待の喵  阅读(373)  评论(0编辑  收藏  举报