MySQL数据库
需要学习或者了解的数据库
-
MySQL数据库
Sun公司 --- > Oracle公司
-
Oracle数据库
Oracle公司
-
SQLServer数据库
微软公司
关系型数据库和非关系型数据库
-
关系型数据库(RDBMS)
1、特征是数据库有很多张二维表格组成,这些表与表之前存在着某种关系(外键,一对多,多对多) 2、关系型数据库:MySQL、Oracle、SQLServer、DB2
-
非关系型数据库(NoSQL)
1、特征是数据库中存储的是键值对(name:张三,age:18,city:北京) 2、非关系型数据库:MangoDB、Redis、HBase、Neo4J,ES
MySQL的特点和版本
-
特点
1、MySQL是Oracle公司旗下的产品 2、MySQL一张表最多可以存储千万条数据,超过这个级别,性能会严重下降 3、我们既可以使用SQL语言来操作MySQL,也可以使用Java、Python来操作MySQL
-
版本
1、基础班使用MySQL8.0社区版 2、就业班使用MySQL5.x版本
MySQL的命令行登录方式
-
方式1
mysql -uroot -p 回车输入密码
-
方式2
mysql -uroot -p123456 回车进入
-
方式3
#-h指定主机 -P指定端口 -u用户名 -p密码 mysql -h localhost -P 3306 -u root -p123456 #连接本主机 mysql -h 192.168.88.100 -P 3306 -u root -p123456 #连接指定主机
SQL语言的特点
-
SQL的介绍
1、SQL的全称:Structed Query Language 结构化查询语言 2、SQL是所有数据库系统必须遵循的语言,每个数据库可能会有自己独特的语法
-
SQL的分类
-
DDL-数据定义语言
DDL是对数据库和表整体进行操作,不涉及到表内容 create 、drop、show
-
DML-数据操作语言
DML是表中的数据进行:增删改 insert、delete、update
-
DQL-数据查询语言
DQL就是查询表中的数据 select、from、where
-
DCL-数据控制语言
DCL是对数据库进行权限控制
-
SQL的数据类型
-
整形
tinyint :-128到127 smallint: 0到65535 int : -2147483648 到 2147483647 bigint :-9223372036854775808 到 9223372036854775807
-
浮点型
#以下类型有安全隐患 float: 类型能够存储大约6到7位的有效数字 ,存放较小位数的数据 double:类型能存储大约15位的有效数字,存放较较大位数的数据 #以下类型用于生产环境 decimal(m,d): decimal(10,2) 10表示有效数字(整数位数+小数位数),保留两位小数, 整数部分最多8位
-
日期类型
year : 年 2015 time : 时分秒 11:23:45 date : 年月日 2024-04-12 datetime : 2024-04-12 11:23:45 timestamp: 2024-04-12 11:23:45 `DATETIME`的范围是从1000-01-01 00:00:00.000000到9999-12-31 23:59:59.999999;而`TIMESTAMP`的范围是从1970-01-01 00:00:01.000000到2038-01-19 03:14:07.999999。
-
字符类型
varchar(10) :该列的字符最多是10个,如果超过10个则会自动截取,如果不够10个,有多少就开辟多少空间,不会浪费空间,你设置的是上限 create table stu( city_name varchar(10) #张三 );
-
小结
字符:varchar 整数:int 浮点型:decimal 日期型:date,datetime
SQL的DDL操作-数据库操作
#1、数据库操作
-- 创建数据库
#如果数据库不存在则创建,否则什么也不做
create database if not exists bigdata_db;
#如果数据库不存在则创建,否则什么也不做,设置字符编码为utf8
create database if not exists bigdata_db character set utf8;
-- 查看数据库的编码
SHOW VARIABLES LIKE 'character_set_database';
-- 查看所有数据库
show databases;
-- 删除数据库
/*
在mysql中删表,删库用的是drop,而删除数据用的是delete
在安装好mysql之后,系统会自带四个数据库不能删除
information_schema
mysql
performance_schema
sys
*/
drop database if exists bigdata_db;
-- 选择使用哪个数据库
use bigdata_db;
-- 查询你当前使用的是哪个数据库
select database();
SQL的DDL操作-表操作
#2、--------------表操作-----------------------
-- 创建表
create table if not exists emp(
dept_name varchar(5),
emp_id int,
emp_name varchar(32),
sex varchar(2),
age int,
sal decimal(10,2),
hiredate date
);
-- 查看所有表
show tables;
-- 查看表结构
desc emp;
-- 删除表
drop table if exists emp;
-- 给表添加一列:job
-- alter table 表名 add 列名 类型(长度) [约束];
alter table emp add job varchar(12);
-- 删除表的一列数据
-- alter table 表名 drop 列名;
alter table emp drop job;
-- 将sex列名改为gender
-- alter table 表名 change 旧列名 新列名 类型(长度) 约束;
alter table emp change sex gender varchar(2);
-- 将表名由emp改为employee
-- alter table 旧表名 rename to 新表名
alter table emp rename to employee;
SQL的DML操作-插入操作
-
语法
-- 格式:insert into 表 (字段1,字段2,字段3...) values(值1,值2,值3...);
-
操作
-- 1、向表中添加数据 -- 格式:insert into 表 (字段1,字段2,字段3...) values(值1,值2,值3...); insert into bigdata_db.employee(dept_name, emp_id, emp_name, gender, age, sal, hiredate,job) values('研发部',1,'乔峰','男',20,5000.5,'2023-03-12','总监'); insert into bigdata_db.employee(dept_name, emp_id, emp_name) values('研发部',2,'段誉'); insert into bigdata_db.employee values('研发部',3,'虚竹','男',23,3500,'2023-03-14','组长'); insert into bigdata_db.employee values ('研发部',4,'阿紫','女',16,7800,'2022-04-23','人事'), ('销售部',5,'扫地僧','男',88,9900,'2022-03-31','组长'), ('销售部',6,'李秋水','女',19,6500,'2021-11-14','销售'), ('销售部',7,'鸠摩智','男',67,1500,'2024-12-14','行政'); insert into bigdata_db.employee values('研发部',14,'一灯大师','男',null,null,null,'');
SQL的DML操作-修改操作
-
语法
update 表名 set 字段名=值,字段名=值,...;
-
操作
-- 修改一列的全部字段值, 该操作不建议做 update employee set gender = '男'; -- 修改emp_id为2的员工性别为男 update employee set gender = '男' where emp_id = 2; -- 修改emp_id为2的员工年龄和薪资 update employee set age = 21,sal=7800 where emp_id = 2; -- 给所有人的薪资加上10元 update employee set sal = sal + 10 ; -- 将emp_id为4/6/8的性别修改为女 update employee set gender = '女' where emp_id = 4 or emp_id = 6 or emp_id = 8; -- 把薪资低于5000的加10块 update employee set sal = sal + 10 where sal < 5000; -- 将入职日期超过3年的员工薪资加10元 update employee set sal = sal + 10 where datediff(now(),hiredate) / 365 >= 3; select datediff(now(),'2015-12-23')
SQL的DML操作-删除操作
- 语法
delete from 表名 [where 条件];
-
操作
delete from employee where emp_name = '一灯大师'; -- 清空表数据,表还在,内容清空 truncate table stu;
SQL的约束
主键约束
特点
1、该列的值必须唯一,不能重复
2、该列的值不能为null
3、一张表只能有一个主键
4、主键约束关键字:PRIMARY KEY
创建主键方式
-
方式1
#方式1:在创建数据表时添加主键 drop table if exists person; CREATE TABLE if not exists person ( id INT primary key, name VARCHAR (100) , address VARCHAR (100), city VARCHAR(100) );
-
方式2
#方式2:在创建数据表字段最后添加-单列主键 drop table if exists person; CREATE TABLE if not exists person ( id INT , name VARCHAR (100) , address VARCHAR (100), city VARCHAR(100), primary key (id) ); #方式2:在创建数据表字段最后添加-多列主键(联合主键,复合主键) /* 联合主键只要有一列不同,则就可以实现插入 */ drop table if exists person; CREATE TABLE if not exists person ( id INT , name VARCHAR (100) , address VARCHAR (100), city VARCHAR(100), primary key (id,name) );
-
方式3
#方式3:在创建数据表之后通过修改表结构添加主键 drop table if exists person; CREATE TABLE if not exists person ( id INT , name VARCHAR (100) , address VARCHAR (100), city VARCHAR(100) ); alter table person add primary key (id,name) ;
操作代码
-- 1、-----------主键约束-----------------
/*
关键字:PRIMARY KEY
特点:
1、该列的值必须唯一,不能重复
2、该列的值不能为null
3、一张表只能有一个主键
*/
#方式1:在创建数据表时添加
drop table if exists person;
CREATE TABLE if not exists person
(
id INT primary key,
name VARCHAR (100) ,
address VARCHAR (100),
city VARCHAR(100)
);
insert into person values (1,'刘备','河北','石家庄');
insert into person values (1,'关羽','河北','邯郸'); #主键为1,发生了重复,不能插入
insert into person values (2,'关羽','河北','邯郸'); #主键为2,不重复,可以插入
insert into person values (null,'张飞','河北','保定'); #主键不能为null,
insert into person(name) values ('赵云'); #主键列id没有赋值,自动为null,不能插入
#方式2:在创建数据表-单列主键
drop table if exists person;
CREATE TABLE if not exists person
(
id INT ,
name VARCHAR (100) ,
address VARCHAR (100),
city VARCHAR(100),
primary key (id)
);
#方式2:在创建数据表-多列复合主键(还是一个主键)
/*
联合主键只要有一列不同,则就可以实现插入
*/
drop table if exists person;
CREATE TABLE if not exists person
(
id INT ,
name VARCHAR (100) ,
address VARCHAR (100),
city VARCHAR(100),
primary key (id,name)
);
insert into person values (5,'曹操','河南','许昌'); #主键为1,发生了重复,不能插入
insert into person values (5,'典韦','河南','洛阳'); #主键为1,发生了重复,不能插入
insert into person values (6,'曹操','河南','洛阳'); #主键为1,发生了重复,不能插入
#方式2:在创建数据表之后通过修改表结构添加主键
drop table if exists person;
CREATE TABLE if not exists person
(
id INT ,
name VARCHAR (100) ,
address VARCHAR (100),
city VARCHAR(100)
);
alter table person add primary key (id,name) ;
#删除主键
alter table person drop primary key ;
删除主键
#删除主键
alter table person drop primary key ;
自动增长
特点
1、关键字:auto_increment
2、自动增长必须和主键放在一起,不能单独使用,而且必须是数字列
3、自动增长默认是从1开始增长
4、delete删除数据之后,会自动保留历史主键,下次从最大的主键开始增长,如果想从1开始增长,则需要使用truncate清空数据才可以
操作
- 2、-----------自动增长-----------------
/*
1、只有主键列才能加自动增长
2、主键默认是从1开始增长,每次加1
*/
drop table if exists person;
CREATE TABLE if not exists person
(
id INT primary key auto_increment,
name VARCHAR (100) ,
address VARCHAR (100),
city VARCHAR(100)
);
insert into person values (null,'刘备','河北','石家庄');
insert into person values (null,'刘备','河北','石家庄');
insert into person values (null,'刘备','河北','石家庄');
insert into person values (null,'刘备','河北','石家庄');
insert into person values (null,'刘备','河北','石家庄');
insert into person values (null,'刘备','河北','石家庄');
insert into person values (null,'刘备','河北','石家庄');
insert into person values (null,'刘备','河北','石家庄');
-- 设置从100开始增长
drop table if exists person;
CREATE TABLE if not exists person
(
id INT primary key auto_increment,
name VARCHAR (100) ,
address VARCHAR (100),
city VARCHAR(100)
)AUTO_INCREMENT = 100;
-- 设置从100开始增长
drop table if exists person;
CREATE TABLE if not exists person
(
id INT primary key auto_increment,
name VARCHAR (100) ,
address VARCHAR (100),
city VARCHAR(100)
);
ALTER TABLE person AUTO_INCREMENT = 200;
insert into person values (null,'刘备','河北','石家庄');
insert into person values (null,'刘备','河北','石家庄');
insert into person values (null,'刘备','河北','石家庄');
insert into person values (null,'刘备','河北','石家庄');
-- 删除id为1和2,查看新插入的数据自动增长从几开始
-- 主键永远都从历史最大值开始增量,不可能出现值倒退
delete from person where id <= 2;
insert into person values (null,'刘备','河北','石家庄');
delete from person;
ALTER TABLE person AUTO_INCREMENT = 150;
insert into person values (null,'刘备','河北','石家庄'); #还是从最大值
-- 如果你想重新从1开始自动增长,则需要将表删除,重新建立新表,这个命令就是truncate
truncate table person;
ALTER TABLE person AUTO_INCREMENT = 200;
insert into person values (null,‘刘备’,‘河北’,‘石家庄’);
insert into person values (null,‘刘备’,‘河北’,‘石家庄’);
insert into person values (null,‘刘备’,‘河北’,‘石家庄’);
insert into person values (null,‘刘备’,‘河北’,‘石家庄’);
– 删除id为1和2,查看新插入的数据自动增长从几开始
– 主键永远都从历史最大值开始增量,不可能出现值倒退
delete from person where id <= 2;
insert into person values (null,‘刘备’,‘河北’,‘石家庄’);
delete from person;
ALTER TABLE person AUTO_INCREMENT = 150;
insert into person values (null,‘刘备’,‘河北’,‘石家庄’); #还是从最大值
– 如果你想重新从1开始自动增长,则需要将表删除,重新建立新表,这个命令就是truncate
truncate table person;