MYSQL语法

发布于:2024-12-20 ⋅ 阅读:(19) ⋅ 点赞:(0)

数据库

JavaEE:企业级Java开发 Web

前端(页面:展示数据)

后台(连接点:连接数据库JDBC,连接前端(控制、控制试图跳转、和给前端传递数据))

数据库:(存数据、Txt、Excel、word)

数据库是所有软件体系中最核心的存在

1. what

数据库(Database——DB)

概念:数据仓库,安装在操作系统(Window、Linux…)之上!跨平台。用来存储和查询、管理数据的一个仓库

可以存储大量的数据——500万以下

作用:存储数据、操作数据、管理数据

2.数据库类型

  1. 关系型数据库:行跟列。(SQL)
  • 通过表和表之间、行和列之间的关系进行数据的存储

  • MySQL、Oracle、SQL Server

  1. 非关系型数据库:其他形式(NoSQL——No only SQL)
  • Redis、MongDB
  • 通过对象存储,通过对象的自身的属性来决定
  1. DBMS(数据库管理系统)
  • 数据库的管理软件,科学有效的管理我们的数据。维护和获取数据
  • MySQL:数据库管理系统

SQL语言

1. what

概念:结构化查询语言(Structured Query Language),是一种特殊的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统> >

连接数据库

mysql -u用户名 -p数据库密码

注释:-- 注释

所有的语句都用分号结尾

查看全部数据库:show databases

show databases;

切换数据库:use

use 数据库名;

查看数据库中**所有的表:show tables**

show tables;

显示数据库中**表的所有信息:describe**

describe 表名;

创建一个数据库:

create database 数据库名;

退出连接:exit

exit;

单行注释:-- 单行注释(双-加空格)

多行注释:/**/

2. DDL语言(数据定义语言)

连接mysql数据。注意:保证MySQL服务开着。此电脑——》管理——》服务——》MySQL正在运行

连接数据库的方式:第一种:MySQL自带的客户端连接

​ 第二种:使用命令:mysql -uroot -proot

-u:用户名

-p:密码

第三种:使用客户端软件 navicat和sqlyog等

2.1 创建数据库定义表结构

  1. 创建数据库:create database 数据库名;
create database zmq;
  1. 删除数据库:drop database 数据库名;
drop database zmq;
  1. 切换到指定是数据库:use 数据库名;
use zmq;
  1. 创建表结构:create table 表名(列名 数据类型,…,列名 数据类型);

数据类型:整型:int(整型)、bigint(长整型==long)

​ 浮点型:float(单精度)、double(双精度) ——》这两种会丢失精度、decimal(数据位数[包括小数],小数位数)——》不会丢失精度,基本用这个

​ 字符串类型:varchar(长度)——最大255

​ 文本类型:text

​ 日期类型:date

create table student(
	id int,--id
    u_name varchar(20),--姓名
    age int,--年龄
    score decimal--成绩
);
  1. 删除表:drop table student;
drop table student;
  • 实例
 create database zmq11;-- 建库
use zmq11;-- 切换到该数据库
-- 建表
create table Food(
	id int,
	u_name varchar(20),
	price decimal(10,2)
);

2.2修改表的结构

  1. 增加一行:alter table 表名 add column 列名 数据类型;
alter table student add column u_class varchar(20);
  1. 删除指定的列:alter table 表名 drop column 列名;
alter table student drop column age;
  1. 修改某一列的数据类型:alter table 表名 modify column 列名 新数据类型
alter table student modify column u_name varchar(10);
  1. 修改列名:alter table 表名 change column 旧列名 新列名 数据类型
alter table student modify column u_name u_names varchar(20);
  1. 删除表:如果表存在再删除

drop table if exists 表名

  1. 所有的创建和删除操作尽量加上判断,以免报错

注意点:

  1. 字段名 :用反引号包裹``
  2. 注释:-- /**/
  3. sql关键字大小写不敏感,建议小写
  4. 所有的符号用英文
  • 实例
--增加一列
alter table Food add column description varchar(255);
-- 修改某列的数据类型
alter table Food modify column price double;
-- 修改列名
alter table Food change column price u_price int;
-- 删除指定列
alter table Food drop column u_name;

2.3 添加约束

概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据

作用:保证数据库中的数据的正确、有效性和完整性

添加多个约束:两个约束之间用空格分开

  • 分类:
约束 描述 关键字
非空约束 限制该字段的数据不能为null not null
唯一约束 保证该字段的所有数据都是唯一、不重复的 unique
主键约束 主键是一行数据的唯一标识,要求非空且唯一 primary key
默认约束 保存数据时,如果未指定该字段的值,则采用默认值 default
检查约束(8.0.14版本后) 保证字段值满足某一个条件 check
外键约束 用来让两张图的数据之间建立连接,保证数据的一致性和完整性 foreign key
  • 实例
create table Student(
	id int primary key,--主键
	u_name varchar(20) unique,--唯一不重复
	age int default 18,--默认值18
	u_class varchar(20) not null--非空	
);
insert into Student(id,u_name,age,u_class) values(1,'张三',18,'软工1班');

插入一条数据:insert into 表名 values (值1,值2…);

插入多条数据:insert into 表名(列名,列名) values(值1,值2),(值1,值2),(值1,值2)

当插入多条数据时,各组数据的列数必须与表中的列数一致,且每组数据的顺序也必须与表中的列顺序相匹配

2.4 外键约束

概念:外键用来让两张表的数据之间建立连接从,从而保证数据的一致性和完整性

一张表的列要去引用另外一张表的主键

why:当两张表的实例是多对一(n : 1)的关系,在多(n)处添加外键,1为父表

示例:学生表的 gradeid 字段要去引用年纪表的gardeid

  1. 定义外键key
  2. 给这个外键添加约束(执行引用) references 引用

2.5 添加外键

语法1,直接在属性值后面添加

create table score(
cscore int(11),
st_id int(50) references student(id),
cs_id int(30) references classes(id),
primary key(st_id,cs_id)
);

语法2: foreign key 外键名称 references 主表(主表列名)

create table score(
cscore int(11),
st_id int(50),
cs_id int(30),
primary key(st_id,cs_id),
FOREIGN KEY (st_id) REFERENCES student(id),
FOREIGN KEY (cs_id) REFERENCES classes(id)
);

语法3,在创建时添加外键约束:constraint 外键名称(随意取) foreign key 外键字段名 references 主表(主表列名);

create table score(
cscore int(11),
st_id int(50),
cs_id int(30),
primary key(st_id,cs_id),
CONSTRAINT FK_ID_ST FOREIGN KEY (st_id) REFERENCES student(id),
CONSTRAINT FK_ID_CS FOREIGN KEY (cs_id) REFERENCES classes(id)·
);

语法4,在表的定义外进行添加:alter table 表名 add constraint 外键名称 foreign key 外键字段名 references 主表(对应的表的主键字段名)

  • 删除/更新行为

当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新

创建原则:先创建不含外键的表也就是班级表

删除有外键关系的表的时候,必须要先删除引用别人的表(从表),再删除被引用的表(主表)

2.6外键总结

以上的操作都是物理外键,数据库级别的外键,我们不建议使用,避免数据库过多造成困扰

最佳实践:

  • 数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)
  • 我们想使用多张表的数据,想使用外键(程序去实现)

2.7 date和char

  • date:日期

  • datetime:日期时间

  • char:固定长度,按照给定的长度占用空间,所赋值不得超过给定长度

  • varchar:可变长度,范围在0到给定长度之间,按照元素内存占用空间,所赋值不得超过给定长度

3.DML语言(数据标记语言)

DML(Data Mark Language)数据标记性语言。给语言主要是对用户对数据库表中的记录进行操作的

增加、删除、修改

3.1增加

  • 给表里的==所有的列==添加值

    insert into 表名 values (值1,值2,值3,…);

insert into department values (2,'质检部');
  • 给表里==指定的列==添加值

    insert into 表名(列名1,列名2,…) values (值1,值2,…);

insert into department (id,d_name) values(3,'工程部');
  • 批量添加

    insert into 表名 (列1,列2,…) values (值1,值2,…),(值1,值2,…),(值1,值2,…),(值1,值2,…),…;

insert into department (id,d_name) values(3,'工程部'),(4,'管理部');

auto_increment:自增,针对int类型这种为整型的,且必须为整型

添加时列和值必须匹配——个数匹配、顺序匹配

3.2 删除

  1. 删除语法
  • 删除表中所有的记录【不建议使用】

    delete from 表名;

delete from users;
  • 根据条件删除满足条件的记录

    delete from 表名 where 条件;

delete from users where id=5;
  1. 条件
  • 关系运算符:>、>=、<、<=、=、!=
  • in运算符:in(值1,值2,…);——满足在这些值内的
  • between and:between 值1 and 值 2;——满足值在值1和值2之间
  • 逻辑运算符:and(与)、or(或)
  • not in:不在
  • is null:是空
  • is not null:不是空
select * from t_user where age not in(18,20,15,99);
select * from t_user where age is not null;

3.3 修改

update 表名 set 列名=值,列名=值… where 条件;

注:最后一个列名=值不要使用’,‘号

update department set d_name='管理部' where id=2;-- 修改

4. DQL语言(数据查询语言)

DQL(Data Query Language)数据查询语言

作用:用于查询数据表中的记录

4.1 基础语法-select from

select [列名…]from 表名[where 条件]

4.2 模糊条件查询-like

  • 查询所有列的值:select * from 表名;
  • 查询指定列的值:select 列1,列2 from 表名;
  • 根据条件查询:select * from 表名 where 条件;

模糊查询 关键字:like

通配符 % :统配n个字符

通配符 _ :统配一个字符

-- 查询所有列的值语句
select * from t_user;
-- 查询指定列的值
select name,age from t_user;
-- 根据条件查询
select * from t_user where age>20 or sex='男';
select * from t_user where age in(19,20,25,29)
-- 模糊查询 like 通配符 %:统配n个字符  _:统配一个字符
-- 查找名字中含有琪
select * from t_user where name like '%琪%'
-- 查询姓刘
select * from t_user where name like '刘%'
-- 第二个字为琪的
select * from t_user where name like '_琪%'
-- 查找姓刘的且只要两个字
select * from t_user where name like '刘_'

4.3 为查询的列起别名-as

  • select 列名 as 新列名, 列名 as 新列名 from 表名【where 条件】
  • as可以省略
select name as 姓名,age,sex 性别 from t_user;

4.4 去除重复项-distinct

  • select distinct 列名,列名,… from 表名 【where 条件】
select distinct  id,name,age from t_user;

4.5 排序-order by

  • select * from 表名 order by 列1,列2 [desc(降序) asc(升序)]
  • 注:查询的列必须都重复才能成功去除
-- 先按照年龄升序,年龄相同按照id降序
select * from t_user order by age desc,id desc;

4.6 分页查询-limit

  1. oracle数据库分页

    -- 40为pageCurrent * pageSize,30 应为为(pageCurrent - 1) * pageSize
    SELECT * FROM  
    (  
    SELECT A.*, ROWNUM RN  
    FROM (SELECT * FROM TABLE_NAME 
       WHERE 1 = 1 -- 条件
       ORDER BY CREATETIME DESC -- 排序
      ) A  
     WHERE ROWNUM <= 40  
    )  
    WHERE RN > 30
    
  2. sqlserver数据库分页

    select top @pageSize * 
    from 表名 
    where 主键>=
    (select max(主键) 
    	from (
    		select top ((@pageIndex-1)*@pageSize+1) 主键
    		from 表名  
    		order by  主键 asc) temp_max_ids) 
    order by 主键;
    
  3. mysql数据库分页(最简单)

  • select * from 表名 limit 起始记录,每页显示页数;
-- 查询第一页的数据 每页显示三条
select * from t_user limit 0,3;
-- 查询第二页的数据 每页显示三条
select * from t_user limit 3,3

-- 查询第三页的数据current 每页显示三条PageSize
select * from t_user limit 6,3

-- 规律: select * from t_user limit (current-1)*pageSize,pageSize;

4.7 聚合函数-5个

函数就是mysql中自带的函数。——5大聚合函数

  • sum():求和
  • count():求个数
  • avg():平均值
  • max():最大值
  • min():最小值
select sum(age) 年龄和,max(age) 最大年龄,min(age) 最小年龄,count(id) 个数,avg(age) from t_user;

4.8 查询的结果或条件上可以使用运算符【不建议使用】

select age, age+1 from t_user where age+1>20;
  • 注:加号不能用在字符串

4.9 分组查询-group by

  • select 分组的列,聚合函数 from 表名 group by 列名,列名 having 分组后的条件
  • 使用了group by 后,要求select出的结果字段都是可汇总的,否则就会出错。
  • group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面。
  • 如果需要指定条件来过滤分组后的结果集,需要结合 having 关键字;原因:where不能与聚合函数联合使用 并且 where 是在 group by 之前执行的

where 和 having

  1. where + group by

where限定的条件查询会在group by分组之前执行

  1. group by +having

having限定的条件查询会在group by 分组之后查询

  1. where+group by+having

where 和 having 在一起使用的时候,会先执行where的限定条件,最后再执行having的限定条件查询

-- 按照性别分组查询 人数大于等于3
select sex,count(id),max(age),name from t_user group by sex,name having count(id)>=2;
-- 注意: select 后只能跟聚合函数或分组的列名

4.10查询的完整语法

select [distinct] [列名 as 别名,列名 别名,别名][*]
from 表名
[where 条件]
[group by 分组列]
[having 分组后的条件]
[order by 排序的列]
[limit 起始记录,每页的条数];

依据需求来添加相应内容

5.导入导出sql语句

5.1 导出

选中数据库——》右键——》转储SQL文件——》结构和数据

5.2 导入

  1. 手动创建数据库
  2. 右键——》运行SQL文件——》找到sql文件的位置

网站公告

今日签到

点亮在社区的每一天
去签到