数据库常用指令 DDL
用户登录
mysql -u 用户名 -p 密码
1 | mysql -u root -p |
查看数据库
1 | show databases; |
创建一个简单默认字符集的数据库
create database ==数据库名称==;
1 | create database test; |
mysql的默认编码为latin1,存储中文时总会出现乱码
创建数据库,判断是否存在如果存在什么都不做
create database if not exists ==数据库名称==;
- 不会报任何错误
1 | create database if not exists test; |
创建数据库,并指定字符集
create database ==数据库名== default character set ==字符集==;
1 | create database test1 default character set gbk; |
查看数据库
- 查看所有的:但是看不到字符集
1 | show databases; |
- 查看单个的数据库并查看基本信息
show create database ==数据名称==;
1 | show create database test; |
1 | +----------+-----------------------------------------------------------------+ |
删除数据库
drop database ==数据库名称==;
- 删除怎么查看:show databases;
1 | drop database test; |
修改数据库
- 修改字符集
- 修改数据库的名称(建议直接新创建)
alter database ==数据名称== default character set ==字符集==;
1 | alter database test default character set UTF8; |
切换数据库
use ==数据库名称==;
1 | use test; |
查看目前正在使用的数据库
1 | select database(); |
表的常用指令 DDL
创建表
建立数据表,就是建立表结构,指定数据表中的一共有多少列,每一列的数据类型
create 指的是【创建】,table 指的是【数据表】。
1 | create table 表名 ( |
【案例】
1 | -- 创建用户表 |
字符类型
常用的类型有:
- 数字型:int、integer、bigint、mediumint、smallint、tinyint
- 浮点型:double、float、decimal(精确小数类型)
- 字符型:char(定长字符串)、varchar(可变长字符串)
- 日期类型:date(只有年月日)、time(只有时分秒)、datetime(年月日,时分秒)、year
(年) - 二进制字符串类型:binary(定长,以二进制形式保存字符串)、varbinary(可边长)
单表约束
- 一个表要有一个主键
- 唯一约束
- 如:身份证号
- 非空约束(维护数据的唯一性完整性)
- 不能不填:如:男女
1 | 主键约束:primary key |
注意
主键约束 = 唯一约束 + 非空约束
查看表
==要先选中数据库要不会报错==
描述一下表
- Field(字段)
- Type(类型)
- Null(是不是非空)
- Key(是不是主键)
- Extra(扩展信息)
1 | desc t_user; |
查看数据中的所有表
1 | show tables; |
查看表的Sql语句
1 | show create table t_user; |
快速创建一个表
create table ==新表名== linke ==旧表名==;
- 会和旧的表一样
1 | create table tb_user like t_user; |
删除一个表
drop table ==表名==;
1 | drop table tb_user; |
- 删除一个表,判断一下删除表是否存在 让他不报错
- 存在就删除不存在就不删
1 | drop table if exists tb_user; |
修改表
1 | -- 1.修改表添加列 |
[案例]/(有数据需要谨慎)
1 | -- 修改表添加列 |
数据操作语音 DML
插入记录:insert
语法:
1 | -- 1.向表中插入某些列 |
【案例】
1 | -- 向表中插入某些列,必须写列名 |
注意:
- ① 列名数与 values 后面的值的个数相等
- ② 列的顺序与插入的值得顺序一致
- ③ 列名的类型与插入的值要一致.
- ④ 插入值得时候不能超过最大长度.
- ⑤ 值如果是字符串或者日期需要加引号’’ (一般是单引号或者双引号)
更新记录:update
语法格式:update 更新、set 修改的列值、where 指定条件。
1 | -- 1.不指定条件,会修改表中当前列所有数据 |
【案例】
1 | -- 更新所有字段的值 |
注意:
- ① 列名的类型与修改的值要一致
- ② 修改值得时候不能超过最大长度
- ③ 值如果是字符串或者日期需要加==``==引号
删除记录:delete & truncate
语法格式:
1 | delete from 表名 [where 条件]; |
1 | truncate table 表名 |
注意
删除表中所有记录使用【delete from 表名】,还是用【truncate table 表名】?
删除方式的区别:
1 | delete:一条一条删除,不清空 auto_increment 记录数。 |
【案例】
1 | -- 删除所有数据 |
查询DQL
查询语句的顺序
select 列表 from where 条件 group by(分组) having(过滤) order by(排序)
1 | select * | 列名, 列名 from 表名 [where 条件]; |
- select是查询指令,可以读1-n行数据;
- 列名换成==*==号,可以查询所有字段数据;
- 使用where来指定对应的条件
为了后续查询语句准备工作【样例表】
1 | CREATE TABLE products ( |
简答查询
1 | -- 查询所有 |
【案例】
1 | -- 查询所有 |
查询所有商品的指定列
1 | select 列名, 列名... from products; |
【案例】
1 | select pname, sid from products; |
别名查询
1 | -- 语法 |
【案例】
1 | -- as or No as |
去掉重复值
1 | select distinct 列名, 列名 from 表名; |
【案例】
1 | select distinct pname,sid from products; |
为一列上所有的的数据加上2
1 | select 列名 + 数值 from 表名; |
【案例】
1 | select pname, price + 2 from products; |
条件查询
使用条件查询,可以根据当下具体情况直查想要的那部分数据,对记录进行过滤。
SQL 语法关键字: WHERE
语法格式:
1 | select * from 表名 where 条件; |
条件怎么写:
操作符 | 描述 | 实例 |
---|---|---|
= | 等号,检测两个值是否相等,如果相等返回true | (A = B) 返回false |
<>,!= | 不等于,检测两个值是否相等,如果不相等返回true | (A != B) 返回 true |
> | 大于号,检测左边的值是否大于右边的值,如果左边的值大于右边的值返回true | (A > B) 返回 false |
< | 小于号,检测左边的值是否小于右边的值,如果左边的值小于右边的值返回true | (A < B) 返回 true |
>= | 大于等于号,检测左边的值是否大于或等于右边的值,如果左边的值大于或等于右边的值返回true | (A >= B) 返回 false |
<= | 小于等于号,检测左边的值是否小于于或等于右边的值,如果左边的值小于或等于右边的值返回true | (A <= B) 返回 true |
运算符:局限性只能针对一个字段(不使用逻辑运算符的前提下)
1 | -- 查询商品名称为十三香的商品所有信息 |
逻辑运算符
NOT | 逻辑非【!】 |
---|---|
AND | 逻辑与【&&】 |
OR | 逻辑或【||】 |
逻辑运算符:作用是将两个及以上的条件组合在一起
逻辑运算符:
- NOT 【非】
- AND 【与】
- OR 【或】
1 | -- 语法 |
【案例】
1 | -- 查询大商品价格 大于40或小于30的所有商品 |
查询条件in
作用指定范围内的所有数据
1 | select * from products where 列名 in (3, 2); |
【案例】
1 | -- 在范围内 |
范围查询
范围查询:作用查询指定条件内的数据,价格[30 - 100]
- 01写法查询
1 | select *from products where price >= 38 && price <= 98; |
- 02写法: Between … and … 【>= and <=】
1 | select * from products where price between 38 and 98; |
模糊查询
模糊查询:作用是帮助匹配模糊的字段内容
如有字段:一号学生、二号学生、三号学生、四号学生… …
模糊查询:查询学生只要字段中包含了学生就回查询到!
1 | -- 语法: where 之后加上 like 语法。【通配符有】 % (百分号), _ (下划线) |
% (百分号) 代表==任意长度==的内容模糊匹配:
- 【%xxx】以 xxx 结尾的任意内容。
- 【xxx%】以 xxx 开头的任意内容。
- 【%xxx%】包含xxx的任意内容。
_ (下划线) 代表==任意一个字符==的内容模糊匹配:
【_xxx】以任意单个字符开头的 xxx 的内容。
【xxx__x】以 xxx 中间任意二个字符以 x 结尾的内容。
1 | -- 语法 |
【案例】
1 | -- 查询所有新疆的产品 % |
排序查询
排序查询:作用将查询结果进行排序
1 | -- 语法 |
【案例】
1 | -- 根基价格 升序 |
聚合查询
聚合查询:作用对单列数据进行聚合分析【求和、求平均值、求最大值,求最小值】
1 | -- 语法 |
聚合函数例子:
- 求和sum()
- 求平均值avg()
- 求最大值max()
- 求最小值min()
- 求元素个数count()
==注意==:SQL语句是基于需求实现的,同一个需求可能出现n多种SQL写法。如果SQL语句没有需求背景,SQL如无根之水,毫无意义。
【案例】
1 | -- 求所有商品价格的总和 |
分组查询
分组查询:作用将查询结果按照某列数据来进行分组呈现
1 | -- 语法格式 |
注意:
- select 语句中的列必须出现在 group by 的子句中。
- group by的列,不一定非要出现在select列中。
- 聚合函数只能出现在select列,或者是having语句中,一定不能出现在where条件中。
【案例】
1 | -- 需求 |
分页查询
关键字: limit[offset] rows
分页查询:作用是将查询的结果按照一页一页的形式输出。
1 | -- 语法 |
【案例】
1 | -- 分页查询,将数据分为三页,查询第一页数据 |
==limit== 关键字不是SQL92标准提出的关键字,它是==MySQL独有的语法==。
通过 limit 关键字,MySQL实现了物理分页。
分页分为逻辑分页和物理分页
逻辑分页:将数据库中的数据查询到内存之后再进行分页。
物理分页:通过 LIMIT 关键字,直接再数据库中进行分页,最终返回的数据,只是分页后的数据。
【输出】
1 | # 第一页输出 |