MYSQL语句

1. DQL(数据查询语言DQL)
数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE
子句组成的查询块:
SELECT <字段名表>
FROM <表或视图名>
WHERE <查询条件>
Mysql的DQL语句与ORACLE大部分通用,同样支持基本查询、条件查询、模糊查询、子查询、排序、分组、连表等,使用方法可以和ORACLE相似,部分不同之处已经罗列于下:

mysql中的值也不区分大小写
mysql中可以使用#作为注释。
mysql中可以使用双引号定义字符串。
mysql中的可以直接和其他字段一起展示。
mysql的模糊查询可以直接使用\作为转义字符而不需要使用escape来声明定义,当然也支持escape自定义写法。
mysql的模糊查询可以将\直接作用在单引号上,也支持使用两个单引号作为一个单引号使用。
mysql的聚合函数不会忽略null值,需要自行处理。
mysql的group by前可以使用
来全查,不报错,但是结果错误。
mysql的group by前可以出现group by之后未声明的字段,不报错,但是结果错误。
mysql没有提供差集和交集,但是支持并集。
mysql不支持full join联表。
mysql中的聚合函数不会忽略null值。

1.1 MYSQL分页

当数据库的数据量很大时,一次性查询结果就会变得很慢,为了提高查询效率,我们可以使用MySQL的分页查询功能,在MySQL中,分页查询一般都是使用limit子句实现。

– 从第5条开始(不包括5),显示3条 select * from 表名 limit 5 , 3;
– 直接显示7条 select * from 表名 limit 7 ;

优化:从第10万条数据开始,取出100条数据
– 效率低

select * from 表名 limit 100000,100;

分页公式
pageSize(第几页) pageNum(每页显示多少条)

select * from 表名 limit (pageSize-1)乘pageNum,pageSizec乘hengpageNum

– 效率高,限定了ID的范围,则limit无序从头开始运作,直接从10万开始即可。
– 但前提是,id必须是连续递增的

select * from b表名 and id between 1000000 and 1000100 limit 100;

1.2 MYSQL正则

MySQL同样也支持其他正则表达式的匹配, MySQL中使用 regexp 操作符来进行正则表达式匹配。
在这里插入图片描述
了解以上的正则需求后,我们就可以更加自己的需求来编写带有正则表达式的SQL语句。以下我们将列出几个小实例(表名:db_login)来加深我们的理解:

-- 查找loginid字段中以'zh'为开头的所有数据:
 SELECT name FROM db_login WHERE name REGEXP '^zh';
-- 查找loginid字段中以'ng'为结尾的所有数据:
 SELECT name FROM db_login WHERE name REGEXP 'ng$';
--查找loginid字段中包含'jiao'字符串的所有数据:
 SELECT name FROM db_login WHERE name REGEXP 'jiao';
--查赵loginid字段中以元音字符开头或以'min'字符串结尾的所有数据:
SELECT name FROM db_login WHERE name REGEXP '^[aeiou]|min$';

2. DDL(数据定义语言DDL)
数据定义语言DDL用来创建数据库中的各种对象-----表、视图、
索引、同义词、聚簇等如:
CREATE TABLE/VIEW/INDEX/SYN/CLUSTER
表 视图 索引 同义词 簇
DDL操作是隐性提交的!不能rollback

2.1 创建用户

通过SQL的 GRANT 命令,你下命令会给指定数据库mysql_db01添加用户joe ,密码为joe 。
在这里插入图片描述
tips:建议创建了用户之后,使用命令flush privileges来刷新权限操作。

2.2 修改密码

可以使用 [mysqladmin -u root -p旧密码 password 新密码] 来修改当前用户密码。
在这里插入图片描述
mysqladmin -uroot -proot password 123

2.3 数据类型

MySQL中定义数据字段的类型对数据库的优化是非常重要的。MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。

2.3.1 数字类型

MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据类型(integer、smallint、decimal和numeric),以及近似数值数据类型(float、real和double precision)。
作为SQL标准的扩展,MySQL也支持整数类型tinyint、mediumint和bigint。
下面的表显示了需要的每个整数类型的存储和范围。
在这里插入图片描述

tips:关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。

2.3.2 日期和时间

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
在这里插入图片描述
tips:TIMESTAMP类型有专有的自动更新特性,将在后面描述。

2.3.3 字符串类型

字符串类型指char、varchar、binary、varbinary、blob、text、enum和set。该节描述了这些类型如何工作以及如何在查询中使用这些类型。
在这里插入图片描述

tips:CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
tips:BINARY和VARBINARY类类似于CHAR和VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
tips:BLOB是一个二进制大对象,可以容纳可变数量的数据。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同。
tips:有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些对应4种BLOB类型,有相同的最大长度和存储需求。

2.4 创建表
2.4.1 创建表

create table user(
	user_id int unsigned not null auto_increment,
	user_name varchar(100) not null,
	user_pass varchar(40) not null,
	user_date date,
	primary key ( user_id )-- PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔
)  engine=InnoDB default charset=gbk;

2.4.2 查看表

-- 查看当前数据库中的所有表
show tables;
-- 显示数据表的属性,属性类型,主键信息 ,是否为 NULL,默认值等其他信息。
show columns from 表名;
-- 显示数据表的详细索引信息,包括主键。
show index from 表名;
-- 该命令将输出MySQL数据库管理系统的性能及统计信息
show table status like ‘%user%’;

2.4.3 删除表

drop table 表名;

2.4.4 临时表

MySQL临时表在我们需要保存一些临时数据时是非常有用的,支持正常的CRUD,临时表只在当前连接可见,当关闭连接时,MySQL会自动删除表并释放所有空间,当然你也可以自己手动销毁它。
当你使用 SHOW TABLES命令显示数据表列表时,你无法看到临时表。

create temporary table LinShi(
	col01 varchar(50) not null,
	col02 decimal(12,2) not null default 0.00,
	col03 int unsigned not null default 0
);

2.4.5 复制表

如果我们需要完全的复制MySQL的数据表,包括表的结构,索引,默认值等。可以使用 show create table 命令获取建表语句,该语句包含了原数据表的结构,索引等,然后复制建表SQL,修改表名,并执行SQL语句,即可复制数据表结构。

show create table test;
create table `test2` (
`col01` varchar(255) not null default '',
`col02` varchar(255) default null,
`col03` varchar(255) default null,
primary key (`col01`)
) engine=InnoDB default charset=gbk

如果你想复制表的内容,你可以利用查询语句快速创建这个表

create table test1(
	select * from test-- 这里不能用分号结束
)

3. DML(数据操纵语言)
数据操纵语言DML主要有三种形式:

  1. 插入:INSERT
  2. 更新:UPDATE
  3. 删除:DELETE

在了解DML的之前,先来了解一下事物的机制

3.1. 事物机制

事物是一组不可分割的业务关系,在SQL中指的是一组不可拆分的DML语句,这组语句要么都成功,要么都失败

事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些SQL就构成一个事务。

  1. 删除人
  2. 删除这个人的信箱
  3. 删除这个人的文章

事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行,事务一般用来管理insert,update,delete语句。
事物的关键字是提交和回滚,commit和rollback
一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)

ACID解释
原子性一组事务,要么成功,要么回滚
稳定性(一致性)有非法数据(外键约束之类),事务回滚
隔离性事务独立运行,如果一个事务处理后的结果,如果影响了其他事物,则会回滚。
可靠性(持久性)软、硬件崩溃后,数据库会利用日志文件重构修改,可靠性和高速度不可兼得。

2. DML操作语句
DML是数据操作语言,主要负责数据的增加,删除和修改。

增加insert into

-- 格式:insert into 表名 (字段1,字段2...) values (字段1值,字段2值...);
-- 增加数据的时候,要求增加数据的个数和类型都要相同
insert into db_student (stuname,stusex) values ( 'joe', 'male'); 
commit;
-- 如果是对全字段进行添加可以省略一个()及内容
insert into db_student values ( '010','joe', 'male'); 
commit;

删除delete from

-- 格式:delete from 表名 where 条件
delete from db_student;-- 删除全部数据,但是不删除表结构
commit;
delete from db_student where stuname = 'joe'; -- 删除:delete from 表名  where 条件; 
commit;

修改update set

-- 格式:update 表名 set 字段名=值,字段名=值... where 条件
update db_student set stuname = '张三' where stuname = 'joe'; 
commit;

4.DCL(数据控制语言)
数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制
数据库操纵事务发生的时间及效果,对数据库实行监视等。

可以参考 https://blog.csdn.net/u011526599/article/details/51175883

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值