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条件查询

原文地址:https://www.cnblogs.com/wrrr/p/14378017.html