MySQL学习笔记
1.数据库介绍
1.1数据库概述
数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据进行存储起来,用户可以对数据库中的数据进行增加,修改,删除和查询的操作。
随着互联网的高速发展,大量的数据在不断的产生,伴随而来的是如何高效安全的存储数据和操作数,而这一问题成为了信息时代的一个非常大的问题。
使用数据库可高效的有条理的储存数据:
- 结构化存储大量数据
- 有效的保持数据的一致性和完整性
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 字符集 #创建数据库时设置字符集
实例:
在datagrip里面运行
运行之后看到左边的schemas里面创建了对应bigdata_db数据库
3.2查看数据库
show databases;
在下方显示出结果
3.3删除数据库
drop database 数据库名;
例子:
删除后
3.4使用数据库
use 数据库名
实例:
use bigdata_db;
查看正在使用的数据库:
select database();
补充:UTF-8编码
一个英文字母,数字-》一个字节
一个字节-》8位-》10101010
一个汉字-》三个字节
4.DDL之表操作:table
4.1创建表
需要在数据库下才能创建表
格式
create table if not exists 表名{
字段名 类型(长度)[约束],
字段名 类型(长度)[约束],
}
注意:一个字段后需要加逗号,最后一个字段后面不需要加逗号
类型:
varchar(n) 字符串
int 整型
double 浮点型
date 时间
timestamp 时间戳
约束:
primary key 主键,被主键修饰字段中的数据不能重复,不能为null
实例:
4.2查看表
desc 表名;
null 表示这一列的内容为不为空,不能为空是NO,可以为空是YES
key 表示这一列是不是主键,不是则为空
Default 表示默认值
Extra 表示额外值
4.3删除表
drop table category;
4.4修改表结构的语句
alter table 表名 add 列名 类型(长度) [约束];
注意:列名需要加``不然可能会报错
作用:修改表添加列
alter table 表名 change 旧列名 新列名 类型(长度) 约束;
作用:修改表修改列名
另一个用处:修改列的类型
alter table 表名 drop 列名;
作用:修改表删除列
rename table 表名 to 新表名
作用:修改表名
5.DML操作数据库中的数据
对数据库中的数据进行增删改
5.1插入表记录:insert
语法:
--向表中插入某些字段
insert into 表(字段1,字段2,字段3...)values(值1,值2,值3...);
--向表中插入所有字段,字段的顺序为创建表时的顺序
insert into 表 values(值1,值2,值3...);
注意:
- 值与字段必须对应,个数相同,类型相同
- 值的数据大小必须在字段的长度范围内
- 除了数值类型外,其他字段类型的值必须使用引号引起。(建议单引号)
- 如果要插入空值,可以不写字段,或者插入null
例子:
怎么看是否添加到表中呢:select * from 表名;
如果不想写上那么多的字段名可以采用下面的方式:默认给全部的字段赋值,如果不想要写的值设为null
也可以连续进行添加多个字段,但是在字段中间需要加,
5.2更新表记录:update
用来修改制定条件的数据,将满足条件的记录制定列修改为指定值
语法:
--更新所有记录的指定字段
update 表名 set 字段名=值,字段名=值,...;
--更新符号条件记录的指定字段
update 表名 set 字段名=值,字段名=值,... where 条件;
目前,咋们知道条件可以设置为=和!=即可
5.3删除记录:delete
逻辑删除
磁盘删除
语法:
delete from 表名 [where 条件];
如果不加[where 条件] 会将表中的所有数据删除
清空表的内容
语法:
truncate table 表名;
这样会自动先删除表,再自动创建一个名字相同的表。
注意:
delete 一条条删除,不清空auto_increment记录数
truncate 直接将表删除,重新建表,auto_increment将置为0,重新开始
这里再解释一下auto_increment
create table stu(
id int primary key auto_increment,
age int,
score double
);
新建一张学生表
插入一条数据,设置id的时候设为null
发现,标记了auto_increment之后,主键的值会自动增长,这个功能就是auto_increment的作用
delete之后,再创建数据,如果不设置id,id会自动填充为auto_increment的值
5.4练习
--update 练习
创建一张这样的表
插入数据
需要进行下面的操作:
-
将所有员工的薪水改为5000
-
将姓名为'zhangsan'的员工薪水改为3000
-
将姓名为'lisi'的员工薪水改为4000,sex设置为female
-
将‘xiaohong’的薪水在原有的基础上增加1000
6.SQL约束
6.1主键约束
primary key 约束唯一标志数据库表中的每条记录
主键必须包含唯一的值。
主键列不能包含NULL值。
每个表都应该有一个主键,并且每一个表只能有一个主键。
6.1.1主键约束
方式一:创建表时,在字段描述出,声明指定字段为主键
方式二:创建表时,在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)
);
在联合主键的情况下
当联合主键都相同的情况才会报错
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 表示外键约束,将在多表中学习。