文章目录
SQL语句
1.介绍:操作数据库的语言,所有关系型数据库的语句标准,是一种语法规则
2.但是不同的关系型数据库语法再遵守sql语句的前提下,也有个别不用的语法,这一类不同的语法,也叫做数据库方言
数据库语言分类
数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等
数据库操作语言:简称DML(Data Manipulation Language),用来对数据库中的记录进行操作,关键字:insert,delete,update等
数据库控制语言:简称DCL(Data Control Language),用来定义数据库中的访问权限和安全级别,及创建用户
数据库查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录,关键字:select,from,where等
SQL语句的通用语法
SQL语句可以单行或多行书写,以分号结尾
可使用空格和缩进来增强语句的可读性:基本上一个单词就是一个空格
MySQL数据库的SQL语句不去分大小写,关键字建议使用大写
例如:SELECT * FROM user
同样可以使用/* */的方式i完成注释
还可以使用井号##
sql中的数据类型
类型名称 | 说明 |
---|---|
int 整数长度 | 整数类型 |
double | 小数类型 |
decimal | 指定整数位与小数位长度的小数类型 |
date | 日期类型 格式为yyyy-MM-dd,包括年月日,不包括时分秒 |
datetime | 日期类型,格式为yyyy-MM-DD HH:MM:SS,包括年月日时分秒 |
timestamp | 日期类型,时间戳 从1970到2024 |
varchar(字符串长度) | 文本类型,M为0-65535之间的整数 |
MySQL中的语句
DDL之数据库操作 database
创建数据库
关键字: create database
语法:create database 数据库名字 charset utf8
在创建数据库时建议用`包裹
列名也可以用`包裹
注意:
1.mysql默认编码,拉丁文latin-1,所以说创建数据库的时候,指定utf8
2.如果创建数据库的时候忘记夹utf8了,可以后改
3.在写sql语句的时候,如果库名,表名,列名和sql语句的关键字冲突了,可以用``包裹
查看数据库
语法 show databases
删除数据库
语法 drop database 数据库名;
sql
drop database sys;
使用数据库(切换数据库)
1.语法:
use 数据库名;
sql
use sys;
DDL之表操作 ---- table
创建表
1.关键字 create table
2.语法:
create table 表名(
列名 数据类型(长度)[约束],
列名 数据类型(长度)[约束]
列名 数据类型(长度)[约束]
)
sql
CREATE TABLE category1(
uid INT,
uname VARCHAR(10)
);
3.注意:
定义列和列的时候,用逗号
如果是最后一列,不要用逗号
查看表
查看所有表
show tables;
查看表结构
desc 表名;
sql
show tables;
DESC category;
删除表
1.关键字 drop table
2.语法:
drop table 表名
sql
DROP TABLE category;
修改表结构
1.添加列
alter table 表名 add 列名 类型(长度) [约束];
sql
ALTER TABLE category add count int;
2.修改列的类型,长度以及约束
alter table 表名 modify 列名 类型(长度)[约束];
sql
ALTER TABLE category modify count varchar(100);
3.修改列名
alter table 表名 change 旧列名 新列名 类型(长度) [约束];
sql
ALTER TABLE category CHANGE count counts VARCHAR(12);
4.修改表名
rename table 表名 to 新表名;
sql
RENAME table category to categories;
5.修改表删除列
alter table 表名 drop 列名
sql
ALTER table categories drop counts;
DML之数据操作语言
插入数据
1.关键字: insert into
2.语法:
a.insert into 表名(列名,列名) value (值,值)
b.insert into 表名(列名,列名) value (值,值),(值,值),(值,值),(值,值); 批量添加
c.insert into category values (值,值); -------- 如果省略列名,那么在存值时需要将所有列的值都写上
在操作数据的时候,如果时varchar类型的,建议用单引号
原因:将来我们需要用java 代码中的API去操作sql语句,而在Java中写的sql语句时字符串的
String sql = "INSERT INTO category(cid,cname) VALUES (1,"布偶")"; ---- 双引号不明确
String sql = "INSERT INTO category(cid,cname) VALUES (1,'布偶')"; ---- 推荐
sql
INSERT INTO categories(cid,cname) VALUES(1,'布偶');
INSERT INTO categories(cid,cname) VALUES(2,'蓝猫');
INSERT INTO categories(cid,cname) VALUES(3,'英短'),(4,'梨花');
INSERT INTO categories VALUES(5,'奶牛');
删除数据
1.关键字:delete from where
2.语法:
a.delete from 表名 ---- 一次全删除
b.delete from 表名 where 条件 ------ 根据条件删除
Java与mysql符号的对应
java | mysql |
---|---|
== | = |
> | > |
< | < |
>= | >= |
<= | <= |
!= | != 或者 <> |
以下时代码的相关演示 |
sql
##删除cid的记录
DELETE FROM categories WHERE cid = 1;
##删除cid>=5的记录
DELETE FROM categories WHERE cid >= 5;
## 删除出cid不等于1的记录
DELETE FROM categories WHERE cid != 3;
DELETE FROM categories WHERE cid <> 3;
DELETE FROM categories WHERE NOT(cid=3);
修改数据
1.关键字:update set
2.语法:
a.update 表名 set 列名 = 新值 --- 全部都改成指定的新值
b.update 表名 set 列名 = 新值 --- where 条件
sql
##将cname都改成s手机
UPDATE categories SET cname = '手机';
##将表中手机改成金渐层
UPDATE categories SET cname = '金渐层' WHERE cname = '手机';
##将cid为2的数据改成银渐层
UPDATE categories SET cname = '银渐层' WHERE cid = 2 ;
##将cid不等于1的cname都改成布偶
UPDATE categories SET cname = '布偶' where cid <>1;
约束
约束:主要是约束指定列的数据
主键约束
1.关键字 primary key
2.特点:
a.主键列的数据唯一不能重复
b.不能为NULL
c.每个表中都应该有一个主键,此列的数据能带包一行数据,相当于人的身份证号
添加方式1:在创建表时,在字段后面直接指定(重点)
在创建表的过程中,在列后面直接写约束
sql
CREATE TABLE cats(
cid INT PRIMARY KEY,
cname VARCHAR(20)
)
添加方式2:在constraint约束区域,去指定主键约束
1.什么叫做constraint域
在最后一列和右半个小括号之间
2.语法
[constraint 名字] primary key(字段名)
3.注意:[constraint 名字] 可写可不写
sql
CREATE TABLE dogs(
cid INT,
cname VARCHAR(20),
PRIMARY KEY(cid)
);
添加方式3:通过修改表结构的方式
1.格式: ALTER TABLE 表名 ADD [CONSTRAINT 名称] PRIMARY KEY (字段列表)
2.注意:[CONSTRAINT 名称] 可以省略不写
sql
ALTER TABLE category1 ADD PRIMARY KEY(uid);
联合主键
1.什么叫做联合主键:
多个列合称为一个主键
2.特点:
多个列中不能有完全重复的数据
不能为NULL
删除主键约束
ALTER TABLE 表名 DROP PRIMARY KEY ---- 删除主键约束
sql
ALTER TABLE category1 ADD PRIMARY KEY(uid);
自增长约束
基本操作
1.关键字:auto_increment 一般情况下和主键结合使用
2.特点
自增长约束修的列,数据不用我们自己维护,mysq会自动维护
3.自增长约束和主键约束区别:
a.相同点:
此列中的数据唯一
b.不同点:
一个表只能有一个主键,可以代表一条数据
一个表可以有多个自增长列,不能代表一条数据
sql
INSERT INTO dogs VALUES(1,'边牧');
INSERT INTO dogs VALUES(NULL,'金毛');
INSERT INTO dogs(cname) VALUES('泰迪');
注意:
如果不写列名,我们存数据的时候要一一对应,将所有要存的数据都写上
删除数据,如果此列为自增长列,删除之后,列号不会重新编写,会继续从被删除的那列序号往后编写
摧毁表结构
TRUNCATE TABLE 表名;
自增长是一个约束,操作起来和其他约束不太一样
如果自增长约束和主键约束合起来使用想删除,需先删除自增长约束,在删除主键约束
sql
ALTER TABLE dogs MODIFY cid int;
ALTER TABLE dogs DROP PRIMARY KEY;
truncate和delete的区别
1.truncate:清空数据,摧毁表结构,自增长列会重新标号
2.delete:删除表数据,不会摧毁表结构,自增长列不会重写编号,他会继续往下编
非空约束
1.关键字:NOT NULL
2.特点:
被NOT NULL 修饰的列不能为空
建表
sql
CREATE TABLE product(
pid INT PRIMARY KEY AUTO_INCREMENT,
pname VARCHAR(20) NOT NULL,
price INT
);
插入数据
sql
INSERT INTO product(pname,price) VALUES('键盘',300);
##相当于String s = ""
INSERT INTO product(pname,price) VALUES('',300);
##相当于 String s = NULL,报错
INSERT INTO product(pname,price) VALUES(NULL,300);
唯一约束
1.关键字:UNIQUE
2.特点:
被UNIQUE约束的列,数据要唯一,不能重复
3.注意:
唯一约束不能当主键使用,一个表中可有多个列为唯一约束
sql
INSERT INTO cats(pname,price) VALUES('布偶',4000);
##报错
INSERT INTO cats(pname,price) VALUES('布偶',4000);
删除唯一约束
ALTER TABLE person DTOP INDEX 名称 [名称时CONSTRAINT后面的名字]
sql
ALTER TABLE cats DROP INDEX pname;
简单查询
数据准备
创建商品表
sql
CREATE TABLE product(
pid INT PRIMARY KEY,
pname VARCHAR(20),
price DOUBLE
);
简答查询
1.关键字:select from where
2.语法:
a.select * from 表名 --- 查询所有数据,展示所有列
b.select 列名,列名 from 表名 ---- 查询所有,展示所指定的列
c.select 列名 from 表名 where 条件 ----- 根据条件查询,显示指定列的数据
3.注意:
a.查询之后,想展示哪些列的数据,就在select后面写那些列的列名
b,查询出来结国也是一张表,但是伪表,此表是只读的
sql
SELECT * FROM product;
SELECT pid,pname FROM product;
## 可以给表或者列起别名
SELECT pid '商品id', pname '商品名字' FROM product;
去重复值 关键字: distinct(列名)
sql
SELECT DISTINCT(price) FROM product;
给列中的数据做计算
sql
SELECT pname,(price + 100) 'newprice' FROM product;
条件查询
比较运算符 | < <= >= = <> | 大于、小于、大于(小于)等于、不等于 |
---|---|---|
BETWEEN ...AND... | 显示在某一区间的值(含头含尾) | |
字段 IN(set) | 显示在in列表中的值,例:price in(100,200) 查询id为1,3,7的商品: id in(1,3,7) | |
列名 LIKE '张pattern' | 模糊查询,Like语句中,% 代表零个或多个任意字符,_ 代表一个字符, 例如:first_name like '_a%'; 比如:查询姓张的人:name like '张%' 查询商品名中带香的商品: pname like '%香%' 查询第二个字为想的商品: like '想%' 查询商品名为四个字的商品:like '___' |
|
IS NULL | 判断是否为空 | |
逻辑运行符 | and (与) | 多个条件同时成立 全为true,整体才为true |
or(或) | 多个条件任一成立 有真则真 | |
not(非) | 不成立,例:where not(salary>100); |
相关查询语句
sql
SELECT * FROM product WHERE pname = '花花公子';
SELECT * FROM product WHERE price = 800;
SELECT * FROM product WHERE price > 60;
SELECT * FROM product WHERE price BETWEEN 200 AND 600;
SELECT * FROM product WHERE price = 200 or price = 600;
SELECT * FROM product WHERE price IN (200,600);
##查询以香字开头的商品
SELECT * FROM product WHERE pname LIKE '香%'
##查询含有霸的商品
SELECT * FROM product WHERE pname LIKE '%霸%'
##查询商品名为null的
SELECT * FROM product WHERE pname IS NULL;
SELECT * FROM product WHERE pname IS NOT NULL;
排序查询
1.关键字:order by
2.语法:
select 列名 from 表名 order by 排序字段 asc|desc ---- 查询之后要指明那一列进行排序
asc 升序 默认
desc 降序
3.注意:先查询,后排序
书写sql语句关键字的顺序
select
from
where
group by
having
order by
执行顺序
from
where
group by
having
select
order by
先定位到要查询哪个表,然后根据什么条件去查,表确定好了,条件也确定好了,开始利用select查询,查询得出一个结果,在针对这个结果进行一个排序
sql
##对价格进行降序排序
SELECT * FROM product ORDER BY price DESC;
##对价格进行升序排序
SELECT * FROM product ORDER BY price ASC;
SELECT DISTINCT(price) FROM product ORDER BY price ASC;