首先在Mysql中语言分为三种:
1、数据定义语言(DDL):用来建立数据库、数据库对象和定义列的命令。包括:create、alter、drop。
2、数据操纵语言(DML):用来操纵数据库中数据的命令。包括:select、insert、update、delete。 其中DQL是DML中的一种。
3、数据控制语言(DCL):用来控制数据库组件的存取许可、权限等的命令。包括:grant、deny、revoke。 (这里很少接触到)
一,本文主要按照如下顺序介绍:
- 1,DDL:Data Definition Language:
- 主要是指表和数据库的增删改查, create, alter, drop等
- 包括创建数据库,删除数据库,更改数据库属性,创建表,删除表,更改表的属性等
- 2,DML: Data Manipulation Language
- 表中数据的增删改查, insert , update, delete等
- 包括往表中插入数据,删除数据,更新数据等
- 3,DQL:Data Query Language,因为这是主要的一块,所以单独分开
- 表中内容的查询, select, from, where等
- 包括内容查询相关的所有,比如条件查询,交叉查询,内连接查询,外连接查询等
二,DDL语言:
1,数据库相关的DDL语句:
#----------------数据库相关的DDL语句-----------------------
#数据库最好不要重新命名
#6,查看当前数据库
#select database();
#5,选择当前需要使用或者操作的数据库
#use ivanl;
#4,删除数据库
#drop database ivanl;
#3,查看数据库的结构编码等
#show create database ivanl;
#2,以指定编码方式创建数据库
#create database if not exists ivanl default charset utf8 collate utf8_general_ci;
#create database if not exists ivanl character set utf8;
#1,创建数据库
#create database if not exists ivanl001;
2,表相关的DDL语句:
#----------------表相关基础的DDL语句-----------------------
#11,修改表的编码方式
#alter table t_user character set utf8;
#10,查看表的结构编码
show create table t_user;
#9,修改表,重新修改表名
#rename table t_user01 to t_user;
#8,修改表,修改某一列的属性02
#alter table t_user change uphone uphonenum int(32);
#7,修改表,修改某一列的属性01
#alter table t_user modify uphone int(32);
#6,显示表的结构
#desc t_user;
#5,修改表,删除某一列属性
#alter table t_user drop uaddr;
#4,修改表,往表中添加一列属性
#alter table t_user add uphone varchar(32);
#3,删除表
#drop table if exists t_user01;
#2,查看表(在当前数据库下)
#show tables;
#1,创建表
#create table if not exists t_user01 (uid int(32) primary key auto_increment, uname varchar(32), upassword varchar(32));
三,DML语言:
- 3.1,基础DML语句
#----------------表内容相关的DML语句-----------------------
#4,删除内容
#delete from t_user where uid=4 or uid=5;
#3,修改内容
#update t_user set uname="张丹峰" where uid = 3;
#2,第二种插入方式,部分属性插入
#insert into t_user (uname, upassword, uphone) values ("ddddd", "jkfjdk", "343124321");
#1,第一种插入方式,全插
#insert into t_user values (3, "张丹峰", "zhangdanfeng", "17612156408");
- 3.1,进阶DML语句:外键相关,多表连接
#----------------数据库添加和删除外键-----------------------
#添加外键的方式:
#alter tabler 从表 add [constraint] [外键名称] foreign key (从表外键字段名) references 主表 (主表名);
#[外键名称] 用于删除外键约束的时候用,一般建议“_fk”结尾
#删除外键:
#alter table 从表 drop foreign key 外键名称
#1,如果是一对多关系,那么把多的那个表定为从表,并在从表中设置外键,约束到主表上
#2,如果是多对多关系,新建一个从表,分表把设定两个外键,约束到主表上
#3,如果是一对一关系,那么只需要把外键对应一下就可以了
#----------------数据库多对多关系----------------------
#2,如果是多对多关系,新建一个从表,分表把设定两个外键,约束到主表上
#商品表,订单表和外键表(orderItem)
#外键表作为从表,分别约束到两个主表上
#alter table orderItem add constraint orderItem_fk foreign key (oid) references orders (oid);
#alter table orderItem add constraint orderItem01_fk foreign key (pid) references product (pid);
#建外键表
#create table orderItem (oid varchar(50), pid varchar(50));
#建表
#create table orders (oid varchar(32) primary key, totalprice double);
#create table product (pid varchar(32) primary key, pname varchar(40), price double, category_id varchar(32));
#----------------数据库是一对多关系----------------------
#1,如果是一对多关系,那么把多的那个表定为从表,并在从表中设置外键,约束到主表上
#这里是今天重点,添加外键约束
#alter table product add foreign key (category_id) references category (cid);
#添加外键约束之后就不能从主表删除包含主键的字段了
#下面这句是不能成功的,因为被删除的条目是次表的主键
#delete from category where cid = "c003";
#alter table product drop foreign key category_id;
#insert into product values ("p010", "IIIIII", "200", "c003");
#select * from category where cid = "c003";
#delete from product where pname="IIIIII";
#delete from product where cid ="c003";
#select * from category;
#delete from category where cid="c003";
#insert into category values ("c003", "化妆品");
#插入数据
/*
insert into category(cid,cname) values('c001','家电');
insert into category(cid,cname) values('c002','服饰');
insert into category(cid,cname) values('c003','化妆品');
insert into product(pid,pname,price,category_id) values('p001','联想','5000','c001');
insert into product(pid,pname,price,category_id) values('p002','海尔','5000','c001');
insert into product(pid,pname,pr ice,category_id) values('p003','雷神','5000','c001');
insert into product(pid,pname,price,category_id) values('p004','JACK JONES','800','c002');
insert into product(pid,pname,price,category_id) values('p005','真维斯','200','c002');
insert into product(pid,pname,price,category_id) values('p006','花花公子','440','c002');
insert into product(pid,pname,price,category_id) values('p007','劲霸','2000','c002');
insert into product(pid,pname,price,category_id) values('p008','香奈儿','800','c003');
insert into product(pid,pname,price,category_id) values('p009','相宜本草','200','c003');
*/
#创建第二个表
#create table product (pid varchar(32) primary key, pname varchar(40), price double, category_id varchar(32));
#创建第一个表
#create table if not exists category (cid varchar(32) primary key, cname varchar(100));
四,DQL语言
- 4.1, 基础查询语句
#----------------分组查询:求和,求平均值等-----------------------
#alter table t_product add gid int;
#update t_product set gid = 1 where pid in (1, 2,5);
#update t_product set gid = 2 where pid in (3,4,5);
#update t_product set gid = 3 where pid in (6,7,8);
#14,gid分组,并查询分组后平均价格大于200的小组
#这里需要注意一下⚠️:分组之后,where不可在用,需要用having
select gid, avg(price) from t_product group by gid having avg(price) > 400;
#13,gid分组,并查询每组商品个数
#select gid, count(*) from t_product group by gid;
#----------------聚合查询:求和,求平均值等-----------------------
#12,求所有商品的和,平均值,个数,最大值,最小值
#select sum(price) from t_product;
#select avg(price) from t_product;
#select count(*) from t_product;
#select max(price) from t_product;
#select min(price) from t_product;
#----------------条件查询并排序-----------------------
#11, not 查询
#select * from t_product where not pid=1 order by price desc;
#10,between查询
#select * from t_product where pid between 1 and 4;
#9,and 和 or查询
#select * from t_product where name like "%菜%" and pid = 5;
#select * from t_product where name like "%菜%" or pid = 1;
#8,查询id在1,3,5的商品
#select * from t_product where pid in (1,3,5);
#select * from t_product where pid%2 = 0;
#7,查询名字中含有菜字的条目
#select * from t_product where name like "%菜%";
#6,查询指定价格额度
#select * from t_product where price > 50 order by price asc;
#----------------简单查询-----------------------
#5,去掉价格重复条目
#select distinct(price) from t_product;
#4,查询指定条目,并使用别名
#select name as 名字 from t_product;
#3,查询所有内容,使用别名(别名这里貌似没有什么用处呢)
#select * from t_product as product;
#2,查询指定的条目,比如名称和价格
#select name, price from t_product;
#1,查询表内所有的内容
#select * from t_product;
/*
alter table t_product change pname name varchar(20);
create table if not exists t_product (pid int primary key auto_increment, pname varchar(20), price double, pdate timestamp) character set utf8;
insert into t_product values (null, "黄瓜", 0.01, null);
insert into t_product values (null, "西红柿", 038, null);
insert into t_product values (null, "草莓", -998, null);
insert into t_product values (null, "西瓜", 99999, null);
insert into t_product values (null, "香菜", 99998, null);
insert into t_product values (null, "鸡腿", 1, null);
insert into t_product values (null, "泡菜", 698, null);
*/
#----------------表内容相关的DQL语句-----------------------
- 4.2, 进阶查询语句,内连接,外连接,子查询等
#4,子查询,也就是把一条语句都查询结构作为另外一条查询都条件,如下:
select * from product where category_id=(select cid from category where cname="化妆品");
#3,外连接查询 outer joit ,其中outer可以省略
#首先添加点素材以便查询观察结果,在product中有一个商品在category中找不到,有一个category在商品表中找不到
#insert into product values ("p010", "西红柿", "10.0", null);
#desc product;
#3.1,左外连接
#select * from category left outer join product on cid=category_id;
#select * from category left join product on cid=category_id;
#3.2,右外连接
#select * from category right outer join product on cid=category_id;
#select * from category right join product on cid=category_id;
#2,内连接查询, inner join, 其中inner可以省略,下面三种方式都可以
#select * from category inner join product on cid=category_id;
#select * from category join product on cid=category_id;
#select * from category c , product p where c.cid = p.category_id;
#1,这个是交叉查询,一般不会用这个
#select * from product, category;
#----------------数据库多表查询-----------------------