数据库 = MySQL详解-基本命令

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

一.数据库概述

数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以
对数据库中的数据进行增加,修改,删除及查询操作。
 
数据库管理系统:
 
数据库管理系统(DataBase Managerment System, DBMS: 指一种操作和管理数据库的大型软
件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整
性。用户通过数据库管理系统访问数据库中表内的数据。
 
数据库与数据库管理系统关系:
 
数据库管理系统--->MySQL软件-->多个仓库--->多张表--->多条记录(数据)
 
数据库 = MySQL详解-基本命令
 
 
(1)实体(java类)和表关系
  • 一个实体对应一张表

  • 一个对象对应一条记录

  • 对象和记录产生映射关系【ORM: Object Relational Mapping】

(2)常见关系型数据库

1. MYSQL:开源免费的数据库,小型的数据库.已经被Oracle收购了,MySQL6.x版本(商业、社区)也开始收费。

2. Oracle:收费的大型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MYSQL。

3. DB2:IBM公司的数据库产品,收费的。常应用在银行系统中。

4. OceanBase:阿里的大型数据库,性能已超越Oracle全球第一

------------------------------------------------------

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

6. SyBase:已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。

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

(3)安装MySQL
数据库 = MySQL详解-基本命令
数据库 = MySQL详解-基本命令
 
(4)MySQL配置
 
mysql开机自启动
 
1.登录
dos命令窗口:
(1)本地登录: mysql -u用户名 -p密码
(2)指定ip:mysql -h主机地址 -u用户名 -p密码
图形化界面:(sqlyog)=(Navicat Premium)
2,退出:exit        quit
数据库 = MySQL详解-基本命令
 
 
 

二.SQL

结构化查询语言(Structured Query Language)
结构化查询语言(Structured Query Language)简称SQL,SQL语句就是对数据库进行操作的一种语言。

通过sql语句来操作数据,实现对记录的增删改查

【CRUD】:create 创建、retrieve(read) 检索、update 修改、delete 删除

(1)SQL书写规范:

1. SQL语句可以单行或多行书写,以分号结尾。
 
2. 可使用空格和缩进来增强语句的可读性。
 
3. MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
 
SELECT * FROM student;
 
4  3种注释 单行注释: -- 注释内容 或 # 注释内容(mysql特有) 多行注释: /* 注释 */
 
(2)SQL分类
 

1. DDL(Data Definition Language)数据定义语言
        用来定义数据库对象:数据库,表,列等。关键字:create,drop,alter等
    
2. DML(Data Manipulation Language)数据操作语言
        用来对数据库中表的数据进行增删改。关键字:insert,delete, update等
    
3. DQL(Data Query Language) 数据查询语言
        用来查询数据库中表的记录(数据)。关键字:select, where等
        
------------------------------------------

4. DCL(Data Control Language)数据控制语言
        用来定义数据库的访问权限和安全级别,及创建用户。关键字:grant,revoke等

5. TCL(Transaction Control Language) 事务控制语言
        用于控制数据库的事务操作,关键字; commit,savepoint,rollback等

三.SQL基础操作

 
(1)DDL
 
   1.操作数据库
1. 直接创建数据库 CREATE DATABASE 数据库名;
2. 判断是否存在并创建数据库(了解) CREATE DATABASE IF NOT EXISTS 数据库名;
3. 创建数据库并指定字符集(了解) CREATE DATABASE 数据库名 CHARACTER SET 字符集;
4. 具体操作:
 
创建库,显示库,修改库,删除库操作
 create:创建:
1. 直接创建数据库
    语法:
        create database 数据库名;
    实例:
        create database student;
        
2. 创建数据库并指定字符
    语法:
        create database 数据库 charset 字符集;
    实例:
        create database student charset gbk;
 
查询:
1. 查看所有数据库
    语法:
        show databases;
        
2. 查看建库语句
    语法:
        show create database 数据库名;
    实例:
        show create database student;
 
修改:
 
1. 修改数据库字符集
    语法:
        alter database 数据库名 charset 新字符集;
    实例:
        alter database student charset utf8;
 
删除:
 
1. 直接删除数据库
    语法:
        drop database 数据库名;
    实例:
        drop database student ;
 
使用数据库
1. 进入/切换某一个具体的数据库
    语法:
        use 数据库名;
    实例:
        use student ;
        
2. 查看当前所在哪个数据库中
    语法:
        select database();
2.操作表:
创建表,显示表,修改表,删除表操作
 
创建:
1. 创建表(掌握)
    语法:
        create table 表名(
            列名(字段名) 数据类型,
            列名(字段名) 数据类型,
            列名(字段名) 数据类型
            ...
        );
    实例:
        create table student(
            id int,
            name varchar(32),
            birthday date        
        );
        
2. 常用数据类型
    int:整型
    float:浮点型
    double:浮点型
    decimal:浮点型(保留精准度)
        decimal(m,n) 指定范围
            m 总长度
            n 小数长度
        例如:
            decimal(5,2)
                999.99 最大值
                  0.01 最小值
    varchar:字符型
        varchar(n) 指定容纳多少个字符 1~65535
                     包含字母,符号,汉字
    text:文本型
    date:日期类型
    datetime:日期时间类型
    
3. 克隆表
    创建表表时,可以快速指定另一张表的结构
    语法:
        create table 新表 like 旧表;
    实例:
        create table teacher like student;
 
查询
 
1. 查看所有表
    语法:
        show tables;
        
2. 查看建表语句
    语法:
        show create table 表名;
    实例:
        show create table teacher;
        
3. 查看表结构
    语法:
        desc 表名;
    实例:
        desc teacher;
 
修改:
 
1. 添加一列
    语法:
        alter table 表名    add 列名 数据类型;
    实例:
        alter table teacher add jieshao varchar(50);
        
2. 修改列类型
    语法:
        alter table 表名 modify 列名 新类型;
    实例:
        alter table teacher modify jieshao varchar(99);
        
3. 修改列名和类型
    语法:
        alter table 表名 change 旧列名 新列名 新类型;
    实例:
        alter table teacher change jieshao intro varchar(999);
        
4. 删除指定列
    语法:
        alter table 表名 drop 列名;
    实例:
        alter table teacher drop intro;
        
5. 修改表字符集
    语法:
        alter table 表名 charset 字符集;
    实例:
        alter table teacher charset gbk;
        
6. 修改表名
    语法:
        rename table 旧表名 to 新表名;
    实例:
        rename table teacher to tch;
 
删除:
 
1. 直接删除表
    语法:
        drop table 表名;
    实例:
        drop table tch;
 
备注:图像化工具:
  • 在企业开发时,我们不会使用命令行窗口来编写sql命令,推荐使用第三方客户端工具提高效率(sqlyog)

(2)DML
 
(1)添加记录
 
1. 语法:
        insert into 表名(列名1,列名2...)values(值1,值2....);
        
        insert into 表名 values(值1,值2....);
            要求:与表结构顺序一致,个数相等
            查看: desc 表名
        
2. 注意:
    列名和值的数据类型要对应
    字符串类型可以使用单双引号,推荐单引号
    字符串可以插入一切(任意)类型,MySQL底层实现了隐式转换
    个别列名字段名如果跟关键字冲突了,我们可以使用反引号包裹起来
        例如:`name`
    
3. 练习
        insert into student(id,name)values(1,'jack');
        insert into student values(4,'杰克马',null);
        
        
        insert into student(id,name,birthday)values('2','tom','1940-2-10');
        insert into student values(3,'刘强东','1973-1-1');
        
        补充:同时添加多条记录
        insert into student values(5,'王健林',null),(6,'撒贝宁',null);
 
复制表:

作用:将一张表的记录,快速复制到另外一张表

* 应用场景:数据的迁移

* 需求:创建一张stu新表,表结构与student一致,实现数据的快速迁移

* 要求:二张表结构相同

* 步骤
    1.克隆表
        create table stu  like student;
    2.数据迁移
        insert into stu select * from student;

修改记录:
1. 语法:
        update 表名 set 列名1=新值1,列名2=新值2.... [where条件]
        
2. 解释:
        [] 里面的内容可以省略
        
3. 实例:
        update stu set birthday='1960-1-1';
        update stu set birthday='2000-1-1' where id = 4;
 
删除记录
 
1. 语法:
        delete from 表名 [where条件]
        
2. 解释:
        [] 里面的内容可以省略
        
3. 实例:
        delete from stu;
        delete from student where id = 5;
        
4. 摧毁表,重构表
    先把表删除,再创建一个相同结构的新表
        truncate table 表名;
        truncate table student;
 
总结:
  • 新增:insert into 表名

  • 修改:update 表名

  • 删除:delete from 表名

(3)DQL 简单查询
 
导入数据:
-- 创建表
create table student1(
    id int,
    name varchar(20),
    chinese double,
    english double,
    math double
);
-- 插入记录
insert into student1(id,name,chinese,english,math) values(1,'tom',89,78,90);
insert into student1(id,name,chinese,english,math) values(2,'jack',67,98,56);
insert into student1(id,name,chinese,english,math) values(3,'jerry',87,78,77);
insert into student1(id,name,chinese,english,math) values(4,'lucy',88,NULL,90);
insert into student1(id,name,chinese,english,math) values(5,'james',82,84,77);
insert into student1(id,name,chinese,english,math) values(6,'jack',55,85,45);
insert into student1(id,name,chinese,english,math) values(7,'tom',89,65,30);
 
语法:
 

1. 格式:
        select * from 表名;
        select 指定列名1,指定列名2.... from 表名;
        
2. 去重关键字
        select distinct 列名 from 表名;
            注意:多个列去重,要求内容完全一致...
            
3. 查询结果进行运算,不会影响原表中的记录

4. null参与数学运算结果还是null
    ifnull()函数
        ifnull(列名,默认值)如果该列有值,直接返回,如果为null返回默认值
        
5. 设置查询别名
        select 列名 [as] 列别名 from 表名 [as] 表别名

sql语句:

-- 查询表中所有学生的信息
SELECT * FROM student1;
-- 查询表中所有学生的姓名和对应的语文成绩
SELECT `name`,chinese FROM student1;
-- 查询表中学生姓名(去重)
SELECT DISTINCT `name` FROM student1;
SELECT DISTINCT `name`,chinese FROM student1;
-- 在所有学生数学分数上加10分特长分
SELECT `name`,math+10 FROM student1;

-- 统计每个学生的总分
SELECT `name`, chinese+english+math FROM student1;
SELECT english FROM student1;
SELECT IFNULL(english,0) FROM student1;
-- 解决null值的问题
SELECT `name`, chinese+IFNULL(english,0)+math FROM student1;

-- 使用别名表示学生总分
SELECT `name` AS 姓名, (chinese+IFNULL(english,0)+math) AS 总分 FROM student1 AS stu1;

(4)DQL条件查询
导入数据:
-- 创建表
CREATE TABLE student2 (
  id int,
  name varchar(20),
  age int,
  sex varchar(5),
  address varchar(100),
  math int,
  english int
);
-- 插入记录
INSERT INTO student2(id,NAME,age,sex,address,math,english) VALUES
(1,'马云',55,'男','杭州',66,78),
(2,'马化腾',45,'女','深圳',98,87),
(3,'马景涛',55,'男','香港',56,77),
(4,'柳岩',20,'女','湖南',76,65),
(5,'柳青',20,'男','湖南',86,NULL),
(6,'刘德',57,'男','香港',99,99),
(7,'马德',22,'女','香港',99,99),
(8,'德玛亚',18,'男','南京',56,65);
 
语法:
 
1. 格式
        select ... from 表名 where 条件;
        
2. 关系(比较)运算符
        > < >= <= != =
        
3. 逻辑运算符
        && and(条件同时成功)
        || or(条件满足一个)
        !  not(条件取反)
        
4. in关键字(某一个列,查询多个值)
        select ... from 表名 where 列名 in(值1,值2,值3.....);
        
5. between关键字(范围查询)
        select ... from 表名 where 列名 between 较小的值 and 较大的值;
        特点:包头包尾
        
6. null值处理
    is null 函数
    is not null 函数
    
7. like关键字(模糊匹配)
        select ... from 表名 where 列名 like '通配符字符串';
        _ 单个任意字符
        % 多个任意字符
 
语句:
 

# 关系运算符
-- 查询math分数大于80分的学生
SELECT * FROM student2 WHERE math > 80;
-- 查询english分数小于或等于80分的学生
SELECT * FROM student2 WHERE english <= 80;
-- 查询age等于20岁的学生
SELECT * FROM student2 WHERE age = 20;
-- 查询age不等于20岁的学生
SELECT * FROM student2 WHERE age != 20;

# 逻辑运算符
-- 查询age大于35且性别为男的学生(两个条件同时满足)
SELECT * FROM student2 WHERE age > 35 AND sex = '男';
-- 查询age大于35或性别为男的学生(两个条件其中一个满足)
SELECT * FROM student2 WHERE age > 35 OR sex = '男';
-- 查询id是1或3或5的学生
SELECT * FROM student2 WHERE id = 1 OR id =3 OR id = 5;
-- in关键字
-- 再次查询id是1或3或5的学生
SELECT * FROM student2 WHERE id IN(1,3,5);
-- 查询id不是1或3或5的学生
SELECT * FROM student2 WHERE id NOT IN(1,3,5);
-- 查询english成绩大于等于77,且小于等于87的学生
SELECT * FROM student2 WHERE english >=77 AND english <=87;

SELECT * FROM student2 WHERE english BETWEEN 77 AND 87;

-- 查询英语成绩为null的学生
SELECT * FROM student2 WHERE english = NULL; -- null不能进行比较
SELECT * FROM student2 WHERE english IS NULL;
SELECT * FROM student2 WHERE english IS NOT NULL;

 


# like模糊匹配
-- 查询姓马的学生
SELECT * FROM student2 WHERE `name` LIKE '马%';
-- 查询姓名中包含'德'字的学生
SELECT * FROM student2 WHERE `name` LIKE '%德%';
-- 查询姓马,且姓名有三个字的学生
SELECT * FROM student2 WHERE `name` LIKE '马__';