搜索
您的当前位置:首页正文

Mysql常用语句

2023-11-08 来源:哗拓教育

select *from db_user where user_type in(5,8);select *from db_user where user_type between(5,8);select *from db_user where user_name like '%s%';<span style="font-family: Arial, Helvetica, sans-serif;">其中"%"可以匹配一个或多个字符</span>select *from db_user where user_name like '_3_';<span style="font-family: Arial, Helvetica, sans-serif;">“_”匹配一个字符</span>select *from db_user where user_name=a or password=3;//or关键字,匹配一个就行
select *from db_user order by id desc;
<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="sql">select *from db_user order by id asc;//升序
select id,user_name,password group by user_type;//每组只显示一条记录
select *from db_user order by id asc limit 3;//限制只显示三条记录
select *from db_user order by id asc limit 1,2.从编号一开始,查询两条记录
<p>select count(*) from db_user;//显示所有行的数目</p><p>select *from user_name ,user_type from tp_user,db_user here tp_user.id = db_user.id;//内连接查询,连接两个表</p><p>select *from tp_user where user_name in(select user_name from db_user);//查询tp_user中与db_user的user_name相同的记录</p><p>select *from tp_user where money >=(select money from db_user where id=1);//比较运算符的查询方式</p><p>select *from tp_user where user_name like '%php%';//查询包含php字段的记录</p><p>select Max(score) from tp_user;//查询socre最高的记录 </p><p>select *from tp_user where money<ANY(select money from db_user);//查询money小于所有db_user的记录,其中括号里的部分称为内查询,外面的称外查询</p><p><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">select *from tp_user where money>ALL(select money from db_user);//money大于所有的db_user</span></p><p><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">select user_name from tp_user UNION select user_name from db_user;//合并重复的user_name</span></p><p><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);"><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">select user_name from tp_user UNION ALL select user_name from db_user;//列出所有的结果,不合并</span></span></p><p>//正则表达式</p><p>select books from tp_book where books REGEXP '^php' //^ 匹配以特定开头或字符串开头的记录</p><p><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">select books from tp_book where books REGEXP 'php$';//$匹配以特定结尾的记录</span></p><p><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);"><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">select books from tp_book where books REGEXP '.p';//.匹配字符集和中任意一个字符,包括换行和回车</span></span></p><p><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);"><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);"><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">select books from tp_book where books REGEXP '[pca]';//[pca]匹配包含pca的记录</span></span></span></p><p><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">select books from tp_book where books REGEXP '[^c-z]';//[^]匹配除字符集合以外的任何一个字符</span></p><p><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);"><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">select books from tp_book where books REGEXP 'php|java|c#';//|相当于or匹配任意一个字符串</span></span></p><p><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);"><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);"><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">select books from tp_book where books REGEXP 'J*A';//匹配A之前出现过J字符的记录,*可以表示0个</span></span></span></p><p><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);"><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);"><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);"><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">select books from tp_book where books REGEXP 'J+A';//匹配A之前至少出现过一次J的记录,+至少表示1个</span></span></span></span></p><p><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);"><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);"><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);"><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);"><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">select books from tp_book where books REGEXP 'a{3}';//匹配a出现至少三次的记录</span></span></span></span></span></p><p><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">select books from tp_book where books REGEXP 'a{2,4};//匹配a字符至少出现2次至多出现4次的记录</span></p><p><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);"><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);"><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);"><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);"><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);"></span></span></span></span></span></p><p><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);"><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);"></span></span></p>
</pre><pre>

Mysql常用语句

标签:mysql

小编还为您整理了以下内容,可能对您也有帮助:

15个MySQL常用基本SQL语句

1、插入记录通过insertinto进行,SQL语句格式为:例如,向表stuinfo插入一条记录,SQL语句为:注意:上方是一条SQL语句,为了可读性换行,记住一条SQL语句默认以分号结尾。

2、MySQL的常见操作在这里先做一下总结,已经整合到代码里面,经过检验无误。

3、简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。例如,下面的语句查询testtable表中姓名为张三的nickname字段和email字段。

4、ORDERBY日期;这条SQL语句使用了窗口函数(WindowFunction)中的SUM函数,通过ORDERBY子句指定按日期升序排序,然后使用窗口函数计算每日的月累计数,并在结果集中返回。最终的结果集会包含日期、日产量和月累计数三个字段。

15个MySQL常用基本SQL语句

在学习SQL语句之前,首先需要区分几个概念,我们常说的数据库是指数据库软件,例如MySQL、Oracle、SQL Server等,而本文提到的数据库是指数据库软件中的一个个用于存储数据的容器。

在MySQL中,数据库称为database,数据表称为table,一个数据库软件中有多个数据库(databases),每个数据库中又可以有多个数据表(tables),最终,数据是存储在数据表中。

数据库和数据表之间的关系可以用下面这个图来表示,对于一个数据库来说,有多个数据表。

在正式开始写SQL语句之前,需要说明两点。

这里通过MySQL Workbench来写SQL代码,在Workbench中,执行一条SQL语句的方式有两种。

了解了这之后,接下来介绍一些常见的命令,分两部分:数据库常用命令和数据表常用命令。

1、查看有哪些数据库

2、创建数据库

创建一个名为Testdb的数据库。

3、创建数据库并指定编码格式

有些时候,为了防止中文乱码,创建数据库的时候需要指定编码格式。

4、使用某个数据库

使用mydb这个数据库,或者进入mydb这个数据库。

5、删除数据库

删除Testdb这个数据库。

1、查看有哪些数据表

进入某个数据库之后,想查看有哪些数据表,SQL语句为:

mydb是一个新建的数据库,所以自然是没有数据表。

2、创建数据表

建表SQL语句格式为:

说明: 每个字段以逗号分隔,最后一个字段不加逗号。

例如,给定一个学员信息表,如下表所示。

根据以上表格,建表SQL语句如下。

以上语句中,primary key表示主键,意思是这个字段作为记录的唯一标识,就像每个人的身份证号,都是唯一确定的。

3、查看表结构

查看表结构的SQL命令为:

执行该命令会显示表stuinfo的基本结构,例如有哪些字段,每个字段是什么类型,谁是主键等。

4、修改数据表

修改数据表通过drop子句进行,比如,建完表后,想增加一个字段,SQL语句的格式为:

想在指定位置增加一个字段,例如,在某个字段后增加一个字段,SQL语句的格式为:

如果在某个字段之前增加字段,用before即可。

例如,在字段age后增加一个字段major(专业),SQL语句为:

执行这个命令,再通过describe查看表结构,会发现表中多了一个字段major。

如果要删除major这个字段,通过drop子句,SQL语句为:

5、重命名表

重命名表通过alter+rename来实现,SQL语句格式为:

这里为了不影响之前创建的表,我们创建一个新表,SQL语句如下。

以上创建一个名为stuInfoTest的表,现在想将它的名称改成stuinfotest1,SQL语句为:

6、删除数据表

删除数据表通过drop进行,SQL语句格式为:

例如,删除数据表stuinfotest1,SQL语句为:

7、插入记录

此时的表stuinfo是空的,没有数据,我们要向表中插入记录。

插入记录通过insert into进行,SQL语句格式为:

例如,向表stuinfo插入一条记录,SQL语句为:

注意:上方是一条SQL语句,为了可读性换行,记住一条SQL语句默认以分号结尾。

如果需要一次性插入多条记录,SQL语句格式为:

例如,向表stuinfo再插入两条记录,SQL语句为:

注意:如果设置了主键,插入记录的主键字段是不能重复的,也就是不能插入重复的记录。

作业:大家可以按照上述方法将上面的学员信息表中的所有记录都插入表stuinfo中。

8、查询记录

有了数据之后,就可以查询记录了,查询记录通过select子句进行。

例如,想查询表stuinfo中的所有记录,SQL语句为:

执行之后,就可以看到表stuinfo中的所有记录了。

如果想查询符合某个条件的记录,就要用到where子句了,SQL格式为:

例如,想查询stuid为20161001的记录,SQL语句为:

9、删除记录

删除记录通过delete子句进行,SQL语句格式为:

例如,想删除stuid为20161002的记录,SQL语句为:

10、修改记录

修改记录通过update子句进行,update就是更新的意思,SQL语句格式为:

例如,想将学号(stuid)为20161001的记录的姓名(stuname)更新为Jack,SQL语句为:

以上,就是MySQL中的基本SQL语句。

零基础如何学习数据分析?查看下方专栏。

15个MySQL常用基本SQL语句

在学习SQL语句之前,首先需要区分几个概念,我们常说的数据库是指数据库软件,例如MySQL、Oracle、SQL Server等,而本文提到的数据库是指数据库软件中的一个个用于存储数据的容器。

在MySQL中,数据库称为database,数据表称为table,一个数据库软件中有多个数据库(databases),每个数据库中又可以有多个数据表(tables),最终,数据是存储在数据表中。

数据库和数据表之间的关系可以用下面这个图来表示,对于一个数据库来说,有多个数据表。

在正式开始写SQL语句之前,需要说明两点。

这里通过MySQL Workbench来写SQL代码,在Workbench中,执行一条SQL语句的方式有两种。

了解了这之后,接下来介绍一些常见的命令,分两部分:数据库常用命令和数据表常用命令。

1、查看有哪些数据库

2、创建数据库

创建一个名为Testdb的数据库。

3、创建数据库并指定编码格式

有些时候,为了防止中文乱码,创建数据库的时候需要指定编码格式。

4、使用某个数据库

使用mydb这个数据库,或者进入mydb这个数据库。

5、删除数据库

删除Testdb这个数据库。

1、查看有哪些数据表

进入某个数据库之后,想查看有哪些数据表,SQL语句为:

mydb是一个新建的数据库,所以自然是没有数据表。

2、创建数据表

建表SQL语句格式为:

说明: 每个字段以逗号分隔,最后一个字段不加逗号。

例如,给定一个学员信息表,如下表所示。

根据以上表格,建表SQL语句如下。

以上语句中,primary key表示主键,意思是这个字段作为记录的唯一标识,就像每个人的身份证号,都是唯一确定的。

3、查看表结构

查看表结构的SQL命令为:

执行该命令会显示表stuinfo的基本结构,例如有哪些字段,每个字段是什么类型,谁是主键等。

4、修改数据表

修改数据表通过drop子句进行,比如,建完表后,想增加一个字段,SQL语句的格式为:

想在指定位置增加一个字段,例如,在某个字段后增加一个字段,SQL语句的格式为:

如果在某个字段之前增加字段,用before即可。

例如,在字段age后增加一个字段major(专业),SQL语句为:

执行这个命令,再通过describe查看表结构,会发现表中多了一个字段major。

如果要删除major这个字段,通过drop子句,SQL语句为:

5、重命名表

重命名表通过alter+rename来实现,SQL语句格式为:

这里为了不影响之前创建的表,我们创建一个新表,SQL语句如下。

以上创建一个名为stuInfoTest的表,现在想将它的名称改成stuinfotest1,SQL语句为:

6、删除数据表

删除数据表通过drop进行,SQL语句格式为:

例如,删除数据表stuinfotest1,SQL语句为:

7、插入记录

此时的表stuinfo是空的,没有数据,我们要向表中插入记录。

插入记录通过insert into进行,SQL语句格式为:

例如,向表stuinfo插入一条记录,SQL语句为:

注意:上方是一条SQL语句,为了可读性换行,记住一条SQL语句默认以分号结尾。

如果需要一次性插入多条记录,SQL语句格式为:

例如,向表stuinfo再插入两条记录,SQL语句为:

注意:如果设置了主键,插入记录的主键字段是不能重复的,也就是不能插入重复的记录。

作业:大家可以按照上述方法将上面的学员信息表中的所有记录都插入表stuinfo中。

8、查询记录

有了数据之后,就可以查询记录了,查询记录通过select子句进行。

例如,想查询表stuinfo中的所有记录,SQL语句为:

执行之后,就可以看到表stuinfo中的所有记录了。

如果想查询符合某个条件的记录,就要用到where子句了,SQL格式为:

例如,想查询stuid为20161001的记录,SQL语句为:

9、删除记录

删除记录通过delete子句进行,SQL语句格式为:

例如,想删除stuid为20161002的记录,SQL语句为:

10、修改记录

修改记录通过update子句进行,update就是更新的意思,SQL语句格式为:

例如,想将学号(stuid)为20161001的记录的姓名(stuname)更新为Jack,SQL语句为:

以上,就是MySQL中的基本SQL语句。

零基础如何学习数据分析?查看下方专栏。

mysql查询语句最常用10个

(1)查询表中全部信息:

select * from 表名

(2)查询表中指定列的信息:

select 列1,列2 from 表名

(3)去重:

select distinct 列... from 表名

(4)拼接结果:

select concat(列1,列2) from 表名

(5)设置别名(注意:关键字as可以省略)

select 列 as 别名 from 表名
select 列 别名 from 表名

(6)条件查询:

select 列... from 表名 where 条件

条件中比较运算符:(等于:=  大于:>  大于等于:>=  小于:<  小于等于:<=  不等于:!= 或 <>)

(7)where 列  比较运算符  值

注意:字符串、日期需使用单引号括起来

(8)逻辑运算符(并且:and或&&   或:or   非:not或!)

where 条件1 逻辑运算符 条件2
where not 条件

(9)范围查询:

where 列 between 条件1  and 条件2;          //列在这个区间的值where 列 not between 条件1 and 条件2;    //不在这个区间where !( 列 between 条件1 and 条件2 );     //同样表示不在这个区间

集合查询(判断列的值是否在指定的集合中):

where 列 in(值1,值2);          //列中的数据是in后的值里面的where 列 not in(值1,值2);   //不是in中指定值的数据

null值查询(注意:列中值为null不能使用=去查询):

where 列 is null;  //查询列中值为null的数据

资料来源 网页链接

mysql查询语句最常用10个

(1)查询表中全部信息:

select * from 表名

(2)查询表中指定列的信息:

select 列1,列2 from 表名

(3)去重:

select distinct 列... from 表名

(4)拼接结果:

select concat(列1,列2) from 表名

(5)设置别名(注意:关键字as可以省略)

select 列 as 别名 from 表名
select 列 别名 from 表名

(6)条件查询:

select 列... from 表名 where 条件

条件中比较运算符:(等于:=  大于:>  大于等于:>=  小于:<  小于等于:<=  不等于:!= 或 <>)

(7)where 列  比较运算符  值

注意:字符串、日期需使用单引号括起来

(8)逻辑运算符(并且:and或&&   或:or   非:not或!)

where 条件1 逻辑运算符 条件2
where not 条件

(9)范围查询:

where 列 between 条件1  and 条件2;          //列在这个区间的值where 列 not between 条件1 and 条件2;    //不在这个区间where !( 列 between 条件1 and 条件2 );     //同样表示不在这个区间

集合查询(判断列的值是否在指定的集合中):

where 列 in(值1,值2);          //列中的数据是in后的值里面的where 列 not in(值1,值2);   //不是in中指定值的数据

null值查询(注意:列中值为null不能使用=去查询):

where 列 is null;  //查询列中值为null的数据

资料来源 网页链接

MySQL中insert into语句的6种写法

insert into是mysql中最常用的插入语句,它有6种写法。

如果插入的记录是数字的话要在数字的逗号后面加n:

通过以上实例我们可以看到insert into语句只能向原表中插入于其字段对应的数据,那么能不能通过insert into语句来把其他表的数据插入到原表中呢:

在MySQL中set方法:

ModifyStatement.Set Method 修改语句 set方法

Sets key and value. 设置键和值。

由于insert into语句是一个插入性的语句,所以它的功能要么向指定的表插入数据

也许你看到这个SQL语句是正确的,就觉得这样应该也可以:

mysql> mysql> insert into 4a set sname=4ainall.sname;

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysql> insert into 4a set sname=4ainall.sname' at line 1

或者这样也可以:

mysql> mysql> insert into 4a set sname="赵六";

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysql> insert into 4a set sname="赵六"' at line 1

然后这样也是不可用:

mysql> insert into 4a select * from 4ainall set sname=4ainall.sname;

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from 4ainall set sname=4ainall.sname' at line 1

可以看出由于select是作用于4inall这个表的,而set方法也只能在select语句中,这就直接导致set方法只能作用于4inall这个表,而无法作用于4a这个表。

但是如果我们不用select语句的话编译器又怎么会知道4inall表中的数据在哪里?

显然select是用于查的而set则是一个用于改的方法,两者无法结合在一起——insert into set语句当然也不能用于将其他表的数据插入到原表中了。

MySQL中insert into语句的6种写法

insert into是mysql中最常用的插入语句,它有6种写法。

如果插入的记录是数字的话要在数字的逗号后面加n:

通过以上实例我们可以看到insert into语句只能向原表中插入于其字段对应的数据,那么能不能通过insert into语句来把其他表的数据插入到原表中呢:

在MySQL中set方法:

ModifyStatement.Set Method 修改语句 set方法

Sets key and value. 设置键和值。

由于insert into语句是一个插入性的语句,所以它的功能要么向指定的表插入数据

也许你看到这个SQL语句是正确的,就觉得这样应该也可以:

mysql> mysql> insert into 4a set sname=4ainall.sname;

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysql> insert into 4a set sname=4ainall.sname' at line 1

或者这样也可以:

mysql> mysql> insert into 4a set sname="赵六";

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysql> insert into 4a set sname="赵六"' at line 1

然后这样也是不可用:

mysql> insert into 4a select * from 4ainall set sname=4ainall.sname;

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from 4ainall set sname=4ainall.sname' at line 1

可以看出由于select是作用于4inall这个表的,而set方法也只能在select语句中,这就直接导致set方法只能作用于4inall这个表,而无法作用于4a这个表。

但是如果我们不用select语句的话编译器又怎么会知道4inall表中的数据在哪里?

显然select是用于查的而set则是一个用于改的方法,两者无法结合在一起——insert into set语句当然也不能用于将其他表的数据插入到原表中了。

mysql语句怎么写(有两个表a和b,b包含a所有的字段,想将b的某一条记录...

SELECTINTO语句SELECTINTO语句从一个表中选取数据,然后把数据插入另一个表中。SELECTINTO语句常用于创建表的备份复件或者用于对记录进行存档。

有两种方法,一种方法使用mysql的checktable和repairtable的sql语句,另一种方法是使用MySQL提供的多个myisamchk,isamchk数据检测恢复工具。前者使用起来比较简便。推荐使用。

mysql无论如何也做不到用一条语句给两张表插入数据。理由:一个insert语句仅能在一个表中插入,这是语法的规定。

mysql添加语句

mysql中常用的三种插入数据的语句:

1、insert into表示插入数据,数据库会检查主键(PrimaryKey),如果出现重复会报错;

2、replace into表示插入替换数据,需求表中有PrimaryKey,或者unique索引的话,如果数据库已经存在数据,则用新数据替换,如果没有数据效果则和insert into一样;
3、REPLACE语句会返回一个数,来指示受影响的行的数目。该数是被删除和被插入的行数的和。如果对于一个单行REPLACE该数为1,则一行被插入,同时没有行被删除。如果该数大于1,则在新行被插入前,有一个或多个旧行被删除。如果表包含多个唯一索引,并且新行复制了在不同的唯一索引中的不同旧行的值,则有可能是一个单一行替换了多个旧行。
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

mysql添加语句

mysql中常用的三种插入数据的语句:

1、insert into表示插入数据,数据库会检查主键(PrimaryKey),如果出现重复会报错;

2、replace into表示插入替换数据,需求表中有PrimaryKey,或者unique索引的话,如果数据库已经存在数据,则用新数据替换,如果没有数据效果则和insert into一样;
3、REPLACE语句会返回一个数,来指示受影响的行的数目。该数是被删除和被插入的行数的和。如果对于一个单行REPLACE该数为1,则一行被插入,同时没有行被删除。如果该数大于1,则在新行被插入前,有一个或多个旧行被删除。如果表包含多个唯一索引,并且新行复制了在不同的唯一索引中的不同旧行的值,则有可能是一个单一行替换了多个旧行。
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

mysql中的sql语句

character introcer翻译过来就是字符引导。也就是针对字符串,显式的给定一个字符编码和排序规则,不受系统参数的影响。

总结 Introcer 使用规则:

1. convert 函数

convert 函数类似于 introcer,不过只能指定字符集。

2. charset 函数

检测字符串的字符集。可以检测出当前字符串在当前 session 的字符集。

3. set names 语句

语法为:

SET NAMES {'charset_name'[COLLATE 'collation_name'] | DEFAULT}

这条语句最常用,可是也最容易被滥用,比如语句:

set names latin1 collate latin1_bin;

执行后会默认执行一系列语句,也就是把非服务端的相关参数给重新设定了。

4. set character set 语句语法为:

SET {CHARACTER SET | CHARSET}{'charset_name' | DEFAULT}

类似语句 set names,同样是设置以下三个 session 参数:

character_set_results

character_set_client

character_set_connection

同样是可以恢复默认值,还有同样的规则等。不过有两点不同:1)参数 character_set_connection 的值不会被设定为指定的字符集,而是继承参数 character_set_database 所设定的字符集。

5. collate 子句

collate 语句强制指定排序规则,优先级最高。也就是显式指定 collate 会覆盖已有的排序规则。

这里涉及到单个字符串以及字符串拼接的排序规则问题。

mysql sql 语句

一、 简单查询
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。
例如,下面的语句查询testtable表中姓名为"张三"的nickname字段和email字段。

SELECT nickname,email
FROM testtable
WHERE name='张三'

(一) 选择列表

选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。

1、选择所有列

例如,下面语句显示testtable表中所有列的数据:

SELECT *
FROM testtable

2、选择部分列并指定它们的显示次序

查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。
例如:

SELECT nickname,email
FROM testtable

3、更改列标题

在选择列表中,可重新指定列标题。定义格式为:
列标题=列名
列名 列标题
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题:

SELECT 昵称=nickname,电子邮件=email
FROM testtable

4、删除重复行

SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。

5、*返回的行数

使用TOP n [PERCENT]选项*返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。
例如:

SELECT TOP 2 *
FROM testtable
SELECT TOP 20 PERCENT *
FROM testtable

(二)FROM子句

FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,它们之间用逗号分隔。
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定:

SELECT username,citytable.cityid
FROM usertable,citytable
WHERE usertable.cityid=citytable.cityid

在FROM子句中可用以下两种格式为表或视图指定别名:
表名 as 别名
表名 别名

(二) FROM子句

FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,它们之间用逗号分隔。
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定:

SELECT username,citytable.cityid
FROM usertable,citytable
WHERE usertable.cityid=citytable.cityid

在FROM子句中可用以下两种格式为表或视图指定别名:
表名 as 别名
表名 别名
例如上面语句可用表的别名格式表示为:

SELECT username,b.cityid
FROM usertable a,citytable b
WHERE a.cityid=b.cityid

SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。

例如:

SELECT a.au_fname+a.au_lname
FROM authors a,titleauthor ta
(SELECT title_id,title
FROM titles
WHERE ytd_sales>10000
) AS t
WHERE a.au_id=ta.au_id
AND ta.title_id=t.title_id

此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。
(三) 使用WHERE子句设置查询条件

WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据:

SELECT *
FROM usertable
WHERE age>20

WHERE子句可包括各种条件运算符:
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!<
范围运算符(表达式值是否在指定的范围):BETWEEN...AND...
NOT BETWEEN...AND...
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2......)
NOT IN (项1,项2......)
模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR

1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30
2、列表运算符例:country IN ('Germany','China')
3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、varchar、text、ntext、datetime和smalldatetime等类型查询。
可使用以下通配字符:
百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。
下划线_:匹配单个任意字符,它常用来*表达式的字符长度。
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
例如:
*以Publishing结尾,使用LIKE '%Publishing'
*以A开头:LIKE '[A]%'
*以A开头外:LIKE '[^A]%'

4、空值判断符例WHERE age IS NULL

5、逻辑运算符:优先级为NOT、AND、OR

(四)查询结果排序

使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为:
ORDER BY {column_name [ASC|DESC]} [,...n]
其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排
序。
例如:

SELECT *
FROM usertable
ORDER BY age desc,userid ASC

另外,可以根据表达式进行排序。

二、 联合查询

UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联合查询。UNION的语法格式为:

select_statement
UNION [ALL] selectstatement
[UNION [ALL] selectstatement][...n]

其中selectstatement为待联合的SELECT查询语句。

ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一行。

联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。

在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类型,系统将低精度的数据类型转换为高精度的数据类型。

在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:

查询1 UNION (查询2 UNION 查询3)

三、连接查询

通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。

在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行查询。

连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。

SQL-92标准所定义的FROM子句的连接语法格式为:

FROM join_table join_type join_table
[ON (join_condition)]

其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。

join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。

交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。

无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接连接。例如:

SELECT p1.pub_id,p2.pub_id,p1.pr_info
FROM pub_info AS p1 INNER JOIN pub_info AS p2
ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)

(一)内连接
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:
1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。
2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。
3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:

SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):
SELECT a.*,p.pub_id,p.pub_name,p.country
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city

(二)外连接
内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。如下面使用左外连接将论坛内容和作者信息连接起来:

SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b
ON a.username=b.username

下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市:

SELECT a.*,b.*
FROM city as a FULL OUTER JOIN user as b
ON a.username=b.username

(三)交叉连接
交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于6*8=48行。
SELECT type,pub_name
FROM titles CROSS JOIN publishers
ORDER BY type

mysql sql 语句

一、 简单查询
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。
例如,下面的语句查询testtable表中姓名为"张三"的nickname字段和email字段。

SELECT nickname,email
FROM testtable
WHERE name='张三'

(一) 选择列表

选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。

1、选择所有列

例如,下面语句显示testtable表中所有列的数据:

SELECT *
FROM testtable

2、选择部分列并指定它们的显示次序

查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。
例如:

SELECT nickname,email
FROM testtable

3、更改列标题

在选择列表中,可重新指定列标题。定义格式为:
列标题=列名
列名 列标题
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题:

SELECT 昵称=nickname,电子邮件=email
FROM testtable

4、删除重复行

SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。

5、*返回的行数

使用TOP n [PERCENT]选项*返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。
例如:

SELECT TOP 2 *
FROM testtable
SELECT TOP 20 PERCENT *
FROM testtable

(二)FROM子句

FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,它们之间用逗号分隔。
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定:

SELECT username,citytable.cityid
FROM usertable,citytable
WHERE usertable.cityid=citytable.cityid

在FROM子句中可用以下两种格式为表或视图指定别名:
表名 as 别名
表名 别名

(二) FROM子句

FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,它们之间用逗号分隔。
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定:

SELECT username,citytable.cityid
FROM usertable,citytable
WHERE usertable.cityid=citytable.cityid

在FROM子句中可用以下两种格式为表或视图指定别名:
表名 as 别名
表名 别名
例如上面语句可用表的别名格式表示为:

SELECT username,b.cityid
FROM usertable a,citytable b
WHERE a.cityid=b.cityid

SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。

例如:

SELECT a.au_fname+a.au_lname
FROM authors a,titleauthor ta
(SELECT title_id,title
FROM titles
WHERE ytd_sales>10000
) AS t
WHERE a.au_id=ta.au_id
AND ta.title_id=t.title_id

此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。
(三) 使用WHERE子句设置查询条件

WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据:

SELECT *
FROM usertable
WHERE age>20

WHERE子句可包括各种条件运算符:
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!<
范围运算符(表达式值是否在指定的范围):BETWEEN...AND...
NOT BETWEEN...AND...
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2......)
NOT IN (项1,项2......)
模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR

1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30
2、列表运算符例:country IN ('Germany','China')
3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、varchar、text、ntext、datetime和smalldatetime等类型查询。
可使用以下通配字符:
百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。
下划线_:匹配单个任意字符,它常用来*表达式的字符长度。
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
例如:
*以Publishing结尾,使用LIKE '%Publishing'
*以A开头:LIKE '[A]%'
*以A开头外:LIKE '[^A]%'

4、空值判断符例WHERE age IS NULL

5、逻辑运算符:优先级为NOT、AND、OR

(四)查询结果排序

使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为:
ORDER BY {column_name [ASC|DESC]} [,...n]
其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排
序。
例如:

SELECT *
FROM usertable
ORDER BY age desc,userid ASC

另外,可以根据表达式进行排序。

二、 联合查询

UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联合查询。UNION的语法格式为:

select_statement
UNION [ALL] selectstatement
[UNION [ALL] selectstatement][...n]

其中selectstatement为待联合的SELECT查询语句。

ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一行。

联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。

在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类型,系统将低精度的数据类型转换为高精度的数据类型。

在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:

查询1 UNION (查询2 UNION 查询3)

三、连接查询

通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。

在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行查询。

连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。

SQL-92标准所定义的FROM子句的连接语法格式为:

FROM join_table join_type join_table
[ON (join_condition)]

其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。

join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。

交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。

无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接连接。例如:

SELECT p1.pub_id,p2.pub_id,p1.pr_info
FROM pub_info AS p1 INNER JOIN pub_info AS p2
ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)

(一)内连接
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:
1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。
2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。
3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:

SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):
SELECT a.*,p.pub_id,p.pub_name,p.country
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city

(二)外连接
内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。如下面使用左外连接将论坛内容和作者信息连接起来:

SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b
ON a.username=b.username

下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市:

SELECT a.*,b.*
FROM city as a FULL OUTER JOIN user as b
ON a.username=b.username

(三)交叉连接
交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于6*8=48行。
SELECT type,pub_name
FROM titles CROSS JOIN publishers
ORDER BY type

MySql常用操作SQL语句汇总

mysql基本语句是:

1、选择:“select * from table where”范围。

2、插入:“insert into table(field1,field2) values(value1,value2)”。

3、删除:“delete from table where ”范围。

4、更新:“update table set field1=value1 where ”范围。

5、查找:“select * from table where field1 like ’%value1%’”。

6、排序:“select * from table order by field1,field2 [desc]”。

7、总数:“select count as totalcount from table”。

8、求和:“select sum(field1) as sumvalue from table”。

9、平均:“select avg(field1) as avgvalue from table”。

10、最大:“select max(field1) as maxvalue from table”。

11、最小:“select min(field1) as minvalue from table”等。

MySql常用操作SQL语句汇总

mysql基本语句是:

1、选择:“select * from table where”范围。

2、插入:“insert into table(field1,field2) values(value1,value2)”。

3、删除:“delete from table where ”范围。

4、更新:“update table set field1=value1 where ”范围。

5、查找:“select * from table where field1 like ’%value1%’”。

6、排序:“select * from table order by field1,field2 [desc]”。

7、总数:“select count as totalcount from table”。

8、求和:“select sum(field1) as sumvalue from table”。

9、平均:“select avg(field1) as avgvalue from table”。

10、最大:“select max(field1) as maxvalue from table”。

11、最小:“select min(field1) as minvalue from table”等。

常用SQL语句,看这篇就够了

本文主要以 Mysql 数据库为基础,对常用 SQL 语句进行一次深度总结,由于篇幅较长,难免会有些遗漏的地方,欢迎网友批评指出!

具体内容主要有以下几个部分:

创建数据库比较简单,在创建的时候直接指定字符集、排序规则即可!

例子:

数据库修改库名的有三种方法,如果是 MyISAM 存储引擎,那么可以直接去数据库目录 mv 就可以了,如果是 Innodb 完全不行,会提示相关表不存在。

这个语法在 mysql-5.1.7 中被添加进来,到了 mysql-5.1.23 又去掉了,官方不推荐,会有丢失数据的危险!

思路是先创建一个新库,之后将旧库的数据导入到新库,即可完成修改库名!

当然这种方法虽然安全,但是如果数据量大,会比较耗时,同时还需要考虑到磁盘空间等硬件成本。

例子:

直接跑一个 shell 脚本!

其中 p123456 , p 是 password 的简称, 123456 表示数据库密码值!

删除库,比较简单,直接删除即可!

或者

MySQL 主要有以下几种运算符:

运算符描述实例 +加法select 1+2; 结果为3 -减法select 1-2; 结果为-1 *乘法select 2*3; 结果为6 /除法select 6/3; 结果为2 %取余select 10%3; 结果为1

说明: 在除法运算和模运算中,如果除数为0,将是非法除数,返回结果为NULL 。

SELECT 语句中的条件语句经常要使用比较运算符。通过这些比较运算符,可以判断表中的哪些记录是符合条件的。比较结果为真,则返回 1,为假则返回 0,比较结果不确定则返回 NULL。

运算符描述实例 =等于select * from t_user where user_id = 1 查询用户ID为1的信息 !=不等于select * from t_user where user_id != 1 查询用户ID不为1的信息 >大于select * from t_user where user_id > 1 查询用户ID大于1的信息 >=大于select * from t_user where user_id >= 1 查询用户ID大于等于1的信息 大于select * from t_user where user_id < 1 查询用户ID小于1的信息 <=大于select * from t_user where user_id <= 1 查询用户ID小于等于1的信息 BETWEEN AND在两值之间select * from t_user where user_id between 1 and 100 查询用户ID在1和100之间的信息,类似user_id >=1 and user_id <=100 NOT BETWEEN AND不在两值之间select * from t_user where user_id not between 1 and 100 查询用户ID不在1和100之间的信息,类似user_id 100 IN在集合中select * from t_user where user_id in ('1','2') 查询用户ID为 1 或者 2 的信息 NOT IN不在集合中select * from t_user where user_id not in ('1','2') 查询用户ID不为 1 和 2 的信息 LIKE模糊匹配,%表示0个或者多个匹配select * from t_user where user_name like '%张%' 查询用户姓名包含张的信息 IS NULL为空select * from t_user where user_name is null 查询用户姓名为空的信息 IS NOT NULL不为空select * from t_user where user_name not is null 查询用户姓名不为空的信息

说明: mysql中,IN 语句中参数个数是不的。不过对整段 sql 语句的长度有了,最大不超过 4M !

逻辑运算符用来判断表达式的真假。如果表达式是真,结果返回 1。如果表达式是假,结果返回 0。

运算符描述实例 NOT 或 !逻辑非select not 1; 结果为0 AND逻辑与select 2 and 0; 结果为0 OR逻辑或select 2 or 0; 结果为1 XOR逻辑异或select null or 1; 结果为1

位运算符是在二进制数上进行计算的运算符。位运算会先将操作数变成二进制数,进行位运算。然后再将计算结果从二进制数变回十进制数。

运算符描述实例 &按位与select 3&5; 结果为1 I按位或select 3I5; 结果为7 ^按位异或select 3I5; 结果为7 ^按位异或select 3^5; 结果为6 ~按位取反select ~18446744073709551612; 结果为3 >>按位右移select 3>>1; 结果为1 <按位左移select 3<<1; 结果为6

优先级(从高到底)运算符 1! 2-(负号),~(按位取反) 3^(按位异或) 4*,/(DIV),%(MOD) 5+,- 6>>,<< 7& 8I 9=(比较运算),,<,,>=,!=,>,IN,IS NULL,LIKE,REGEXP 10BETWEEN AND,CASE,WHEN,THEN,ELSE 11NOT 12&&,AND 13XOR 14II,OR 15=(赋值运算),:=

说明: 在无法确定优先级的情况下,可以使用圆括号 () 来改变优先级,并且这样会使计算过程更加清晰 。

视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。

参数说明:

基本格式:

创建视图示例:

删除视图是指删除数据库中已存在的视图,删除视图时,只能删除视图的定义,不会删除数据,也就是说不动基表:

删除示例:

函数描述实例 char_length(s)返回字符串 s 的字符长度select char_length("hello") as content; concat(s1,s2...sn)字符串 s1,s2 等多个字符串合并为一个字符串select concat("hello ", "world") as content; format(x,n)将数字 x 进行格式化,到小数点后 n 位,最后一位四舍五入select format(500.5634, 2) as content; lower(s)将所有字母变成小写字母select lower('HELLO'); current_timestamp()返回当前日期和时间select current_timestamp(); DATE_FORMAT(date,format)格式化时间或者日期select DATE_FORMAT(current_timestamp(),"%Y-%m-%d %H:%i:%s"); IFNULL(v1,v2)如果 v1 的值不为 NULL,则返回 v1,否则返回 v2select IFNULL(null,'hello word');

参数说明:

参数说明:

参数说明:

参数说明:

示例:

参数说明:

参数说明:

创建一个查询用户信息的存储过程示例:

输出结果:

删除示例:

触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。

定义语法

参数说明:

示例,创建了一个名为trig1的触发器,一旦在 t_user 表中有插入动作,就会自动往 t_time 表里插入当前时间。

创建有多个执行语句的触发器语法

示例如下:

一旦插入成功,就会执行 BEGIN ...END 语句!

所有触发器信息都存储在information_schema数据库下的triggers表中,可以使用SELECT语句查询,如果触发器信息过多,最好通过TRIGGER_NAME字段指定查询。

示例如下:

删除触发器之后最好使用上面的方法查看一遍。

触发器尽量少的使用,因为不管如何,它还是很消耗资源,如果使用的话要谨慎的使用,确定它是非常高效的:触发器是针对每一行的;对增删改非常频繁的表上切记不要使用触发器,因为它会非常消耗资源。

在 MySQL 中,可以有如下几种途径实现唯一值:

在mysql中,一般我们可以给某个主键字段设置为自增模式,例如:

这种模式,在单库单表的时候,没啥问题,但是如果要对 test_db 表进行分库分表,这个时候问题就来了,如果水平分库,这个时候向 test_db_1 、 test_db_2 中插入数据,就会出现相同的 ID !

当然,为了避免出现这种情况,有的大神就自己单独创建了一张自增序列表,单独维护,这样就不会出现在分表的时候出现相同的ID!

实现过程也很简单!

这方案,某种情况下解决了分表的问题,但是如果分库还是会出现相同的ID!

UUID 基于 16 进制,由 32 位小写的 16 进制数字组成,如下:

比如 d0c754a8-178e-11eb-ae3d-2a7bea22ed3d 就是一个典型的 UUID。

在 MySQL 的 UUID() 函数中,前三组数字从时间戳中生成,第四组数字暂时保持时间戳的唯一性,第五组数字是一个 IEEE 802 节点标点值,保证空间唯一。

使用 UUID() 函数,可以生成时间、空间上都独一无二的值。据说只要是使用了 UUID,都不可能看到两个重复的 UUID 值。当然,这个只是在理论情况下。

使用方法也很简单,在 sql 可以直接当成函数调用即可!

在 MySQL 5.1 之后的版本,提供 UUID_SHORT() 函数,生成一个 64 位无符号整数,在java中可以用 Long 类型接受。另外,需要注意的是,server_id 的范围必须为 0-255 ,并且不支持 STATEMENT 模式复制,否则有可能会产生重复的ID

同时,需要注意的是, UUID_SHORT() 返回的是 unsigned long long 类型,在字段类型设置的时候,一定要勾选 无符号 类型,否则有可能生成的ID超过 Long 类型最大长度!

说明:

在给其他授权前,请先用管理员账户登录!

注意:用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令!

在结尾加上 WITH GRANT OPTION 就可以了!

可以使用如下命令,来一键设置 root 用户的密码,同时拥有所有的权限并设置为远程访问!

如果想关闭 root 用户远程访问权限,使用如下命令即可!

最后使用如下命令,使其生效!

创建用户并进行授权,也可以使用如下快捷命令!

最后需要注意的是:mysql8,使用强校验,所以,如果密码过于简单,会报错,密码尽量搞复杂些!

本文主要围绕 Mysql 中常用的语法进行一次梳理和介绍,这些语法大部分也同样适用于其他的数据库,例如 oracle、sqlserver、postgres 等等,在数据操作栏,除了分页函数以外,基本都是通用的!

Top