基础操作

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:整数自增(一定是主键)

primary key:设定主键,且是唯一的,一个表里面只能设置一个,不能为空(null)

unique key:设定唯一索引,一个数据表里面可以设置多个唯一索引,这个字段中可以多个值为空(null)

not null:不能为空

default:设定默认值

comment ‘字段说明文字’:字段的说明;

create table if not existscreatetest(

idint auto_increment primary key,

namevarchar(40) not null unique key,

passwordvarchar(40) not null,

agetinyint default 18,

emailvarchar(40) comment '电子邮件');

索引:对数据库内部的某个表所有数据进行预先的某种排序;

普通索引:key(字段名);

唯一索引:unique key(字段名);

主键索引: primary key(字段名);

联合主键:primary key(多个字段名用逗号隔开);

全文索引:fulltext(字段名);

外键索引:foreign key(字段名) references 表名(字段名);(一个表的字段是另一个表的某个字段(一定得是主键),如果输入的值不再外面表的字段里,则不能录入)

create tabletab1_key(

idintauto_increment,

namevarchar(20) not null,

emaivarchar(50) not null,

ageint not null default 18,

grades1int,primary key(id),unique key(name),foreign key(grades1) referencestab2_key(grades2)

);create tabletab2_key(

stu_idint not null,

teachervarchar(20) not null,floor int not null,

grades2int auto_increment primary key);

约束:要求数据满足什么条件的一种规定

唯一约束:unique key(字段名);

主键约束: primary key(字段名);

外键约束:foreign key(字段名) references 表名(字段名);(一个表的字段是另一个表的某个字段(一定得是主键),如果输入的值不再外面表的字段里,则不能录入)

非空约束:not null;设定一个字段时不能为空值

默认约束:default XX值,设定一个字段的默认值为xx;

检查约束:check(某种判断语句)

create tabletab_check(

agetinyint,check (age>0 and age<100)

);--但是mysql并不能生效,语法能够通过

表选项:创建一个表的时候,对该表的整体设定:

charset=要使用的字符编码;

engine=要使用的存储引擎(也叫表类型);(默认是InnoDB)

关系数据库表是用于存储和组织信息的数据结构,可以将表理解为由行和列组成的表格,类似于Excel的电子表格的形式。有的表简单,有的表复杂,有的表根本不用来存储任何长期的数据,有的表读取时非常快,但是插入数据时去很差;而我们在实际开发过程中,就可能需要各种各样的表,不同的表,就意味着存储不同类型的数据,数据的处理上也会存在着差异,那么。对于MySQL来说,它提供了很多种类型的存储引擎,我们可以根据对数据处理的需求,选择不同的存储引擎,从而最大限度的利用MySQL强大的功能。这篇博文将总结和分析各个引擎的特点,以及适用场合,并不会纠结于更深层次的东西。我的学习方法是先学会用,懂得怎么用,再去知道到底是如何能用的。下面就对MySQL支持的存储引擎进行简单的介绍。

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如果不存在不会报错)

改:

添加字段: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字符来占位,以致于不能够载入)

删:

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

删除数据依然是以“行”为单位进行,通常删除数据都应该带上where条件否则就会删除所有数据(极度危险),order by 和limit 是为了筛选一些特定的数据,在实际应用中用得较少;

改:

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

通常update语句也都带上where条件,否则就是对所有数据进行修改(极度危险),order by 和limit 是为了筛选一些特定的数据,在实际应用中用得较少;

查:

select [all | distinct] 字段或表达式列表 [from子句] [where 子句]

[group by 子句] [having 子句] [order by 子句] [limit 子句]

字段:来源于表,表达式:类似于8+3,now()等

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”值),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 * fromtest1,test2;select * from test1 jointest2;select * from test1 cross join test2;

内连接:表1 [inner] join 表2 on 连接条件;

连接条件通常是两个表有共同字段,然后将两个表的共同字段等起来,有点相似于两个表的外键关系

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

外连接:左外连接、右外连接和全外连接(full [outer] join)mysql不支持全外连接;左右外连接就是将两个表的内链接结果再加上某个表数据多余(左右表,左表多余叫左连接,右表多余叫右连接)的那部分。

表1(左表) left [outer] join 表2(右表) on 连接条件;

表1(左表) right [outer] join 表2(右表) on 连接条件;

联合查询(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;

有了union,所以可以使用左右外连接然后在联合就可以完成mysql的全外连接了。

any、all、some、exists子查询:

some和any有相同的意思,是任何一个的意思,当满足任意一个即可以查询出来,而all则需要满足所有的值才行,而且some、all都是针对列子查询,即只能针对一组值。

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

exists子查询为 where exists(子查询);该子查询如果有数据行,则exists的结果是true,否则就是false,所以往往出现全部取出或者都不取出而失去了他的实际意义,所以该子查询往往不是独立的子查询,而会和主查询中的数据表建立某种关系(比如连接关系),建立的方式是隐式的在代码上并没有体现关系,但却在内部有连接的实现(在子查询的where条件语句中使用了主查询的字段)。

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

表示查询test1中的数据类别带有‘x'字样的数据(而数据类别存在test2中,而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

h5MYSQL并进行增删查改_mysql增删改查相关推荐

  1. mysql8.0增删改查语句_MySQL增删改查语句

    /数据表,显示表的结构) l 创建数据库 create database student l 删除数据库 drop database student l 创建数据表 create table admi ...

  2. mysql增删改查 简称_mysql增删改查基本语句

    mysql的增删改查属于基本操作,又被简称CRUD,其中删用的较少,毕竟这个功能给用户是是非常危险的,就是客户删除的数据也没有真正的删除,其中查询是十分常用的. 1 mysql数据库增加:create ...

  3. mysql增删改查扩展_MySQL(增删改查补充)

    SQL语句数据行操作补充 create table tb12( id int auto_increment primary key, name varchar(32), age int )engine ...

  4. python操作postgre库,批量进行增删改查和计时比较效率,封装好的普通增删改查和批量增删改查类拿来即用

    python操作postgre库,批量进行增删改查,封装类,拿来即用 1. 新建postgre.py文件,使用psycopg2封装普通增删改查和批量增删改查类 postgre.py import ps ...

  5. mysql下删改增语句_MySQL增删改查

    以下是MySQL最基本的增删改查语句,很多IT工作者都必须要会的命令,也是IT行业面试最常考的知识点,由于是入门级基础命令,所有所有操作都建立在单表上,未涉及多表操作. 前提:在进行"增删改 ...

  6. 学生的新增mySQL文档_MySQL增删改查

    连接命令:mysql -h[主机地址] -u[用户名] -p[用户密码] 创建数据库:create database [库名] 显示所有数据库: show databases; 打开数据库:use [ ...

  7. mysql分析表增删改统计_MySQL增删改查|附思维导图

    对于数据库的学习,增删改查一直是我们老师啰嗦的重点,他说(原话):对于常用sql语法我们一定要牢记于心,尤其是各种查询的用法,在面试的时候,一个小小的知识点,面试官都可以推断出求职者的基础是否扎实. ...

  8. mysql删除表命令语句_MySQL增删改查语句命令(一)

    增删改查语句 增删改查的语句命令为 增:insert 删:delete 改:update 查:SELECT或者show 库操作 创建数据库:create database shujukuba; 创建带 ...

  9. mysql修改字段默认值_MySQL增删改查操作

    增删改查操作 查询表中的所有的记录:select from 表名(xs) 创建数据库:create database if not exists xsgl; 8.2创建表:cerate table i ...

最新文章

  1. 你写的接口都测试吗?测什么?怎么测?
  2. 安装yarn 心得分享
  3. python基础题库-Python题库
  4. 使用eclipse开发javaweb登录功能
  5. 青海省多地日降水量突破历史极值
  6. swap关于指针的使用
  7. Javascript预解析、作用域、作用域链
  8. 大前端的自动化工厂(1)——Yeoman
  9. shiro 30分钟未操作_大道至简:请笑纳股票精华知识:30分钟k线操作,用最简单的超短线炒股方法赚大钱!...
  10. 3D相机成像原理简介
  11. ElasticJob分布式调度,分布式多个微服务执行只需要执行一个定时任务,基本概念介绍(一)
  12. 软考软件设计师下午真题-面向对象的程序设计与实现-策略设计模式(2015年下半年试题六))代码讲解
  13. 随机森林 算法原理详解与实现步骤
  14. html ajax传参数 20,jQuery Ajax传参
  15. 基于java的在线医院挂号系统设计(含源文件)
  16. 二分查找及时间复杂度
  17. 2020年数学建模国赛C题
  18. C4.5算法缺失值处理
  19. 前鼻音、后鼻音字对比;平、翘舌音的字对比;
  20. 2020全球创业者城市Top50

热门文章

  1. php特殊函数,PHP常用特殊运算符号和函数的简单示例
  2. linux的阻塞waitqueue,Linux阻塞控制 wait_event与wait_event_interruptible函数详解
  3. 华为手机如何升级鸿蒙系统_华为杨海松:明年所有华为自研设备升级鸿蒙系统...
  4. oraclek导出表_Oracle导出DMP文件的两种方法
  5. 系统封装工具_去工具化/脚本化理解,自动化运维落地最佳实践之业务/架构/模型/方法...
  6. 彻底理解Python生成器和迭代器
  7. linux cpu %us,Linux top里面%CPU和us%的解释
  8. qt 删除文件夹_Qt 贪吃蛇制作(含源码)
  9. pdb连接数_CDB与PDB的连接-阿里云开发者社区
  10. ar 微信小程序_微信AR玩法支持实现后,微信小程序会有想象空间吗?