Mysql基础01

首先在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;
#----------------数据库多表查询-----------------------
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容