MySQL数据库(从小白到入门 持续更新~)

MySQL数据库

需要学习或者了解的数据库

  • MySQL数据库

    Sun公司 --- > Oracle公司
    
  • Oracle数据库

    Oracle公司
    
  • SQLServer数据库

    微软公司
    

关系型数据库和非关系型数据库

  • 关系型数据库(RDBMS)

    1、特征是数据库有很多张二维表格组成,这些表与表之前存在着某种关系(外键,一对多,多对多)
    2、关系型数据库:MySQL、Oracle、SQLServer、DB2
    
    image-20240312110532507
  • 非关系型数据库(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是对数据库和表整体进行操作,不涉及到表内容
      createdropshow
      
    • DML-数据操作语言

      DML是表中的数据进行:增删改
      insertdeleteupdate
      
    • DQL-数据查询语言

      DQL就是查询表中的数据
      selectfromwhere
      
    • DCL-数据控制语言

      DCL是对数据库进行权限控制
      

SQL的数据类型

  • 整形

    tinyint :-128127 
    smallint: 065535
    int     : -21474836482147483647
    bigint  :-92233720368547758089223372036854775807
    
  • 浮点型

    #以下类型有安全隐患
    float: 类型能够存储大约67位的有效数字 ,存放较小位数的数据 
    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;

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT界的追风者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值