目录
简述
SQL全称: Struct Query Language 结构化查询语言,专门访问数据库的标准语言,它是面向过程的结构化语言,不是面向对象的语言。
SQL由以下几部分组成:数据定义语言、数据操纵语言、数据查询语言、事务控制语言。
1.1 数据定义语言
数据定义语言,简称DDL。常用的操作如下:创建数据库、创建表、修改表结构等,这些操作和数据无关,只跟数据的结构有关。就像在java中定义类,在类中定义属性。
1.1.1 创建数据库
MySQL有两种方式创建数据库。第一种方式直接创建,第二种方式创建之前先判断当前数据库是否存在如果不存在才创建。
直接创建: create database <数据库名称>;
先判断后创建: create database if not exists <数据库名称> default charset <字符集编码>;
一般使用第二种,第一种如果已经存在会报错。
1.1.2 使用数据库
语法:use <数据库名称>;
注:MySQL中也有单行注释和多行注释
- 单行注释:#注释内容
- 单行注释:-- 空格注释内容 其中--后面的空格必须有
- 多行注释:/* 注释内容 */
1.1.3 显示数据库
语法: show databases ;
1.1.4 删除数据库
MySQL有两种方式删除数据库,第一种直接删除,第二种在删除之前先判断是否存在如果存在才删除。
第一种语法: drop database <数据库名称>;
第二种语法: drop database if exists <数据库名称>;
1.1.5 创建表
语法: create table <表名称>(
列名称1 数据类型,
列名称2 数据类型,
................
列名称n 数据类型
);注: 每个列名称之间使用半角逗号分隔,最后一列没有半角符号
java是先写数据类型后写属性名,MySQL是先写列名称后写数据类型
例如: 创建商品信息表和商品类型表
-- 创建表之前必须制定数据库,此时表示在test数据库下创建表
use test;
drop table if exists goods;
create table goods(
id int auto_increment primary key , -- 编号
`name` varchar(50) not null, -- 名称
type_number int not null, -- 类型编号
price double not null, -- 价格
birthday datetime not null, -- 生产日期
life int not null -- 有效期(整型,表示n个月
)default charset=utf8;
drop table if exists type;
create table type(
type_number int auto_increment primary key, -- 类型编号
type_name varchar(50) not null -- 类型名称
)default charset=utf8;
1.1.6 查看当前数据库所有表
show tables;
1.1.7 查看表结构
-- 第一种方式
desc <表名称>;
-- 第二种方式
show create table <表名称>;
1.1.8 改变表结构
改变表结构包括如下内容:添加一列(add)、修改列的数据类型(modify)、修改列名称和数据类型(change)、删除某一列(drop)、表的重命名(rename)。
语法: alter table <表名称> [add|modify|change|drop|rename];
1.1.9 删除表
语法: drop table <表名称> ;
小结
-- 数据库操作
create database
drop database
use 数据库名称
show databases;
-- 表的操作
create table
drop table
alter table
-- 查看表结构
desc 表名称;
show create table 表名称;
1.2 数据操纵语言
简述
数据操纵语言(Data Manipulation Language),简称DML,用于改变表中的数据。
主要操作包括:增加(插入)数据 insert 、删除数据 delete、修改数据update。以上操作只改变表中的数据不会改变表结构
1.2.1 向表中插入数据
-- 第一种插入数据,语法如下:
-- 为表的所有列插入数据
-- insert into <表名称> values(值1,值2...值n); 每个值之间以半角逗号分离
-- 例如:向tb_province表插入一条数据
insert into goods values(default,'冰红茶',1,'3','2021-8-23','12');
-- 第二种插入数据,语法如下:
-- 插入部分数据,列数量和值数量必须一致
-- insert <表名称>(列1,列2)values(值1,值2);
-- 插入部分数据一定要指定列名称
insert into goods(id,`name`,type_number,price,birthday,life) values(default,'冰红茶',1,'3','2021-8-23','12');
-- 第三种插入数据,语法如下:
-- 在一个insert关键字中插入多条数据
-- insert <表名称> values (所有的列名称), (所有的列名称),(所有的列名称);
insert goods values(default,'冰红茶',1,'3','2021-8-23','12');
建表成功后显示为:
1.2.2 更新表中的数据
-- 语法:
-- update 表名称 set 列名称=值,列名称=值.... <where 条件>;
-- 如果修改多个数据由半角逗号分隔
-- where表示行过滤,只修改满足条件的数据
-- 场景:将id为1的货物,改为'王老吉'
update goods set `name`='王老吉' where id = 1;
1.2.3 删除表中的数据
delete from 只会删除表中的数据不会删除表结构,工作中如果要使用delete删除表一定要加上where条件,否则会把表中所有数据都删除。
-- 语法:
-- delete from <表名称> where 条件;
-- 场景:删除id为2的货物
delete from goods where id = 2;
1.3 数据查询语言
数据查询语言(Data Query Language)DQL
只能对表进行查询操作,主要用于查询表中的数据,查询之前和查询之后表中的数据不会发生变化。
-- 语法
select 列名称1,列名称2... 列名称N
from 表名称
where
group by
having
order by
limit;
前面两个关键字必须有,后面的可选
from后面跟表名称
select后面跟列名称 *表示查询所有列
select *
from goods;
-- MySQL控制台向MySQL服务器发送命令
-- 服务器先收到 from goods,表示要查询服务器的那张表,确定表名称
-- 然后服务器收到 select 选择要查询哪些列,此时的 * 表示查询表中所有列
-- from goods 表名称表示从服务器数据文件去检索(查询)数据
-- 先执行from关键字后执行select关键字
-- select * from goods; 表示从goods表中选择所有的列进行查询
场景: 查询货物表id为3的名字
SELECT
`name`
FROM
goods
WHERE
id = 3;
小结
1 列出关键字 select from where
2 在from关键字后面确定表,因为服务器先执行from
3 在where关键字后面确定要查询的行 id =3
4 在select关键字后面确定要查询表的那些列
from确定要查询的表,where做行过滤确定行,select列过滤确定