数据库--mysql

前记

最近一直在学习后台,学习到了数据库,记录mysql中的常用语句,以便自己日后反查,如果还想更多的了解可以去官网,这是非常详细的中文官方文档

自己在mysql 客户端实际操作了一遍,另外画了脑图,方便自己记忆和复习。

mysql语句总结.png

1,使用MySQL,需要下载MySQL客户端,具体操作自行百度即可。

记录自己当初犯下的错误,通过doc命令进入mysql :

  • mysql -u root -p(记住千万不要输';')

出现此界面说明成功登陆mysql 客户端

以下是常用sql语句:

一,关于数据库

1,创建数据库

create database mydb ;

2,查看创建数据库语句(查看mysql创建的源码)

show create database mydb ;

3,使用数据库(需要先调用此语句,才进行其他操作)

use mydb (可写可不写分号)

4,删除数据库

drop database mydb ;

5,查看所有的数据库

show databases ;

6,修改数据库mydb1的字符集为utf8

alter database mydb1 character set utf8 ;

7,了解

创建数据库mydb1,字符集用gbk
create database mydb1 character set gbk ;
查看数据库中所有的校对规则
show collation ;
查看中文的校验规则
show collation like '%gb%' ;
创建数据库mydb2,字符集用gbk,校验规则用gbk_bin
create database mydb2 character set gbk collate gbk_bin ;

设置客户端的字符集为gbk
set character_set_client=gbk;
设置结果集的字符集为gbk
set character_set_results=gbk ;

二,关于表

1,创建表t

create table t(
  id int ,
  name varchar(30)
) ;

创建表t1,使用字符集gbk

create table t1(
    id int ,
    name varchar(30)
)character set gbk ;

自动增长

create table t2
(
id int primary key auto_increment,
name varchar(20)
) ;

2,查看创建表的源码

show create table t ;

3,插入数据

insert into t(id,name) values(1,'张无忌') ;
insert t(id,name) values(2,'乔峰') ;
省略字段,意味着所有的字段都必须给值(自增例外)
insert t4 values(3,'杨过','2014-4-3') ;

4,更新

将表t4的第三条记录姓名字段改为杨康
update t4 set name='杨康' where id = 3 ;
将所有记录的名字都改为东方不败
update t4 set name = '东方不败' ;
修改多个字段
update t4 set id=6,name='萧峰' where id = 2 ;

5,删除

删除表格
drop table t4;
删除所有的记录
delete from t4 where id = 4 ;
delete from t4 ;
truncate table t4 ;

6,字段处理

给表t4增加一个字段address
alter table t4 add address varchar(100) ; 
删除字段address
alter table t4 drop column address ;

7,查看表的结构

desc t4 ;

三,DQL:数据查询语言

创建一个学生表

  create table stu
 (
  id int primary key,   #主键约束
  name varchar(30) unique,  #唯一约束
  sex char(2) not null,  #非空约束
  age int ,  
  address varchar(50) default '北京'  #默认约束
  ) ;

insert into stu values(1,'张无忌','男',20,'北京') ;
insert into stu values(2,'小龙女','女',18,'古墓') ;
insert into stu values(3,'黄蓉','女',15,'桃花岛') ;
insert into stu values(4,'韦小宝','男',24,'扬州') ;
insert into stu values(5,'乔峰','男',34,'雁门关') ;
insert into stu values(6,'张果老','男',30,'雁门关') ;
insert into stu values(7,'老张','男',38,'黒木崖') ;
insert into stu values(8,'张','男',34,'桃花岛') ;
insert into stu values(9,'韦小宝','女',24,'新东方') ;
insert into stu(id,name,sex,age) values(10,'令狐冲','男',27) ;

1,查看所有数据

  select * from stu ;

2,查看小龙女的信息

  select * from stu where id = 2 ;
  select * from stu where name='小龙女' ;

3,查看年龄在20~30之间的人

  select * from stu where age >=20 and age <=30 ;
  select * from stu where age between 20 and 30 ;  # 包括20和30

4,查看所有的的姓名

  select name from stu ;
  查看所有的的姓名,年龄,性别
  select name,age,sex from stu ;

5,模糊查询

  # % 表示任意字符数
  # _ 表示任意的一个字符
  select * from 表名 where 字段名 like 字段表达式
  #查询所有以张开头的人
  select * from stu where name like '张%' ;
  #查询姓名中含有张这个字的人
  select * from stu where name like '%张%' ;
  #查询姓名中含有张这个字的人并且姓名的长度是3个字的人
  select * from stu where name like '张__' or name like '_张_' or name like '__张' ;

6,distinct

  查询表中有几种性别
  select distinct sex from stu ;
  查找姓名和性别整体都不同的记录
  select distinct name,sex from stu ;

创建分数表

create table score
(
  id int primary key,
  sid int ,
  china int,
  english int ,
  history int,
  constraint sid_fk foreign key(sid) references stu(id)
) ;

insert into score values(1,1,68,54,81) ;
insert into score values(2,3,89,98,90) ;
insert into score values(3,4,25,60,38) ;
insert into score values(4,6,70,75,59) ;
insert into score values(5,8,60,65,80) ;

1, 建带有外键的表(即score是stu的子表),需要要添加此语句

constraint sid_fk foreign key(sid) references stu(id)
带外键表的查询源码

2, 给字段起别名

select id as 编号,china as 语文,english as 英语,history as 历史 from score ;
select id 编号,china 语文,english 英语,history 历史 from score ;

3, 字段可以有表达式

  select id,china+10,english,history from score ;
  查看所有人考试的总分是多少
  select id,china + english + history 总分 from score ;
  查看总分大于200的人
  select * from score where china + english + history > 200 ;
别名和表达式一起使用1
别名和表达式一起使用2

3, or 和 in 字段查询

 //查询或
select * from stu where address = '桃花岛' or address = '黒木崖' ;
 //查询包含
select * from stu where address in('桃花岛','黒木崖') ;

4, not int 字段查询以及语句嵌套查询

select id ,name from stu where id not in(select sid from score) ; 

5, null 字段查询

select * from stu where address = null ; #错误的
select * from stu where address is null ; 
#查询有地址的人
select * from stu where address is not null ; 

五 排序(order by )

1, 升序排列

select * from score order by china asc;

2, 降序排列

select * from score order by history desc;

3, 多个字段进行排序(语文升序,对语文成绩一样的人再进行历史降序类排)

  select * from score order by china asc,history desc;(优先前面的查询)
  根据考试总分降序进行排序
  select *,china + english + history 总分 from score order by china + english + history desc ;

四,约束

1,外键约束

可以理解为一个特殊的字段

创建引用约束
alter table score add constraint stu_score_fk foreign key(sid) references stu(id) ; 
删除约束
alter table score drop foreign key stu_score_fk ;
删除外键约束

2,引用约束

  注意: 

   1. 添加记录时必须先添加主表中的记录,再添加字表中的记录
   2. 不能更改主表中具有外键约束的记录的主键
   3. 删除记录的时候不允许删除具有外键关系的主表中的记录
      (删除的顺序应当是先删除字表中的记录,然后删除主表中的记录)

六,多表查询

1,交叉查询

(cross  join ... on ...)查询每个人的考试成绩
select * from stu s cross join score c on s.id = c.sid ;  #交叉 比较了45次

(inner  join ... on ...)查询参加考试的人的成绩
select name,china,english,history,china+english+history 总分 
    from stu s inner join score c on  s.id = c.sid ;

(left join ...on...,以左表为主的查询)查询所有人的成绩
select name,china,english,history,china+english+history 总分 
    from stu s left out join score c on  s.id = c.sid ;

(not int)查询没有参加考试的人
select * from stu where id not in(select sid from score) ;

查询参加考试的人的成绩
select name,china,english,history,china+english+history 总分 
      from stu s,score c where s.id = c.sid ; 

2,聚合函数

  • sum max,min avg ,count

    //stu表中最大年龄最大的
    select max(age) from stu;
    //score表中china的平均值
    select avg(china) from score;
    

3,分组函数(group by)

 select count(*) 数量,sex,name from stu group by sex,name ; #根据多个字段进行分组
 //分组条件 group by ...having ...
 select count(*),sex from stu where age >=16 group by sex having count(*) >1 ;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容