mysql基本操作

图片 21

幼功操作

mysql [–h 服务器名] –u登录名 [–P 端口号] -p; 登录mysql
set names gbk; 设置编码为gbk
show charset; 显示当前应用编码
show databases; 显示全体数据库
show tables; 突显全部数据表
show create table 表名; 显示表的创始语句
desc/describe 表名; 展现表的构造
mysql>set password for root@localhost = password(‘123’);
修改root密码为123

数据库及表的操作

增:

创设数据库:create database mpc [charset
utf8];(设置数据库编码卡塔 尔(阿拉伯语:قطر‎

开创数据表:create table [if
not exists]
表名(字段1,字段2…[索引1,索引2…,约束1,约束2…])[表选项1,表选项2…];

字段设定格局:
字段名 类型 [字段属性1,字段属性2…]
类型:int ,tinyint, float, double, char, varchar, text, datetime, date,
time, timestamp…
字段属性:
auto_increment:整数自增(一定是主键卡塔 尔(英语:State of Qatar)
primary
key:设定主键,且是唯风华正茂的,一个表里面只好设置二个,不能够为空(null卡塔尔国
unique
key:设定独一索引,八个数据表里面能够设置八个独一索引,那一个字段中能够多少个值为空(null卡塔 尔(英语:State of Qatar)
not null:无法为空
default:设定暗中认可值
comment ‘字段表达文字’:字段的验证;

create table if not exists createtest(
id int auto_increment primary key,
name varchar(40) not null unique key,
password varchar(40) not null,
age tinyint default 18,
email varchar(40) comment '电子邮件'
);

目录:对数据库内部的有个别表全数多少开展事先的某种排序;
平时性索引:key(字段名);
独一索引:unique key(字段名);
主键索引: primary key(字段名);
生机勃勃道主键:primary key(七个字段名用逗号隔开分离);
全文索引:fulltext(字段名卡塔尔;
外键索引:foreign key(字段名卡塔尔 references
表名(字段名);(二个表的字段是另一个表的某部字段(一定得是主键卡塔尔国,假诺输入的值不再外面表的字段里,则不可能录入卡塔尔国

create table tab1_key(
id int auto_increment,
name varchar(20) not null,
emai varchar(50) not null,
age int not null default 18,
grades1 int,
primary key(id),
unique key(name),
foreign key(grades1) references tab2_key(grades2)
);
create table tab2_key(
stu_id int not null,
teacher varchar(20) not null,
floor int not null,
grades2 int auto_increment primary key
);

封锁:须要数据满意哪些条件的生机勃勃种规定
唯风流浪漫限定:unique key(字段名);
主键节制: primary key(字段名);
外键节制:foreign key(字段名卡塔尔 references
表名(字段名);(一个表的字段是另三个表的某些字段(一定得是主键卡塔尔国,若是输入的值不再外面表的字段里,则不可能录入卡塔 尔(英语:State of Qatar)
非空约束:not null;设定三个字段时不可能为空值
暗中同意约束:default XX值,设定三个字段的暗许值为xx;
反省约束:check(某种剖断语句卡塔 尔(英语:State of Qatar)

create table tab_check(
age tinyint,
check (age>0 and age<100)
);-- 但是mysql并不能生效,语法能够通过

表选项:创制七个表的时候,对该表的完全设定:
charset=要动用的字符编码;
engine=要利用的蕴藏引擎(也叫表类型卡塔尔;(暗中同意是InnoDB卡塔尔国

关周到据库表是用于存款和储蓄和团伙音信的数据结构,能够将表精晓为由行和列组成的表格,形似于Excel的电子钟格的款型。有的表简单,有的表复杂,有的表根本不用来积存任何长期的数量,有的表读取时不行快,但是插入数据时去非常糟糕;而俺辈在事实上开垦进度中,就恐怕须求多姿多彩的表,差异的表,就象征囤积差别门类的多少,数据的拍卖上也会设有着距离,那么。对于MySQL来讲,它提供了很各系列型的蕴藏引擎,我们能够依照对数据管理的要求,选用差别的寄存引擎,进而最大限度的利用MySQL强盛的效应。那篇博文将总括和分析各样引擎的特色,以致适用途合,并不会纠缠于越来越深等级次序的东西。我的上学形式是先学会用,精通怎么用,再去领略到底是什么能用的。上面就对MySQL扶植的积存引擎进行轻易的介绍。

图片 1

auto_increment=设定当前表的自增进字段的伊始值,默许是1
comment=‘该表的局地证实文字’create table 表2 like 表1;

规行矩步二个表的组织成立一个新表:created table 表1 like 表2;

在原来就有的表结构中插入相通表结构表中的具有数据:insert into 表1 select *
from 表2;

删:

剔除数据库:drop database [if exists]
数据库名;(if exists假若不设有不会报错卡塔尔

剔除数据表:drop table [if exists]
表名;(if exists假设海市蜃楼不会报错卡塔 尔(英语:State of Qatar)

改:

添加字段:alter table 表名 add 新字段名 字段类型 [字段属性列表];
修改字段:alter table 表名 change 旧字段名 新字段名 新字段类型 [新字段属性列表];
修改字段(只改属性):alter table 表名 modify 字段名 新字段类型 [新字段属性列表];
修改表名:alter table 表名 rename [to] 新表名;
删除字段:alter table 表名 drop 字段名;
添加普通索引:alter table 表名 add key (字段名1[,字段名2,字段名3…]);
删除普通索引:alter table 表名 drop key 字段名;
添加唯一索引(约束):alter table 表名 add unique key(字段名1[,字段名2,字段名3…]);
添加主键索引(约束):alter table 表名 add primary key(字段名1[,字段名2,字段名3…]);
删除主键索引(约束):alter table 表名 drop primary key;#每一个表最多一个主键
添加外键索引(约束):alter table 表名1 add foreign key (字段名1[,字段名2,字段名3…]) references 表名2 (字段名1[,字段名2,字段名3…]);
删除外键索引(约束):alter table 表名1 drop foreign key 字段名;
添加字段默认值(约束):alter table 表名 alter 字段名 set default 默认值;
删除字段默认值(约束):alter table 表名 alter 字段名 drop default;

多少的操作

增:

形式1、insert [into]
表名[(字段名1,字段名2,…)]
values(值表明式1,值表明式2,…),(…),…;

  最常用的插入语句,能够一遍性插入多行数据,用逗号隔开分离;在那之中的值表明式能够是一个“直接值”或“函数调用结果”;要是对应字段是字符或时刻档次,值应该利用单引号;

形式2、replace
[into]表名[(字段名1,字段名2,…)]
values(值表明式1,值表明式2,…),(…),…;

  用法和样式1平等,唯风姿浪漫分歧是若是插入语句的主键或唯后生可畏键形似,则会直接沟通已经存在的数码;

形式3、insert
[into] 表名[(字段名1,字段名2,…)] select 字段名1,字段名2,…from
别的表名;

  将select语句询问的结果数据都插入到钦命的表中,须求专一select语句询问出来的呼应字段;

形式4、insert
[into] 表名 set 字段名1=值表明式1,字段名2=值表达式2,…;

款式5、load
data infile ‘文件名(相对路线卡塔尔’ into table 表名;

  load
data:适用于载入如下图所示的“结构整齐不乱的公文数据”(要在乎有的编辑器会给文书档案尾部增添BOM字符来占位,导致于无法载入卡塔 尔(阿拉伯语:قطر‎

图片 2

删:

delete from 表名 [where 条件] [order by 排序字段] [limit
约束行数];

  删除数据还是是以“行”为单位进行,平日删除数据都应该带上where条件不然就能删除全体数据(极其危险卡塔尔国,order
by 和limit 是为了挑选一些特定的数量,在其实使用中用得很少;

改:

update 表名 set 字段1=值1,字段2=值2,…[where 条件] [order by
排序字段] [limit 约束行数];

  平常update语句也都带上where条件,不然正是对具备数据开展改变(特别危急卡塔 尔(英语:State of Qatar),order
by 和limit 是为着筛选一些特定的数额,在事实上行使中用得相当少;

查:

select [all | distinct] 字段或表达式列表
[from子句] [where 子句]
[group by 子句] [having 子句] [order by 子句] [limit
子句]

字段:来源于表,表明式:相通于8+3,now()等

图片 3 图片 4

all暗中同意值:显示全体数据;
distinct:显示全体非重复的数量;
as:另起小名。select id as 序号 from tab1;

where
相通于别的语言的if条件判定语句,有true 和false 表示永真和永假

   where子句是对from子句中的“数据源”中的数据开展挑选的口径设定,挑选的编制是“豆蔻年华行风华正茂行”进行剖断,其意义和任何语言的
if
语句类似;where子句普通都供给使用各个运算符:算术运算符(+,-,*,/,%卡塔 尔(阿拉伯语:قطر‎,比较运算符(>,<,>=,<=,[=,<>]国际标准的也就是和不对等,==,!=卡塔尔国,逻辑运算符(and,or,not卡塔尔国,其余运算符(is,in,beween
and,like卡塔尔;

  is运算符是对空值和布尔值的论断,常见4种采纳意况:xx
is null(剖断某些字段是“null”值卡塔 尔(英语:State of Qatar),xx is not
null(推断有个别字段不是“null”值卡塔尔国,xx is true(剖断某些字段为“真”卡塔 尔(阿拉伯语:قطر‎,xx
is false(判定某些字段为“假”[false,0,0.0,”,null])

  in运算符用于表示字段归于某些值中的二个,而那几个值日常是零散而散乱的,xx
In (值1,值2,值3…);

  between
and运算符用于判定某些字段的数据值是或不是在有些给定的限量,xx between
值1 and 值2;也正是xx>=值1 and xx<=值2;

  like运算符用于对字符串实行模糊查找,xx
like ‘特征值’;
特征值有2个特别的号子,%(百分号卡塔尔国表示其余个数的轻便字符,_(下划线卡塔尔表示一个无节制字符;倘诺特征值中含有八个特殊符号则用转义字符(%和_卡塔尔国,‘%x%’内定字段包涵x的数据行,’x%’钦赐字段以x初阶的数量行,‘%x’钦点字段以x结尾的数量行,‘x_’钦点字段以x开首并只有多个字符的多少行,‘_x’内定字段以x结尾并唯有八个字符的数量行,‘%%%’钦命字段中满含%的数据行

select * from test where id>2 and sex!='man'; id大于2且sex不等于man;
select * from test where id>2 or sex='man'; id大于2或者sex等于man;
select * from test where not(sex='man'); sex不等于man;

 

group
by子句是用于对已经查询出的多寡开展分组

  group by 字段1[desc|asc],字段2[desc|asc],…;
分组的结果能够钦点排序方式暗许是asc(正序卡塔尔,常常分组使用三个字段,2个以上的字段少之又少

  分组过后的数码就剩下叁个三个组了,所以尽量不出口全部字段,有的字段不能针对三个组(举例含有姓名,年龄,性别字段的多寡表以性别字段分组过后,姓名和年龄字段就从未意思了卡塔尔,所以分组过后相同有用的消息就是总数[count(*)得出该组共有多少数量],和原本数据中的数据类型字段的集合音信[max(age)得出最大年龄,min(age)得出最交年龄,avg(age)得出平均岁数,sum(age)得出全部人岁数的总额](原则是独有被用来分组的字段和汇集字段卡塔尔国。

  select 班级,count(*) as 人数, max(体育成就) as
体育战绩最高分,min(体育成绩) as 体育成就最低分,avg(体育成就) as
体育成绩平均分,sum(体育成就) as 全体人体育成就总和 from test group by
班级;

having
子句的功能和where完全雷同,可是是对已部分分组数据开展筛选,所以having子句一定在group
by子句使用后技术利用

  select 班级id,count(*) as 人数, max(体育成绩) as
体育成就最高分,min(体育成就) as 体育战表最低分,avg(体育成绩)
as 体育成就平均分,sum(体育成就) as 全数人体育战表总和 from test group by
班级id having 体育成就平均分>60;

order by
子句是将前方已经得到的数码以设定的字段实行排序后输出(desc倒序,asc顺序,默许是asc卡塔 尔(阿拉伯语:قطر‎

  order by 字段1 [asc|desc], 字段2 [asc|desc], …;
多少个字段的排序都以白手起家在上三个排序的底子上万一还应该有“相等值”再持续排序;

  select * from test order by age;

  select * from test order by age, weight;

limit 子句用于将曾经获取的多寡收取钦赐的几行出来

  limit 开端行号, 抽取的行数;
开头行号从0起初计时,发轫行号能够轻易,省略后私下认可从第0行带头抽取多上行;

  select * from test where order by age desc limit 0,1;

在select语句的款型上无数的子句都得以轻松,不过要是现身他们的顺序无法被打乱,where子句信任from子句,having子句正视group
by子句,select
的字段依赖于from子句,有依附关系的无法在所依附的靶子在此以前现身也不能够凭空现身;用from语句询问出多少,使用where语句将查询的多少开展按需挑选,使用group
by语句将挑选过的多寡实行分组,使用having子句将分组的数据开展筛选,使用order
by语句将筛选后的数量开展排序,用limite x,y语句将排序后的特定行输出。

  select classid,avg(age) as age from test where sex=’man’ group by
classid order by desc limit 0,1;

老是查询:

  表1 [一而再格局] join 表2 [on 连接条件] [[连天情势] join 表3
[on 连接条件]…];

  交叉连接:表1 jion
表2;表示交叉连接(形式有3种卡塔尔;

select * from test1,test2;
select * from test1 join test2;
select * from test1 cross join test2;

图片 5 图片 6

图片 7图片 8

  内连接:表1 [inner] join 表2
on 三番五次条件;
连天条件一般是四个表有协作字段,然后将几个表的联合字段等起来,有一些相仿于三个表的外键关系

select * from test1 join test2 on test1.id=test2.id;

图片 9

  外接连:左外连接、右外连接和全外连接(full
[outer]
join卡塔 尔(阿拉伯语:قطر‎mysql不协助全外连接;左右外接连正是将三个表的内链接结果再增进某些表数据多余(左右表,左表多余叫左连接,右表多余叫右连接卡塔 尔(英语:State of Qatar)的那部分。
  表1(左表) left [outer] join 表2(右表卡塔尔 on 连接条件;
  表1(左表) right [outer] join 表2(右表卡塔尔国 on 连接条件;

图片 10  图片 11  图片 12 图片 13

图片 14

一同查询(union卡塔 尔(阿拉伯语:قطر‎:将八个颇有同样字段数量的查询语句的结果以“上下积聚”的办法归总成二个询问结果,所以三个select语句的查询结果的字段数必须是如出意气风发辙的,平日也相应让字段类型具有大器晚成致性,也足以进行越来越多的联手:select
语句1 union [all/distinct] select 语句2;暗许自动消逝重复行,order
by和limit语句是对协同后的言辞实行筛选:select 语句1 union
[all/distinct] select 语句2 order by子句 limit 子句;

select id,d1,d2 from test0 union select id,c1,c2 from test2;

图片 15

 有了union,所以能够动用左右外连接然后在一同就足以做到mysql的全外连接了。

any、all、some、exists子查询:

  some和any有同风姿浪漫的意味,是别的一个的意味,当满足放肆多少个即能够查询出来,而all则必要满意全部的值才行,何况some、all都是针对性列子查询,即只好针对风流罗曼蒂克组值。

select * from test2 where id > any(select id from test1);
select * from test2 where id > all(select id from test1);

图片 16 图片 17

图片 18

图片 19

   exists子查询为 where
exists(子查询);该子查询假使有多少行,则exists的结果是true,不然正是false,所以后往现身任何收取或然都不抽取而失去了她的实际意义,所以该子查询往往不是单身的子查询,而会和主查询中的数据表创设某种关联(举个例子总是关系卡塔 尔(阿拉伯语:قطر‎,创建的章程是隐式的在代码上并未反映关系,但却在中间有一而再一而再的落实(在子查询的where条件语句中选取了主查询的字段卡塔尔国。

select * from test1 where exists(select * form test2 where type like '%x%' and id=test1.id);

代表查询test第11中学的数据种类满含‘x’字样的数目(而数据连串存在test第22中学,而test中并未type字段,七个表能够因而id关联卡塔尔
若是几个询问要求不仅能够用一而再查询也足以使用子查询,则援用使用连接查询效能更加高

视图

create view 视图名 as select语句;
  视图约等于任何编制程序语言中的函数,把select语句询问出来的具有数据封装起来作为叁个视图,而在采纳视图是真是三个数据表使用就好,删除视图也和删除数据表雷同;

create view viewtest as select id,name,age,email from test where id between 50 and 100;
select * from view test where id>80;
drop view [if exists] viewtest;

数据备份

导出的时候注意是切换到根目录之后
1.导出整个数据库
  mysqldump -u 顾客名 -p 数据库名 > 导出的文本名
  mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sq
2.导出一个表
  mysqldump -u 顾客名 -p 数据库名 表名> 导出的公文名
  mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql
3.导出二个数据库结构
  mysqldump -u wcnc -p -d –add-drop-table smgp_apps_wcnc
>d:wcnc_db.sql
注:  -d 没有数量 –add-drop-table 在各类create语句此前扩张叁个drop
table
4.导入数据库
  mysql –h 服务器名 –u登入名 –p 数据库名<文件名
5.导入数据表
  常用source 命令
  进入MySQL数据库调控台,
mysql -u root -p
mysql>use 数据库
  然后使用source命令,后边参数为脚本文件(如这里运用的.sql)
mysql>source d:wcnc_db.sql

图片 20

图片 21

Leave a Comment.