常用的MySql数据库SQL语言特点及用法,帮助新手快速上车

SQL全称Structured Query Language 结构化查询语言,跟编程语言有明显的语言区别,编程语言例如PHP、JAVA、C等是HOW型怎么去设计的语言,而SQL为WHAT型查询是什么的语言。

在SQL的执行上可以分为三个种类,且各种类的执行角度,实际我们编程操作中的比例各不相同。

数据操作语言:DML is Data Manipulation Language statements,SQL中处理数据等操作统称为数据操纵语言,为数据库使用角度,所占比例大概为80%,即大部分SQL操作中都是DML,而在DML中80%操作为增删改查中的查,对SELECT查中的灵活运用是SQL程序猿需要掌握的内容。

数据定义语言:DDL is Data Definition Language statements,SQL中用于定义和管理数据库中的所有对象的语言,为数据库建设角度,例如:建表、建库、建视图等,所占比例大概为15%。

数据控制语言:DCL is Data Control Language statements,SQL中用于授权或回收访问数据库的某种特权,为数据库建设角度,实现控制数据库操纵事物发生的时间及效果,对数据库实行监视等,所占比例5%。

mysql语法

请点击此处输入图片描述

下面是附上MySql的基本语法

MySQL:众多关系型数据库中的一种,

仓库 --数据库

箱子 --表

数据库:

进入mysql 命令行: mysql -uroot -p

查看所有数据库: show databases;

创建数据库: create database niu charset utf8;

删除数据库: drop database niu;

选择数据库: use databases;

查看所有表: show tables;

查看创建数据库的语句:show create database databasename;

查看创建表的语句:show create table tablename;

查看表结构:desc tablenmae;

表:

约束

#自增长

auto_increment

#非空

not null

#默认值

default 'xx'

#唯一

unique

#指定字符集

charset

#主键

primary key

#外键

增加两个表之间的联系

增:

#学生表

create table students(

id int auto_increment primary key,

name varchar(10) not null,

sex varchar(3) default '女',

address varchar(50),

phone int not null unique,

age,

);

#成绩表

create table scores(

id int auto_increnent primary key,

s_id int not null,

grade float not null,

);

删:

drop table tablename;

truncate tablename;#快速删除表

改:

alter table oldtable rename newtable; #改表名

alter table tablename modify name varchar(20);#改表结构

alter table tablename change name newname varchar(20);#改表结构

alter (table tablename add age float

after name;#新增字段的位置

查:

show create table tablename ;#查看新建表语句

desc table;#查看表结构

show tables ;#查看所有表

数据:

insert into student (name,money,sex,phone) values ('hk',10000,'男',188);

insert into student values('','小明',100,'',120);

turncate tablename; #删除整表数据,自增长id从头再来,快速,从磁盘直接删除,不可恢复

delete from student;

#删除整个表的数据,自增长继续

update student set money=100;#不指定条件,修改所有

update student set money=110 where name='hk';#只改hk

自动提交

取消自动提交 set @@autocommitt=0;

select @@autocommitt=0;

#自动提交取消后,当前会话显示已经成功执行,其实后台并没有执行

查:

select * from students limit 1,5; #从第几条开始,下面的x条,不包含开始的那一条

SELECT * from students limit 5;查询5条

SELECT id,stu_name,sex,money,phone from students;#指定查询的字段

SELECT * from students;#查询所有的数据

SELECT * from students where sex='男';#指定条件

SELECT * from students where sex='男' and money>100; #多个条件,必须同时满足

SELECT * from students where sex='男' or sex='未知' ; #多个条件,有一个满足即可

SELECT * from students where sex !='男'; #<>也是不等于

SELECT * FROM students where addr like '%东京%';#模糊匹配,%代表的是通配符,必须得用like

SELECT * from students a where a.stu_name like '姚_';#_通配符表示任意一个单字符,姚字后面只能跟一个字

SELECT a.stu_name '学生名称',a.phone '学生电话' from students as a where a.stu_name='姚远';#给表起别名,as可以省略

SELECT * from students a where a.stu_name in ('牛牛','林倩','姚远');# in

SELECT * from students a where a.money BETWEEN 1000 and 10000;#在什么什么之间的数据

SELECT * from students ORDER BY money desc;

#order by xxx desc,根据哪个字段继续排序,默认是升序,

降序是desc,升序asc

SELECT * from students a where a.addr = '' or a.addr is null; #查询字段为空的数据

SELECT DISTINCT a.money from students a ;#去重

SELECT COUNT(*) '学生人数' from students where sex='女'; #统计行数

SELECT MAX(a.money) 钱最多 from students a; #最大值

SELECT min(money) 钱最少 from students;#最小值

SELECT AVG(a.money) 平均多少钱 from students a; #平均数

SELECT sum(a.money) 总共多少钱 from students a;#总和

SELECT sex 性别,count(*) 人数 from students GROUP BY sex; #分组

SELECT

sex 性别,

count(*) 人数,

a.stu_name 名字

FROM

students a WHERE a.money > 300 GROUP BY a.id HAVING a.stu_name LIKE '姚%';

#如果group by后面有条件的话,必须得用having子句,having子句里面用到的字段必须出现在select后面,如果group by和order by一起用的话,order by必须写在group by后面

SELECT *,COUNT(*) from students GROUP BY sex,class; #多个字段进行分组

SELECT id,stu_name from students UNION SELECT id,t_name from teacher;

#用来合并两条select语句的结果,两条select语句字段数量要一致,并且数据类型也要一致

union和union all的区别就是一个会去重一个不会

多表关联:

SELECT * FROM USER a, accounts b WHERE

a.id = b.user_id

AND a.username = 'niuhy';

-- SELECT * from students a ,scores b where a.id=b.s_id; -- 多表关联

-- 两个表里面都存在的数据查出来

SELECT * from students a LEFT JOIN scores b on a.id=b.s_id;

-- LEFT JOIN会把左边表所有的数据都查出来,右边表有匹配的就查出来

SELECT * from students a RIGHT JOIN scores b on a.id=b.s_id;

-- RIGHT JOIN会把右边表所有的数据都查出来,左边表有匹配的就查出来

SELECT * from students a inner JOIN scores b on a.id=b.s_id;

-- INNER JOIN两边表里都匹配的数据才查到

子查询:

把一条sql的结果,作为另一条sql的条件

SELECT * from scores a where a.s_id = (SELECT id from students where stu_name='牛牛');

把子查询当成一个表

SELECT

a.grade 成绩,

b.stu_name 学生名称,

b.id 学号

FROM

scores a,

( SELECT id,stu_name FROM students WHERE stu_name = '牛牛') b

WHERE

a.s_id = b.id;

数据库权限:

mysql数据的权限实质上都是在user表里控制的

1、grant

#所有的权限 所有数据库下面的所有表 用户 用户ip

grant all on *.* to 'andashu'@'localhost' IDENTIFIED BY '123456' with grant option;

密码 #有执行grant语句的权限

grant all on *.* to 'andashu'@'%' IDENTIFIED BY '123456' with grant option;

取消授权:

Revoke select on *.* from dba@localhost;

Revoke all on *.* from andashu@localhost;

2、修改user表的数据

对user表进行增加、修改和删除

flush privileges;#刷新权限

备份数据库:

mysqldump -uroot -p123456 db > db.sql

mysqldump -uroot -p123456 -A > all.sql

恢复数据:

mysql -uroot -p123456 db < db.sql

存储过程:

批量的造数据

delimiter $$; #为了改结束符

CREATE PROCEDURE big_data1(num int)#代表要造多少条数据 100

BEGIN

DECLARE i int;

set i=0;

WHILE i

insert into students (stu_name,money) VALUES (CONCAT('宋灏志',i),20000);

#CONCAT的作用是连接不同类型的数据

#把字符串和数字拼接到一起

set i=i+1;

end WHILE;

End

$$;

delimiter;

call big_data1(500); #调用

原文详见:https://www.qwzyj.com/thread-120-1-1.html

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

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,587评论 18 399
  • 目录 简介 在Android中存储数据有时会用到数据库,Android给我们提供了 一系列的API来操作数据库,非...
    慕涵盛华阅读 998评论 1 2
  • 星期三 雨 每日一我 下雨天,早起上班,8:30到公司,买了蔓越莓面包做早饭。 英早读,专业阅读。中午吃秋刀鱼日式...
    sophietyl阅读 95评论 0 0
  • 最近真的是年末开启疯狂加班的节奏,没得休息,一直在干活,感到很累,有些事情稍微偷一下懒就忘记做了,比如说写作。 昨...
    萧Alley阅读 254评论 0 0