zoukankan      html  css  js  c++  java
  • MySQL学习笔记

    MySQL学习笔记

    1.数据库介绍

    1.1数据库概述

    数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据进行存储起来,用户可以对数据库中的数据进行增加,修改,删除和查询的操作。

    随着互联网的高速发展,大量的数据在不断的产生,伴随而来的是如何高效安全的存储数据和操作数,而这一问题成为了信息时代的一个非常大的问题。

    使用数据库可高效的有条理的储存数据:

    1. 结构化存储大量数据
    2. 有效的保持数据的一致性和完整性

    1.2常见数据库

    数据库又分为关系型数据库和非关系型数据库

    关系型数据库:

    • MySQL

      开源免费的数据库,中型的数据库,已经被oracle收购,MySQL6.x版本也开始收费

    • Oracle

      收费的大型数据库,Oracle公司的产品,Oracle收购sun公司,收购MySQL

    • DB2

      IBM公司的数据库产品,收费的,常应用在银行系统中使用

    • SQLServer

      MicroSoft公司收费的中型数据库。C#、.net等语言常使用

    • SQLite

      嵌入式的小型数据库,应用在手机端。

    非关系型数据库:

    • Redis

      是一个小而美的数据库,主要用在key-value的内存缓存,读写性能极佳

    • HBase

      HBase是列式数据库,目标是高效存储大量数据

    • MongoDB

      MongoDB是文档型数据库,非常接近于关系型数据库

    接下来在linux中安装上mysql,进行下一步的mysql的学习吧。

    1.3MySQL登录

    MySQL是一个需要账户名密码登录的数据库,登录后使用,它提供一个默认的root账号,使用安装时设置的密码即可登录,登录又两种方式

    方式1:

    mysql -u用户名 -p密码

    或者不想显示密码先不输入密码,保留前面的代码即可

    方式2:

    mysql --host=192.168.150.128 --user=root --password=123456

    登录成功后安装一下DataGrip,接下来会用到

    2.SQL语句

    2.1SQL语句介绍

    结构化查询语言(Structured Query Language)简称SQL,是关系型数据库管理系统都需要遵循的规范,是数据库认识的语句。不同的数据库生产厂商都支持SQL语句,但都有特有内容。

    普通话:个数据库厂商都遵循的ISO标准。

    方言:数据库特有的关键字。

    2.2SQL的分类

    DDL(数据定义语言):用来操作数据库整体和表整体

    • 创建、删除数据库
    • 创建、删除、修改表

    DML(数据操作语言):用来对数据库表中的数据进行增、删、改

    • 向表中添加、删除、修改数据

    DQL(数据查询语言):用来对数据库表中的数据进行查询

    • 查询表中的数据

    补充:DCL数据控制语言:用来定义数据库的访问权限,和安全级别,及创建用户。

    2.3SQL通用语法

    • SQL语句可以单行或多行书写,以分号结尾

    • 可使用空格和缩进来增强语句的可读性

    • MySQL数据的SQL语句不区分大小写,关键字建议用大写

      例如:SELECT * FROM user

    • 同样可以使用/**/的方式完成注释 -- #

    • MYSQL中我们常使用的数据类型如下

    整数类型

    • tinyInt 很小的整数(最大到127)
    • smallint 小的整数
    • mediumint 中等大小的整数
    • int(integer) 普通大小的整数(最大到2147482647)
    • bigint 最大2^64-1

    小数类型

    • float 单精度浮点型
    • double 双精度浮点型
    • decimal 压缩严格的定点数(10,2) 表示10个有效位,小数保留2位

    日期类型

    • year YYYY
    • time HH:MM:SS
    • date YYYY-MM-DD 年月日
    • datetime YYYY-MM-DD HH:MM:SS 相比date更加精确,还描述时间、分钟、秒钟
    • timestamp YYYY-MM-DD HH:MM:SS

    文本、二进制类型

    • char(m) m为0-255之间的整数定长 char(10) tom
    • varchar(m) m为0-65535之间的整数变长 varchar(10) tom,该类型会动态调整实际长度,不满足也会开辟一样的空间,如果长度超过m,则自动去掉m后的内容
    • tinyblob 允许长度0-255字节
    • blob 允许长度0-65535字节
    • mediumblob 允许长度0-167772150字节
    • longblob 允许长度0-4294967295字节
    • tinytext 允许长度0-255字节
    • text 允许长度为0-65535字节
    • mediumtext 允许长度0-167772150字节
    • longtext 允许长度为0-4294967295

    3.DDL之操作数据库:database

    3.1创建数据库

    格式

    create database 数据库名; #直接创建数据库,如果存在则会报错

    create database if not exists bigdata_db; #如果数据库不存在则创建

    create database 数据库名 character set 字符集 #创建数据库时设置字符集

    实例:

    image-20201129200711978

    在datagrip里面运行

    image-20201129200919336

    运行之后看到左边的schemas里面创建了对应bigdata_db数据库

    3.2查看数据库

    show databases;

    image-20201129201123003

    在下方显示出结果

    3.3删除数据库

    drop database 数据库名;

    例子:

    image-20201129201357402

    删除后

    image-20201129201345391

    3.4使用数据库

    use 数据库名

    实例:

    use bigdata_db;

    查看正在使用的数据库:

    select database();

    image-20201129201913618

    补充:UTF-8编码

    一个英文字母,数字-》一个字节

    一个字节-》8位-》10101010

    一个汉字-》三个字节

    4.DDL之表操作:table

    4.1创建表

    需要在数据库下才能创建表

    格式

    create table if not exists 表名{

    ​ 字段名 类型(长度)[约束],

    ​ 字段名 类型(长度)[约束],

    }

    注意:一个字段后需要加逗号,最后一个字段后面不需要加逗号

    类型:

    ​ varchar(n) 字符串

    ​ int 整型

    ​ double 浮点型

    ​ date 时间

    ​ timestamp 时间戳

    约束:

    ​ primary key 主键,被主键修饰字段中的数据不能重复,不能为null

    实例:

    image-20201129203428249 image-20201129203648371

    4.2查看表

    desc 表名;

    image-20201129203913692

    null 表示这一列的内容为不为空,不能为空是NO,可以为空是YES

    key 表示这一列是不是主键,不是则为空

    Default 表示默认值

    Extra 表示额外值

    4.3删除表

    drop table category;

    4.4修改表结构的语句

    alter table 表名 add 列名 类型(长度) [约束];

    注意:列名需要加``不然可能会报错

    作用:修改表添加列

    image-20201129204935237

    alter table 表名 change 旧列名 新列名 类型(长度) 约束;

    作用:修改表修改列名

    image-20201129205451863

    另一个用处:修改列的类型

    image-20201206192105197

    alter table 表名 drop 列名;

    作用:修改表删除列

    image-20201129205638202

    rename table 表名 to 新表名

    作用:修改表名

    image-20201206192614405

    5.DML操作数据库中的数据

    对数据库中的数据进行增删改

    5.1插入表记录:insert

    语法:

    --向表中插入某些字段

    insert into 表(字段1,字段2,字段3...)values(值1,值2,值3...);

    --向表中插入所有字段,字段的顺序为创建表时的顺序

    insert into 表 values(值1,值2,值3...);

    注意:

    • 值与字段必须对应,个数相同,类型相同
    • 值的数据大小必须在字段的长度范围内
    • 除了数值类型外,其他字段类型的值必须使用引号引起。(建议单引号)
    • 如果要插入空值,可以不写字段,或者插入null

    例子:

    image-20201206194000204 image-20201206194132782

    怎么看是否添加到表中呢:select * from 表名;

    image-20201206194314829

    如果不想写上那么多的字段名可以采用下面的方式:默认给全部的字段赋值,如果不想要写的值设为null

    image-20201206194634858

    也可以连续进行添加多个字段,但是在字段中间需要加,

    image-20201206195203401

    5.2更新表记录:update

    用来修改制定条件的数据,将满足条件的记录制定列修改为指定值

    语法:
    --更新所有记录的指定字段

    update 表名 set 字段名=值,字段名=值,...;

    --更新符号条件记录的指定字段

    update 表名 set 字段名=值,字段名=值,... where 条件;

    image-20201206195834285

    目前,咋们知道条件可以设置为=和!=即可

    5.3删除记录:delete

    逻辑删除

    磁盘删除

    语法:

    delete from 表名 [where 条件];

    如果不加[where 条件] 会将表中的所有数据删除

    image-20201206201755279 image-20201206201732656

    清空表的内容

    语法:

    truncate table 表名;

    这样会自动先删除表,再自动创建一个名字相同的表。

    注意:

    delete 一条条删除,不清空auto_increment记录数

    truncate 直接将表删除,重新建表,auto_increment将置为0,重新开始

    这里再解释一下auto_increment

    create table stu(
    id int primary key auto_increment,
    age int,
    score double
    );
    

    新建一张学生表

    image-20201206202756685 image-20201206202925982

    插入一条数据,设置id的时候设为null

    image-20201206203134793

    发现,标记了auto_increment之后,主键的值会自动增长,这个功能就是auto_increment的作用

    delete之后,再创建数据,如果不设置id,id会自动填充为auto_increment的值

    image-20201206203829246 image-20201206203921767

    5.4练习

    --update 练习

    创建一张这样的表

    image-20201206204451353

    插入数据

    image-20201206204701025

    需要进行下面的操作:

    • 将所有员工的薪水改为5000

      image-20201206204959733
    • 将姓名为'zhangsan'的员工薪水改为3000

      image-20201206205100351
    • 将姓名为'lisi'的员工薪水改为4000,sex设置为female

      image-20201206205212527
    • 将‘xiaohong’的薪水在原有的基础上增加1000

      image-20201206205325357

    6.SQL约束

    6.1主键约束

    primary key 约束唯一标志数据库表中的每条记录

    主键必须包含唯一的值。

    主键列不能包含NULL值。

    每个表都应该有一个主键,并且每一个表只能有一个主键。

    6.1.1主键约束

    方式一:创建表时,在字段描述出,声明指定字段为主键

    image-20201206210202909

    方式二:创建表时,在constraint约束区域,声明指定字段为主键:

    格式:

    [constraint 名称] primary key (字段列表)

    关键字constraint可以忽略,如果需要为主键命名,constraint不能省略,主键名称一般没用

    只有在删除主键的时候才会有一点用,所以一般直接用primary key(字段列表)即可

    字段列表需要使用小括号括住,如果有多字段需要使用逗号分隔。声明两个以上字段为主键,我们成为联合主键。

    create table Persons2(
    FirstName varchar(255),
    LastName varchar(255),
    Address varchar(255),
    City varchar(255),
    constraint pk_PersonID primary key (FirstName, LastName)
    );
    

    image-20201206211212676

    在联合主键的情况下

    image-20201206211357496

    当联合主键都相同的情况才会报错

    6.1.2删除主键约束

    如需撤销PRIMARY KEY约束,请使用下面的SQL

    ALTER TABLE Persons DROP PRIMARY KEY;

    6.1.3自动增长列

    使用auto_increment关键字,数据库自动生成字段的值,自动增长列类型必须是整形,自动增长列必须为键(一般为主键),详细解释位于5.3处。

    CREATE TABLE Persons(
        id int primary key auto_increment,
        age int
    );
    

    向persons添加数据时,可以不设置id字段的值,或者将值设置为null,数据库将自动维护主键值。

    扩展:默认AUTO_INCREMENT的开始值为1,如果希望修改起始值,请使用下列SQL语法

    ALTER TABLE Persons auto_incerment = 100;
    

    6.2非空约束

    not null 约束强制列不接受null值

    not null约束强制字段始终包含值,这意味着如果不向字段添加值,就无法插入新纪录或者更新记录。

    例子:

    CREATE TABLE Persons(
    	id int not null,
        age varchar(5) not null,
        address varchar(10)
    );
    

    重复或者不重复无所谓

    注意:插入字符串的NULL和NULL是不一样的

    INSERT INTO Persons values(1,'NULL');
    

    注意:如果有not null字段,但是INSERT却不填是不能成功的,如下面的age没有设置值,就会报错

    INSERT INTO Persons(id) values(1)
    

    6.3唯一约束

    UNIQUE 唯一约束标志数据库中的每条数据

    UNIQUE 和 PRIMARY KEY约束均为列或列集提供了唯一性的保证。

    PRIMARY KEY拥有自动定义的UNIQUE约束

    请注意,每个表可以有多个UNIQUE 约束,但是每个表只能有一个PRIMART KEY约束

    添加唯一约束:

    创建表示,在字段描述处,声明唯一:

    CREATE TABLE Persons(
        id int UNIQUE,
        age int not null
    );
    

    注意:null和任何值都不相等,和null也不相等

    id都为null的时候也是可以的

    6.4外键约束

    FOREIGN KEY 表示外键约束,将在多表中学习。

    7.DQL数据查询语言

    7.1准备工作

    7.2语法

    7.3简单查询

    7.4条件查询

  • 相关阅读:
    第十次作业
    第八次作业
    作业七--1
    作业五
    作业六
    作业四
    作业一
    作业三
    作业2
    jsp第一次作业
  • 原文地址:https://www.cnblogs.com/wrrr/p/14378017.html
Copyright © 2011-2022 走看看