MYSQL数据库

目录

SQL

SQL-DDL

操作数据库

查询(show)(select)

创建(create)

删除(drop)

操作表

查询当前数据库所有表

修改表

删除

SQL-DML

添加数据(可以批量添加)

SQL-DQL

 创建表和插入数据:

条件查询:

聚合函数:

分组查询:

排序查询: 

分页查询:

 SQL-DCL

函数

字符串函数

 数值函数

 日期函数

 流程函数

约束

多表查询

内连接

 外连接

自连接

联合查询

子查询

事务

并发事务问题


MYSQL 的图形化界面工具之一——DateGrip

SQL 是具有数据操纵和数据定义等多种功能的数据库语言,是用于访问和处理数据库的标准的计算机语言。

SQL包括了所有对数据库的操作,主要是由4个部分组成:

  • 数据定义:又称为“DDL语言”,定义数据库的逻辑结构,包括定义数据库、基本表、视图和索引4部分。
  • 数据操纵:又称为“DML语言”,包括插入、删除和更新三种操作。
  • 数据查询:又称为“DQL语言”,包括数据查询操作。
  • 数据控制:又称为“DCL语言”,对用户访问数据的控制有基本表和视图的授权及回收。
  • 事务控制:又称为“TCL语言”,包括事务的提交与回滚。
  • 嵌入式SQL语言的使用规定:规定SQL语句在宿主语言的程序中使用的规则。

SQL

SQL-DDL

操作数据库

  • 查询(show)(select)

show databases;

select database();

注意第二条语句后面有括号。 

  • 创建(create)

create database[if not exists]数据库名[default charset字符集][collate 排序规则];

其中字符集一般使用 utf8,也可以省略。

  • 删除(drop)

drop database[if exists]数据库名;

  • 使用

use 数据库名;

操作表

  • 查询当前数据库所有表

show tables;

  • 查询表结构

desc 表名;

  • 查询指定表的建表语句

show create table 表名;

修改表

  • 添加字段

alter table 表名 add 字段名 类型(长度) [comment 注释][约束];

  • 修改

修改数据类型

alter table 表名 modify 字段名 新数据类型(长度);

修改字段名

alter table 表名 change 旧字段名 新字段名[comment 注释][约束];

删除字段

alter table 表名 drop 字段名;

修改表名

alter table 表名 rename to 新表名;

  • 删除

删除表

drop table[if exists]表名;

删除表,并重新创建该表

truncate table 表名;

SQL-DML

DML 是对数据库中比表的数据记录增删查改操作。

  1. 插入数据是,指定字符顺序是一一对应的
  2. 包含字符串和日期型数据
  • 添加数据(可以批量添加)

insert into 表名(字段1,字段2,...)values(值1,值2);

insert into 表名 value(值1,值2);

  • 修改数据

update 表名 set 字段名=值1, 字段名2=值2,...[where 条件];

  • 删除数据

delete from 表名[where 条件];

SQL-DQL

DQL 是数据库的查询语言。

MYSQL数据库_第1张图片

 创建表和插入数据:

create table employee (
    id int comment '编号',
    workno varchar(10)comment '工号',
    name varchar(10) comment '姓名',
    gender varchar(10) comment '性别',
    age tinyint unsigned comment'年龄',
    idcard char(18) comment '身份证号',
    workaddress varchar(10) comment '工作地址',
    entrydate date comment '入职时间'
);

insert into employee(id,workno,name,gender,age,idcard,workaddress,entrydate)
values
    (1,'1','李华','男',52,'74105209632','天津','2007-7-23'),
    (2,'2','张无忌','男',18,'74705209632','上海','2000-5-3'),
    (3,'3','韦一笑','男',36,'77105209932','西安','2007-12-5'),
    (4,'4','赵敏','女',40,'34105907612','天津','2010-4-6'),
    (5,'5','小昭','女',18,'74455934612','天津','2007-4-26'),
    (6,'6','杨逍','男',40,'74108909610','北京','2008-7-19'),
    (7,'7','陈友','男',65,'74175903612','北京','2002-9-8'),
    (8,'8','范瑶','女',40,'44105909712','北京','2007-9-8'),
    (9,'9','范凉凉','女',75,'23105905612','重庆','2001-3-2'),
    (10,'10','张三丰','女',26,'23105905612','上海','1997-10-15'),
    (11,'11','周芷若','女',45,null,'北京','2003-11-8');

条件查询:

#查询指定字段
select name,workno,age from employee;
#查询员工的年龄,起别名(as可以省),不重复
select distinct age as'年龄'from employee;


#查询年龄大于等于20小于等于50的员工(也可以用&&代替and)
#不等于用! 或者<>表示
select age from employee where age>=20 and age<=50;
select age from employee where age between 20 and 50;
#查询没有身份证号的员工
select * from employee where idcard is null;


#查询年龄等于18或者等于40的员工
select * from employee where age = 18 or age=40;
select * from employee where age in(18,40);


#查询名字为两个字的员工
select * from employee where name like'__';
#查询身份证最后一位是0的员工
select * from employee where idcard like '%0';

聚合函数:

#统计数量(*可以替换为具体的,例如name等),但是对于null是不参与聚合函数的计算的
select count(*) from employee ;
#统计最大年龄(最小用min())(统计年龄之和用sum())(平均值用avg())
select max(age)from employee;

分组查询:

#根据性别分组,统计男员工和女员工的平均年龄
select gender,avg(age) from employee group by gender;
#查询年龄小于45的员工并根据工作地址分组,然后获得员工人数大于等于2的组
select workaddress,count(*) from employee where age<45 group by workaddress having count(*)>=2;

排序查询: 

#对入职时间升序排序(默认是升序),降序用desc
select * from employee order by entrydate asc ;
#根据年龄对员工升序,年龄相同按照入职时间降序排序
select * from employee order by age,entrydate desc ;

分页查询:

#分页查询(前面一句是0-7)后面一句是(8-15)
select * from employee limit 0,8;
select * from employee limit 8,8;

MYSQL数据库_第2张图片

 SQL-DCL

 DLC 是数据库控制语言。是用来设置或更改数据库用户或角色权限的语句。

主机可以用%通配。

MYSQL数据库_第3张图片

函数

字符串函数

MYSQL数据库_第4张图片

 数值函数

MYSQL数据库_第5张图片

 日期函数

MYSQL数据库_第6张图片

 流程函数

MYSQL数据库_第7张图片

#返回Ok
select  if (true,'Ok','False');
#如果第一个值为null就返回第一个值,不为null就返回第二个值
select ifnull(null,'Default');



#查询员工的工作地址,北京上海的显示未一线城市,其他显示为二线城市
select name,
       (case workaddress when '北京' then'一线城市' when'上海' then'一线城市' else '二线城市' end)as '工作地址'from employee;

约束

MYSQL数据库_第8张图片

 外键约束:让两张表的数据建立连接,保证数据的一致性和完整性。

MYSQL数据库_第9张图片

 存在外键后,删除更新行为:(添加在建立外键约束的后面)MYSQL数据库_第10张图片

多表查询

为表起了别名,在该条语句就不能直接用表名来约束字段。

内连接

内连接查询的时两表交集的部分。

隐式:去掉笛卡尔积中的无效组合:在表名后加约束条件(where)

MYSQL数据库_第11张图片

 外连接

分为右外连接和左外连接:

右向外连接,如果右表的某行在左表中没有匹配行,则将为左表返回空值;如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

自连接

自连接要起别名。

联合查询

使用 all 字段可能会有查询的结果重复,去掉 all 字段后不会有重复的结果。

多张表的列数必须一致,字段类型也要一致。

子查询

标量子查询:总是使用圆括号把结果括起来,返回的结果是单行单列的数据,就是一个值。

列子查询:返回的是单行多列的数据,就是一条记录。

行子查询:返回的结果是一行,可以是多列。

表子查询:返回的结果是多行多列。

事务

是一组操作的集合,不可分割的工作单位,把所有的操作作为一个整体,一起提交或撤销的操作。

例如银行的转账和收款,只能一起操作。

开始事务,提交事务,回滚事务

分别对应:

start transaction;

commit;

rollback;

并发事务问题

MYSQL数据库_第12张图片

MYSQL数据库_第13张图片

你可能感兴趣的:(Java,数据库,mysql)