天天看点

mysql 介绍 知乎_SQL介绍——Mysql

一、运算符号

二、查询关键字

1.各关键字优先级

where > group by > having > order by > limit

2.Select

语法:select 字段名 from 表名 where 条件语句;

说明: - 多个字段名用,隔开,也可用*表示所有字段 - 字段名可用distinct修饰,表示查询结果中该字段相同的数据只会保留第一行数据

3.Where

select、update、delete等其他DDL语句的子句,用来表示执行操作的条件

语法:where 条件字段 运算符 条件值

说明: - 运算符后面的条件值,如果是文本类型,需要使用引号包含,非文本类型的值不要用引号包含。 - where子句中可以跟多个条件,每2个条件之间用逻辑运算符 and 或者 or 分隔开。

4.like

作为where子句中的比较运算符来使用,通常与通配符配合进行模糊匹配。

语法:

where 条件字段 like '[abcd]_%';

5.Top或者Limit或者Rownum

从查询结果中筛选出排序靠前的指定行数数据。

并非所有的数据库管理系统都支持top语句,不同的数据库管理系统中,top语句的语法也不相同。

SQL Server:

语法:select top 5 LastName from Persons

说明:从Persons表中,搜索排序在前5的数据

语法:select top 50 percent from Persons

说明:从Persons表中,搜索排序在前50%的数据

Mysql:

语法:select LastName from Persons limit 5

说明:从Persons表中,搜索排序在前5的数据

Oracle:

语法:select LastName from Persons where rownum<=5

说明:从Persons表中,搜索排序在前5的数据

6.Order By

对搜查的结果进行排序显示,可以指定多列,对搜查结果进行升序或者降序显示

select * from Persons order by FirstName asc,LastName desc

说明:多个排序字段之间用,分隔开

Asc表示升序,Desc表示降序

每个排序字段要单独指定圣墟还是降序

7.Case When

将查询结果某个字段的值,根据指定的条件转换为其他值。

语法1:

case

when 条件1 then 值1

when 条件2 then 值2

else 值3

end as 字段名

语法2:

case 字段名

when 现有值1 then 修改值1

when 现有值2 then 修改值2

else 修改值3

end as 字段名

三、查询技巧

1.计算日期差

Mysql中没有直接计算两个日期差值的函数,可以用以下方式计算:

To_Days(date1) - To_Days(date2)

2.时间戳与日期比较

最好将日期转化为时间戳进行比较。因为将时间戳转换为日期的函数from_unixtime不支持负数,可能导致比较结果出错。

3.设置自增数据

Mysql的命令支持自增类型的语法:

set @num:=1;

update devices set imei=(@num:=(@num+1));

4.将查询结果插入其他表

insert into table1(name,type) select name,type from table2

5.SQL嵌套使用

语法:select * from table1 where id in (select id from table2);

说明:若子查询结果只包含一个字段,可作为父查询中符号in的条件

语法:select * from (select * from table1 ) as table2

说明:若子查询结果只包含一个字段,建议给子查询起一个别名,作为父查询中的一张表来使用

四、其他数据操作语句

1.Update

修改指定数据表中,符合条件行的某些字段值

语法:update 表名 set 列名=目标值 where 条件语句

说明:

1.可设定多个字段值,键值对用,隔开

2.where子句表示只更新符合条件的数据

2.Insert into

向指定的数据表中插入数据。

语法:insert into 表名(字段名1,字段名2) values(值1,值2);

说明:

1. 表名后面的字段数量,比如与values中的值数量保持一致。

2. 表名后面的字段,可以只是数据表中的一部分字段。语句执行后,未指定的字段会设置为默认值。

3. 表名后面的字段名,不要用引号包含。如果values后面的值是字符型,需要用引号包含。

4. 语句执行后,values后面的值会按照编写的顺序,依次插入到表名后面字段中。

语法:insert into 表名 values(值1,值2)

说明:

1. 如果表名后面没有指定字段列表,表示数据表中的每个字段都需要插入值。

2. 此时values后面值得数量,必须与数据表中的所有字段数保持一致

3.Delete

删除指定数据表中,符合条件的数据行

语法:delete from Persons where LastName='Gates'

说明:带有where子句表示只删除符合where条件的数据

语法1:delete from Persons

语法2:delete * from Persons

说明:删除所有数据但是保留表的结构、属性、索引

五、数据库控制语句

1.连接服务器

连接到本地:

语法:mysql -u username -ppassword

说明:-u和username之间可以有空格,也可以不写空格

如果用户没有设置密码,不要加上-p+password这部分内容

-p和password之间不要输入空格,否则必须再输入一次密码

连接到其他服务器:

语法:mysql -h 192.168.2.1 -u username -ppassword

说明:-h和ip地址之间可以有空格,也可以不写空格

参照“连接到本地”的3条说明

断开连接:

语法:exit

2.设置密码

添加密码:

语法:mysqladmin -u root password "password"

取消密码:进入mysql数据库

将user数据表中,password的字段修改为空

重启mysql服务,或者使用“重新载入数据”命令

修改密码:

语法:set password for 'root'@'localhost' = password('123456'); 说明:登录Mysql之后使用

语法:mysqladmin -u root -p password "NewPassword"

语法:mysqladmin -u root -pOldPassword password "NewPassword"

语法:update user set Password=password("123456") where user="root"; 说明: 1. 登录Mysql之后使用 2. 修改后重启mysql服务,或者使用“重新载入数据”命令

3.账号管理

创建用户:

语法:create user 'username'@'host' identified by 'password';

说明:host表示允许用户连接数据库的主机,localhost表示本地,%表示任意主机

password可以为空,表示该用户登录不需要密码

授权:

语法:grant privileges on DatabaseName.TableName to 'username'%'host' with grant option;

说明:privileges表示赋予用户的权限,权限包括select、insert、update、delete,在授权时,可以指定多个权限,两个权限之间用","分割。也可以用all表示所有权限

Database表示数据库名,可以用*表示所有数据库

TableName表示表名,可以用*表示所有表

with grant option:如果授权命令中没有加入这条选项,那么被授权的用户,不可以对其他用户进行授权

identified by 'password':在授权命令中,也可以加入这条选项,来修改命令或者去掉命令

显示授权:

语法 :show grants for 'username'@'host'

取消授权:

语法 :revoke privileges on DatabaseName.TableName from 'username'@'host' 说明:取消授权时,指定的DatabseName.TableName范围,必须与进行授权时指定的范围一直,取消授权才能生效

六、数据库、数据表操作语句

创建数据库:

语法:create database DatabaseName default character set 编码 collate 编码

显示数据库列表:

语法:show databases;

判断表是否存在:

语法:if exists tablename

创建表:

语法:create tablename if not exists tablename 说明:判断表是否存在,如果不存在的话再创建表

用查询结果创建临时表:

语法:create temporary table TableName ( select ...);

删除表:

语法:drop table if exists TableName; 说明:如果表tablename存在就删除这张表

重新载入数据:

语法:flush privileges

七、函数库

1.数学函数取模:mod(a,b)

在(0,1)之间随机:rand()

四舍五入取整:round(a,b)

2.字符串函数字符串拼接:concat(str1,str2...)

字符串替换:replace(字段名,原字符,替换后字符)

3.数据类型转换字符串to数字:select name+0

4.日期函数

函数:

时间格式: