MySQL语言分为:DCL(数据库控制语言)、DDL(数据库定义语言)、DQL(数据库查询语言)、DML(数据库操作语言),这一节我们先从mysql的语言开始。

DCL:数据库控制语言,用来设置数据库用户或角色权限的语句,关键字grant revoke等

mysql -u 用户名 -p 密码 -h 服务器IP地址 -P服务器MySQL端口号 -D数据库名

当客户端连接到服务器是,MySQL访问控制有两个阶段:连接验证 对用户名密码,请求验证 对权限验证

默认表:MySQL安装时自动创建一个名为mysql的数据库,包含五个权限表:

user表包含用户账号密码主机信息 (Host:账号作用IP范围,%-为不限制)

db表包含某用户对数据库访问权限

table_priv表和columns_priv表包含表列级权限

procs_priv 表存储函数和存储过程权限

#创建新用户账户
CREATE USER username@hostname IDENTIFIED BY 'password'
"%.baidu.com","%"/"-"

#查看用户权限
SHOW GRANTS FOR username@hostname

#删除用户账户
DROP USER username@hostname[,username@hostname]

#添加权限
GRANT privilege[,privilege] ON privilege_level #指定一个或多个权限或'ALL' 在层级(表)
TO user [IDENTIFIED BY 'password'] #给某个用户
[REQUIRE tsl_option] #安全的连接
[WITH [GRANT_OPTION | resource_option]] #是否可以被改掉(选可以)
//GRANT SELECT,UPDATE,INSERT ON alibaba.* TO rfc;

#允许远程连接
grant all privileges on *.* to 'root@%' identified by '' with grant with grant option;
flush privileges; #刷新权限

#撤销权限
REVOKE privilege_type [(colimn_list)] [,privilege_type [(colimn_list)]]
ON [object_type] privilege_level
FROM user[,user]

#修改密码
.用SET PASSWORD命令:
登录之后
set password for username@host = ''
.用UPDATE编辑user表:
use mysql;
update user set password=password('') where user='user';
flush privileges;
.用mysqladmin:
mysqladmin -u用户名 -p旧密码 password 新密码
.在忘记root密码或初始化密码时:
windows为例:
关闭正在运行的MySQL服务
打开DOS窗口,转到mysql的bin目录
mysqld --skip-grant-tables #此DOS窗口运行着跳过权限检查启动mysql的命令,.0版本使用mysqld --console --skip-grant-tables --shared-memory
再打开一个DOS窗口输入mysql回车,use mysql;
改密码
flush privileges;
退出quit
注销系统

#数据库备份
mysqldump -u[username] -p[password] [database_name] > [dump_file.sql]
mysqldump -u[username] -p[password] --no-date [database_name] > [dump_file.sql] #不包含数据只导出结构
mysqldump -u[username] -p[password] --no-create-info [database_name] > [dump_file.sql] #不包含结构只导出数据
mysqldump -u[username] -p[password] --all-database > [all_dbs_dump_file.sql] #导出全部数据库

#数据库维护
#分析表语句
ANALYZE TABLE 表名1[,表名2] #返回表名 操作 分析状态 和信息,会尝试修复
#优化表语句
OPTIMIZE TABLE tabe_name; #优化由于表操作导致的碎片问题
#检查表语句
CHECK TABLE table_name; #仅检查
#修复表语句
REPAIR TABLE table_name; #仅修复

DDL:数据库定义语言,用于描述数据库中创建库表,关键字create alter drop等

#创建数据库
CREATE DATABASE [IF NOT EXISTS] database_name;

#删除数据库
DROP DATABASE [IF EXISTS] database_name;

#创建表
CREATE TABLE [IF NOT EXISTS] table_name(
colume_list
)engine=table_type;
#定义列
字段名 数据类型 整型宽度、字符大小极限65535 是否可空NOT NULL 是否自增auto_increment 默认值default 索引 主键primary key 注释等等

eg:create table tname(
id int() auto_increment primary key, #auto_increment自增 primary key主键
name varchar(),
age varchar(),
sex varchar()) default charset=utf8;

#修改表
ALTER TABLE table_name CHANGE column_name new_column_name(不改写原来的) varchar() not null;
ALTER TABLE table_name ADD column_name varchar() not null [FIRST | AFTER 字段];
ALTER TABLE DROP column_name;
#删除索引
ALTER TABLE 'table_name' DROP UNIQUE(index) name;
#添加索引
ALTER TABLE 'table_name' ADD UNIQUE(name) #唯一索引
ALTER TABLE 'table_name' ADD FULLTEXT(name) #全文索引
ALTER TABLE 'table_name' ADD INDEX(name) #普通索引
#修改引擎
ALERT TABLE table_name ENGINE = InnoDB;

空值有NULL和None之分:NULL占了空间但内容是空的,None没有内容也不占空间 数据类型:

  • 数值类型:TINYINT 1字节 范围255;SMALLINT 2字节 范围65535;MEDIUMINT 3字节 8388607;INT 4字节 2^32;BIGINT 8字节 2^64;FLOAT 4字节;DOUBLE 8字节;DECIMAL(M,D) M整体位数,D小数位数;

    UNSIGHED无符号 ;zerofill剩余宽度用0补齐

  • 字符类型:CHAR 255字节(定长字符串,无论存多少内容255字节都是);VARCHAR 0-65535字节;TINYBLOB 0-255字节 存储二进制字符串;TINYTEXT 0-255字节 短文本;BLOB 0-65535字节 长二进制字符串;TEXT 0-65535字节 文本;MEDIUM BLOB/TEXT...;ENUM 数据长度为1则为0,1,2;SET 集合;

  • 时间类型:DATE 3字节 YYYY-MM-DD;TIME 3字节 HH:MM:SS;YEAR 1字节 YYYY;DATETIME 8字节 YYYY-MM-DD HH:MM:SS;TIMESTAMP 4字节 时间戳 默认插入/更新数据时的值;

  • 空间数据类型:GEOMETRY POINT 等等

数值类型(宽度) 字符类型(长度) 枚举enum("1","0")

引擎类型:

  • InnoDB:健壮的事务型存储引擎。表文件夹中存放.frm表结构文件 date文件夹中.ibdata1存放数据 .ibd存放索引
  • MyISAM:访问速度很快,但不支持外键和事务。每个MyISAM在磁盘上生成三个文件 .frm 表结构信息 .MYD 数据 .MYI 存储索引

设置引擎:默认InnoDB 显示所有支持的引擎:SHOW ENGINEs 字符集:默认latin1

索引类型:

  • 主键索引:primary

    在一个表中唯一,值不能重复,在数据查写读时能按一定顺序和排列工作

  • 唯一键:unique

    一个表中可以同时给多个字段设置unique,设置了的字段值不能重复null除外

  • 普通索引:index

    没有其他约束

    文本索引:fulltext

    5.7版本之后使用,加快大批量文本中的查找效率
  • mysql外键

    副表的非主键字段与主表的主键字段关联,那么这个副表的非主键字段称为外键

    在副表中添加一个主键中不存在的数据,操作会报错

    如果在主表修改或删除,副表中有对应数据,主表会默认阻止
  
#创建外键
[CONSTRAINT constraint_name] #约束名
FOREIGN KEY [foreign _key_name] (columns)
REFERENCES parent_table(columns_name)
ON DELETE 模式 #模式:district默认严格模式 cascade关联 set null将管理数据设置null no action什么都不做
ON UPDATE 模式; #添加外键
ALTER TABLE table_name ADD constraint FK_ID foreign key(key_name) REFERENCES parent_table(columns_name); #删除外键
ALTER TABLE table_name DROP FOREIGN KEY key_name

DQL:数据库查询语言,查询,关键字select等

SELECT
column_1,column_2,...
FROM table_1
[INNER | LEFT |RIGHT] JOIN table_2 ON CONDITIONS
WHERE conditions
GROUP BY column_1
HAVING group_conditions
ORDER BY column limit offset,length

#条件查询
select * from 表名 [where 条件];
select field1,field2,...fieldn... from 表名 [where 条件];
where后面的条件可以用>、<、>=、<=、!=等多种比较运算符,多个条件之间可以用or、and、not等逻辑运算符、
between begin_expr AND end_expr;<= >=;eg:BETWEEN CAST('2000-01-01' AS DATE) AND CAST('2001-01-01' AS DATE)、
LIKE 'value' #精准查询,可加% _ 如果需要可以加 ESCAPE'\'转译,此处\也可以指定为其他符号、in eg;
where in ...#不确定字符串包含关键字查找 FIND_IN_SET(要包含字符串,字段)、
group by 表达式,表达式... having group_conditions
#GROUP BY分组 having分组后进行过滤 配合聚合函数avg()计算一组值平均值 count()计算表中行数 instr()返回子字符串在字符串中第一次出现位置 sun()计算一组数值综合 min()在一组数值中找到最小值 max()在一组数值中找到最大值、
order by asc升序 desc降序,多列排序时后一列是在前一列基础上排,自定义 field(column,"A","D","B","C")

#去重查询
select distinct 字段 from 表名;
eg: select distinct name from students;//查询名字不相同的学生;
  select distinct name,age from students;//查询名字和年龄同时不同的学生
  .distinct必须放在最开头
  .distinct只能使用需要去重的字段进行操作。 ----也就是说我sidtinct了name,age两个字段,我后面想根据id进行排序,是不可以的,因为只能name,age两个字段进行操作.
  .distinct去重多个字段时,含义是:几个字段 同时重复 时才会被 过滤。

#排序查询
select * from 表名 [where 条件] [ order by field1 [desc/asc],field2 [desc/asc]... ];

eg:select *from student order by age desc;//查询学生表并按年龄降序排列。
.desc 降序排列,asc 升序排列
.order by 后面可以跟多个不同的排序字段,每个排序字段都可以有不同的排序顺序。
.如果排序字段的值一样,则相同的字段按照第二个排序字段进行排序。
.如果只有一个排序字段,则字段相同的记录将会无序排列。

#限制查询
select ... [limit 起始偏移量,行数];

eg:select * from student order by mark desc limit ;//取出成绩前五名的学生(省略了起始偏移量,此时默认为0)
默认情况下,起始偏移量为0,只写记录行数就可以。

#聚合查询
select 字段 fun_name from 表名 [where 条件] [group by field1,field2...] [with rollup] [having 条件];
.fun_name 表示要做的聚合操作,也就是说聚合函数,常用的有 : sum(求和)、count(*)(记录数)、max(最大值)、min(最小值)。
.group by关键字 表示要进行分类聚合的字段。比如要按照部门分类统计员工数量,部门就应该写在group by 后面。
.with rollup 是可选语法,表明是否对分类聚合后的结果进行再汇总
.having 关键字表示对分类后的结果再进行条件过滤。

#表连接
表连接分为内连接和外连接。
他们之间最主要的区别:内连接仅选出两张表中互相匹配的记录,外连接会选出其他不匹配的记录。
内连接:
... from table1 inner join table2 on table1.name=table2.name;
外连接 分为左连接和右连接
左连接:包含所有左边表中的记录,甚至是右边表中没有和他匹配的记录。
... from table1 left join table2 on table1.name=table2.name;
右连接:包含所有右边表中的记录,甚至是右边表中没有和他匹配的记录。
... from table1 right join table2 on table1.name=table2.name;
交叉连接:
...from table1 cross join table2 #产生a*b条,笛卡尔乘积

#联合查询
把多个SELECT查询结果合并起来
select column_1 from table1 union select column_2 from table2
列名总显示第一个查询语句列名,默认清除重复项,union all不去重

#子查询
select * from table1 where id =(select column from table2 where ...)
select * from table1 where id = and exisit (select column from table2 where ...) #加上and exists 有就查,没有不会报错

#查询用户信息
select user(); #查看当前用户
select user,host,db,command FROM information_schema.processlist; #查询连接的用户信息

#查看查询语句运行效率
explain select语句

DML:数据库操作语言,插入更新删除,关键字insert update delete等

#插入
insert into tname(id,name) values ("","xm") [ON DUPLICATE KEY UPDATE id=id+];

#拷贝表,具有SELECT字句的INSERT
create table new_table_name like table_name;
insert into new_table_name select * from table_name;

#替换
replace into tname(id,name) values ("","xm");

#更新
UPDATE [LOW_PRIORITY]#优先查询再更新 [IGNORE]#忽略错误 table_name SET column='value'
UPDATE table_name SET column=(select * from table_name)

#关联更新
updata table1,table2 set table1.arr=val,table2.arr=val where table1.column=value and table2.column=value
updata table1 join table2 set table1.column='val' , table2.column='val' where table1.col='value' and table2.col='value'

#删除
delete * from table_name [order by id desc] [limit row_count] [where ];
truncate * from table_name ; #这种方式效率很快,且重置自增

#关联删除
delete table1,table2 from table1 inner join table2 on...;

#设置写内存配置
max_allowed_packet=1M #限制接收的数据包大小,打的插入和更新会被限制导致失败
net_buffer_length=2K #insert语句缓存值2K-16M
bulk_insert_buffer_size=8M #一次性insert语句插入大小

常用内置函数

.聚合函数
avg() #返回平均值,计算中忽略NULL
count() #返回行数,不忽略NULL
sum() #求和
min()
max()
.字符串函数
group_concat() #select group_cancat(column) from table group by .. 将各项连接
concat() # select cancat(column1,column2) from table 将内容连接起来
concat_ws() # select cancat_ws("-",column1,column2) from table 将内容以-连接起来
left() #从左边取x个字符 left("abcde","") -> "abc"
replace() #替换 replace(整体字符串对象,被替换字符串,新字符串) update products set productsDescription = REPLACE(productsDescription,"old","new")
substring() #截取 substring(string,start[,length])start是从1开始计数的
trim() #trim( [ {both|leading|trailing} [removed_str] ],obj ) 参数:从两边去,前面去,后面去,去掉什么(不传为空格)
format() #保留位数 format(N,D[,locale]) N数字,D格式化小数位数,表示方式默认en_US
.日期和时间函数
curdate() #返回当前日期 --
now() #返回当前时间 -- :: 此时间只算程序执行时的时间
sysdate() #返回当前系统时间 -- :: 此时间时刻运算
sleep()
day() month() year() week()今年第几周 weekday()周一到周日对应0- dayname() #返回指定日期函数,设置dayname显示中文:SET @@lc_time_names='zh_CN'
datediff() #计算两时间之差天数 datediff('2000-01-01','2000-01-02')
timediff() #计算两时间之差时间返回00:: 参数可以是日期也可以是时间
timestampdiff() #timestampdiff(单位,start,end) 计算两时间之差返回单位可以是 day week month hour quarter second minute...
date_add()/datetime_add() #将时间间隔添加到date或datetime date_add(start,INTERVAL 数字 单位) 也可以例date_add(--,INTERVAL '1:1' day_month)

视图

.创建视图:
create view viewname as select ...
.修改视图:
alter view viewname as select ...

create or replace view as select ...
.删除视图:
drop view viewname;
.查看视图:
show full tables;

临时表与视图区别:视图一直存在,而临时表存在于内存中当客户端会话结束时自动删除
创建临时表 create temporary table tempname select ...

MySQL入门详解(一)---mysql的语言的更多相关文章

  1. MySQL入门详解(二)---mysql事务、锁、以及优化

    MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在一个商城系统中,用户执行购买操作,那么用户订单中应该加一条,库存要减一条,如果这两步由于意外只进行了其中一步那么就会发生很大的问题.而事 ...

  2. Mysql入门详解

    目录 数据库之Mysql 一 .简单了解数据库 二.Mysql的使用 三.多表查询 数据库之Mysql 本篇文章为观看某教学视频后所作个人总结 一 .简单了解数据库 1.1常见关系型数据库 mysql ...

  3. c++操作mysql入门详解

    首先,根据你当前的操作系统,还有开发工具,选择相应的mysql版本.本人选择的环境是win10 + vs2013 需要解决三个问题:1.下载安装mysql服务器,并登录mysql测试一下是否安装成功: ...

  4. MySQL入门详解(三)---mysql如何进行主从配置

    基本要求 两台服务器(windows,linux,mac) 双方mysql版本需一致,如不一致,只要主节点低于从节点 两台服务器防火墙关闭 双方数据库所用的用户,要具有远程访问的权限 主服务器配置 修 ...

  5. MySQL Explain详解 查看mysql语句详情

    在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有 ...

  6. mysql存储过程详解

    mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...

  7. mysql 存储过程详解 存储过程

    mysql存储过程详解 1.      存储过程简介         我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成 ...

  8. MySQL存储过程详解 mysql 存储过程

    原文地址:MySQL存储过程详解  mysql 存储过程作者:王者佳暮 mysql存储过程详解 1.     存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储 ...

  9. MySQL存储过程详解 mysql 存储过程(二)

    mysql存储过程详解 1.      存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL ...

随机推荐

  1. MySQL 并行复制(MTS) 从库更新的记录不存在实际却存在

    目录 背景 版本 分析 测试 背景 开了并行复制的半同步从库SQL 线程报1032错误,异步复制从库没有报错,偶尔会出现这种 版本 mysql 5.7.16 redhat 6.8 mysql> ...

  2. zabbix 监控安装

    注意:此篇是在安装好lnmp环境后才能部署的操作,所以,做之前准备好lnmp环境,或者可以参考我做的lnmp环境,之后接着此篇开始安装 监控系统Zabbix-3.2.1的安装 zabbix-serve ...

  3. ThinkPHP5代码执行的简单分析

    漏洞影响版本: ThinkPHP 5.0.5-5.0.22 ThinkPHP 5.1.0-5.1.30 漏洞复现: 一.mac的debug环境搭建. 一键化环境搭建工具: mamp pro ,调试工具 ...

  4. html头部标签大全

    http://www.css88.com/archives/8052#table-index

  5. 关于a标签的onclick与href的执行顺序

    onclick的事件被先执行,其次是href中定义的(页面跳转或者javascript), 同时存在两个定义的时候(onclick与href都定义了),如果想阻止href的动作,在onclick必须加 ...

  6. 判断一个类是否为另一个类的实例 instanceof关键字和isAssignableFrom方法的区别

    Which of the following is better? a instanceof B or B.class.isAssignableFrom(a.getClass()) The only ...

  7. MapReduce中的partitioner

    1.日志源文件: 1363157985066 13726230503 00-FD-07-A4-72-B8:CMCC 120.196.100.82 i02.c.aliimg.com 24 27 2481 ...

  8. python再探

    python是一门强大的高级编程语言,之前的文章中介绍了python的基础知识,接下来会介绍一些python更为高级的知识. 面向对象编程 基本知识 一般编程思想分为面向过程和面向对象,前者的基本单元 ...

  9. ubuntu安转QTcreator出现The default mkspec symlink is broken

    QT Creator安装:https://blog.csdn.net/arackethis/article/details/42326967 QT SDK安装:https://blog.csdn.ne ...

  10. Java之装饰模式

    1.装饰模式的理解 在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 2.装饰模式由4种角色组成 (1)抽象构件(Componen ...