day03 mysql
使用数据库可以高效的有条理的储存数据:
1、可以结构化存储大量的数据,
2、可以有效的保持数据的一致性、完整性。
l SQL分类:
n 数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等
n 数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。关键字:insert,delete,update等
n 数据控制语言:简称
DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户。
n 数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。关键字:select,from,where等
分类 |
类型名称 |
说明 |
整数类型 |
tinyInt (255) 最大表示 127 |
很小的整数 一个字节 |
Smallint(65535) |
小的整数 两个字节 |
|
Mediumint(16777215) |
中等大小的整数 三个字节 |
|
int(integer)(4294967295) |
普通大小的整数 四个字节 |
|
|
bigint |
八个字节 |
小数类型 |
float |
单精度浮点数 4字节 |
double |
双精度浮点数 8字节 |
|
decimal(m,d) |
压缩严格的定点数 decimal(10,2) |
|
日期类型 |
year |
YYYY 1901~2155 |
time |
HH:MM:SS -838:59:59~838:59:59 |
|
date |
YYYY-MM-DD 1000-01-01~9999-12-3 |
|
datetime |
YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~ 9999-12-31 23:59:59 |
|
timestamp |
YYYY-MM-DD HH:MM:SS 1970~01~01 00:00:01 UTC~2038-01-19 03:14:07UTC |
|
文本、二进制类型 |
char(m) |
m为0~255之间的整数定长 char(10) tom |
varchar(m) |
m为0~65535之间的整数变长 varchar(10) tom |
|
tinyblob |
允许长度0~255字节 |
|
blob |
允许长度0~65535字节 |
|
mediumblob |
允许长度0~167772150字节 |
|
longblob |
允许长度0~4294967295字节 |
|
tinytext |
允许长度0~255字节 |
|
text |
允许长度0~65535字节 |
|
mediumtext |
允许长度0~167772150字节 |
|
longtext |
允许长度0~4294967295字节 |
|
varbinary(m) |
允许长度0~M个字节的变长字节字符串 |
|
binary(m) |
允许长度0~m个字节的定长字节字符串 |
day03_mysql基础
今日目标
-
-
DDL之数据库操作
-
DDL之表操作
-
DML之数据操作
-
SQL约束
-
DQL数据查询语言
SQL语句
-
SQL的定义
结构化查询语言(Structured Query Language)简称SQL,是关系型数据库管理系统都需要遵循的规范,是数据库认识的语句。
-
SQL 的语言分类定义
-
DDL 数据定义语言
-
create database [if not exists] databasename
-
drop database [databasename]
-
create table t_user (....)
-
alter table t_user
-
drop table t_user
-
-
DML 数据操作语言
-
数据进行 增 删 改操作
-
-
DCL 数据控制语言
-
grant 赋权 revoke 收回权限
-
-
DQL 数据查询语言(*)
-
select
-
-
-
案例
# 创建一个数据库
create database if not exists beijing50;
# 删除数据库
drop database beijing50; -
SQL 的通用语法
-
SQL语句可以单行或多行书写,以分号结尾
-
可使用空格和缩进来增强语句的可读性
-
MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
例如:SELECT * FROM user。
-
同样可以使用/**/的方式完成注释 -- #
-
-
SQL 的数据类型
DDL之创建数据库
-
创建数据库
# 创建数据库
create database if not exists beijing50; -
查看所有数据库
# 查看所有数据库
show databases; -
删除数据库
# 删除数据库
drop database hahah; -
使用数据库
# 使用某个数据库
use beijing50;
# 查看当前的数据库
select database();
DDL之表操作
-
案例
# 创建一个 分类表
create table if not exists category(
cid varchar(10) primary key,
cname varchar(200)
);
# 查看所有的表
show tables;
# 查看指定的表结构
desc category; -
# 删除 分类表
drop table category;
# 修改表结构——新增字段
alter table category add `desc` varchar(255);
# 修改表结构——修改字段
alter table category change `desc` description varchar(255);
# 修改表结构——修改字段类型
alter table category change description description varchar(200);
# 修改表结构——删除字段
alter table category drop description;
# 修改表名称
rename table category to cat;
DML 数据操作语言
dml 数据操作语言之insert操作
-- 向表中插入某些字段
insert into 表 (字段1,字段2,字段3..) values(值1,值2,值3..);
-- 向表中插入所有字段,字段的顺序为创建表时的顺序
insert into 表 values(值1,值2,值3..)
-
注意
-
值与字段必须对应,个数相同,类型相同
-
值的数据大小必须在字段的长度范围内
-
除了数值类型外,其它的字段类型的值必须使用引号引起。(建议单引号)’’ “”``
-
如果要插入空值,可以不写字段,或者插入 null。
-
-
案例操作
# 1.向 cat 插入一条记录 cid:001 cname:服装
INSERT INTO cat(cid,cname) values('c001','服装');
# 2.不写字段
INSERT INTO cat values('c002','食品');
# 3. 某个字段cname 为空
INSERT INTO cat(cid) values('c003');
# 4. 不写字段
INSERT INTO cat values('c004',null);
# 5.赋多个值
INSERT INTO cat values('c005','化妆品'),('c006',null),('c007','婴幼儿产品');dml 数据操作语言之update操作
-
更新 语句的操作概念
用来修改指定条件的数据,将满足条件的记录指定列修改为指定值。
-
更新语句的定义
# 修改 c003 这条语句 cname 为家电
update cat SET cname='家电' where cid='c003';
# 修改多个字段,中间需要使用 英文 ,
update cat SET cname='手机',description='华为mate30' where cid='c006';
# 修改某个列所有值
update cat SET is_delete=0;
dml 数据操作语言之delete操作
-
数据的删除操作
-
删除语句
# 删除某一行数据
delete from cat where cid='c001';
# 删除所有的数据
delete from cat;
# truncate 删除数据表
truncate table cat; -
truncate 和 delete 删除操作的区别
-
truncate 操作是 DDL 操作, delete 是 DML 操作
-
delete 删除的会保存到日志中,可以恢复,truncate操作是不能恢复的
-
delete删除按行来删除的,truncate 是按表来删除
-
auto_increment (自增字段) delete 操作之后再插入数据会不会从1开始,truncate操作会从1开始。
-
# 创建一个 cid 是自增的字段
create table if not exists cate(
cid int primary key auto_increment,
cname varchar(50)
);
insert into cate(cname) values('家电'),('手机'),('服装');
#
insert into cate values(null,'奢侈品');
# delete 清空表 cate ,自增字段接着清空前的 cid 值
delete from cate;
# 插入一条值
insert into cate values(null,'奢侈品');
# truncate 清空表 cate 自增字段从 1 开始
truncate table cate;
# 插入一条值
insert into cate values(null,'奢侈品');
-
delete
-
-
truncate 后插入数据
-
SQL 约束
-
primary key 主键约束 ,会自动生成主键索引,唯一、不能空、每张表中只能有一个。
-
not null 非空约束,某一列数据不能为空,为空就报空值错误
-
unique 唯一约束,保证某一列数据不能重复
-
foreign key 外键约束,多表关联中(一对多中),保证数据完整性的约束。
主键约束案例
# 创建主键约束方法有三种
# 1.建表时创建主键
Create table if not exists t_student(sid int primary key auto_increment,
sname varchar(20)
);
# 2.创建表的时候创建主键约束
create table if not exists t_student_1(
sid int auto_increment,
sname varchar(20),
# 格式:[constraint 名称] primary key (字段列表)
constraint c_student_sid primary key (sid)
);
# 3.创建表之后通过修改表创建主键约束
create table if not exists t_sutdent_2(
firstname varchar(20),
secondname varchar(20),
age int,
descr text
);
ALTER TABLE t_sutdent_2 add primary key(firstname,secondname);
# 删除主键
Alter table t_sutdent_2 drop primary key;
# 自动增长列
CREATE TABLE Persons4
(
Id int PRIMARY KEY AUTO_INCREMENT,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
我们可以在表中使用 auto_increment(自动增长列)关键字,自动增长列类型必须是整型,自动增长列必须为键(一般是主键)。
# 可以修改默认自增的数字大小
alter table persons4 auto_increment=50000;
# 需求: 如果当前值5,将auto_increment 修改成50000,又插入一条数据 id = 6,再新增一条数据,不指定id。
1
2
3
4
5
6
7
50000
结论: 不指定id的话,当前生成的 id 为当前记录表中的最大id
非空约束案例
NOT NULL 约束强制列不接受 NULL 值。
NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。
# 创建persons5表
CREATE TABLE persons5
(
id int NOT NULL,
lastName varchar(255) NOT NULL,
firstName varchar(255),
address varchar(255),
city varchar(255)
)
# 插入一条数据查看报错信息
INSERT INTO pers
ons5(id,lastName) values(1,null);
唯一约束案例
# 创建persons6 表
drop table if exists persons6;
CREATE TABLE persons6
(
id int UNIQUE,
lastName varchar(255) NOT NULL,
firstName varchar(255),
address varchar(255),
city varchar(255)
);
INSERT INTO persons6(id,lastName,firstName) values(1,'zhang','san');
INSERT INTO persons6(id,lastName,firstName) values(1,'li','si');
总结:
-
主键约束和唯一约束共同点:都不能重复
-
主键约束和唯一约束的区别:
-
主键约束值不能为空,唯一约束可以为空
-
在一张表中主键只能有一个,唯一约束可以有多个
-
DQL 数据查询语言
-
数据表准备
# 创建product 表
create table product(
pid int primary key,
pname varchar(20),
price double,
category_id varchar(32)
);
# 插入准备的数据
INSERT INTO product(pid,pname,price,category_id) VALUES(1,'联想',5000,'c001');
INSERT INTO product(pid,pname,price,category_id) VALUES(2,'海尔',3000,'c001');
INSERT INTO product(pid,pname,price,category_id) VALUES(3,'雷神',5000,'c001');
INSERT INTO product(pid,pname,price,category_id) VALUES(4,'杰克琼斯',800,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(5,'真维斯',200,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(6,'花花公子',440,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(7,'劲霸',2000,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(8,'香奈儿',800,'c003');
INSERT INTO product(pid,pname,price,category_id) VALUES(9,'相宜本草',200,'c003');
INSERT INTO product(pid,pname,price,category_id) VALUES(10,'面霸',5,'c003');
INSERT INTO product(pid,pname,price,category_id) VALUES(11,'好想你枣',56,'c004');
INSERT INTO product(pid,pname,price,category_id) VALUES(12,'香飘飘奶茶',1,'c005');
INSERT INTO product(pid,pname,price,category_id) VALUES(13,'海澜之家',1,'c002');
数据查询的语法
-
语法
select [distinct]
* 或者
列名,列名
from 表
where 条件
Group by 分组字段
Having 聚合字段条件
Order by 排序字段
Limit 分页字段 -
简单案例
# 查询 product 所有的数据
select * from product;
# 根据字段名称查询指定的字段值
select pid,pname,price from product;
# 使用别名进行查询
## 1.表别名
select p.pid,p.pname
from product as p
## 2.列别名 可以加 as 或者不加as 需要使用空格
select pid as 产品id , pname 产品名称
from product;
# 读取唯一的值
select distinct price
from product;
# 将所有的商品 +100 显示
select pid,pname,price+100 as 上调之后的价格
from product; -
条件查询案例
模糊查询中 like
% 代表者0~任意字符匹配
_ 代表 一个字符
#查询商品名称为“花花公子”的商品所有信息:
select * from product where pname='花花公子';
#查询价格为800商品
select * from product where price=800;
#查询价格不是800的所有商品
select * from product where price != 800;
select * from product where price <> 800;
select * from product where not(price=800);
#查询商品价格大于60元的所有商品信息
select * from product where price>60;
#查询商品价格在200到1000之间所有商品
select * from product where price>=200 and price <=1000;
select * from product where price between 200 and 1000;
#查询商品价格是200或800的所有商品
select * from product where price=200 or price=800;
select * from product where price in (200,800);
#查询含有'霸'字的所有商品
select * from product where pname like '%霸%';
#查询以'香'开头的所有商品
select * from product where pname like '香%';
#查询第二个字为'想'的所有商品
select * from product where pname like '_想%';
#匹配四个字的所有商品
select * from product where pname like '____';
#查询没有分类的商品
select * from product where category_id is null;
#查询有分类的商品
select * from product where category_id is not null;
问题集锦
-
创建数据库
create database abc;
create schema abc;
# 不是 create database | schema abc; -
数据类型怎么理解
-
创建表指定字符串为 auto_increment 标识符出错。
错误原因是,创建的字段必须是整数类型,整数类型自增。