- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章三十分钟MySQL快速入门(图解)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1、MySQL安装 。
MySQL的下载 。
http://dev.mysql.com/downloads/mysql/ 。
MySQL版本选择 。
MySQL功能自定义选择安装 。
功能自定义选择 。
路径自定义选择 。
设置root用户密码 。
安装完成,点击MySQL Workbench 6.3 CE进入MySQL客户端 。
2、SQL基础 。
SQL语句分类 。
1.DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象。常用的语句关键字主要包括create/drop/alter 。
2.DML(Data Manipulation Language)语句:数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性。常用的语句关键字主要包括 insert/delete/update/select等 。
3.DCL(Data Control Language)语句:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的语句关键字包括grant/revoke等 。
DDL语句(涉及表的定义、结构的修改) 。
1、create语句 。
Query Ok代表语句执行成功 。
1 row affected代表数据库一行收到影响 。
0.01 sec代表操作执行的时间 。
1
2
3
4
5
6
|
create
table
student(
SID
int
not
null
auto_increment,
sNo
int
,
sName
varchar
(50)
not
null
,
primary
key
(SID)
);
|
1.查看系统中都存在哪些数据库(show databases;) 。
2.在查看系统中已有的数据库后,可以用(use dbname)选择对应的数据库 。
3.在选择对应的数据库后,查询该数据库下面的所有的表(show tables) 。
2、删除数据库 。
删除数据库的语法:drop databse dbname,
3、创建表 。
。
语法:create table tablename(column_name_1 column_type_1 constraints,column_name_2 column_type2 constrationts) 。
mysql的表名是以目录形式存储在磁盘上,表名的字符可以是任何目录名允许的字符.
column_name是列名 。
column_type是列的数据类型 。
constrationts是列的约束条件 。
1.查看表定义:desc tablename 。
2.查看创建表的SQL语句:show create table tablename 。
4、删除表 。
删除表的语法:drop table tablename,
5、修改表 。
aleter 语法 | 说明 。
1
2
3
4
5
6
|
---|---
alter
table
tablename
modify
columnname newColumnType | 修改表字段的类型(==
modify
不能更改字段名称==)
alter
table
tablename
add
newColumnname newColumnType| 增加表字段
alter
table
tablename
drop
oldCloumnname|删除表字段
alter
table
tablename change oldColumname newColumnname newColumntype|修改字段的名称及类型
alter
table
tablename rename (
to
) newtablename|修改表名称
|
修改字段的排列顺序 。
在alter的语法后面都有[first\after columnname]可选项 。
1
2
|
alter
table
user
add
address
varchar
(20)
first
;
alter
table
user
add
age
int
after
name
;
|
DML(对数据库表记录进行操作,增(insert)删(delete)改(update)查(select)) 。
1.insert语句 。
语法:
插入一条:insert into tablename(columnname1,columnname2...)values(val1,val2...),
插入多条:insert into tablename(columnname1,columnname2...)values(val1,val2...),(val1,val2...),
2.update语句 。
语法:update tablename set columnname=value [where condition] 。
如果使用MySQL Workbench,update语句不加where条件的会执行错误,需要如下图设置取消设置:
-3.delete语句 。
语法:delete from tablename where condition 。
-4.select语句 。
语法:select * from tablename [where condition] 。
5.表连接 。
1.内连接(仅选出两张表中互相匹配的数据) 。
1
2
|
select
cno,cname,sname
from
student
inner
join
course
on
cno=sno;
select
cno,cname,sname
from
student,course
where
cno=sno;
|
2.外连接 。
外连接又区分:
1.左连接(left join):包含左边表的所有记录,右边没有的为Null 。
2.右连接(right join):包含右边表的所有记录,左边没有的为null 。
6.子查询 。
-7.记录联合 。
语法:
1
2
|
select
*
from
t1
union
all
select
*
from
t2;
select
*
from
t1
union
select
*
from
t2;
|
union all与union的区别:
union all是把结果集直接合并在一起,而union是将union all后的结果进行一次distinct,去除重复后的结果 。
DCL语句(DCL语句主要是dba用来管理系统中的对象权限) 。
grant与revoke 。
3、MySQL支持的数据类型 。
数值类型 。
MySQL支持类型后面的小括号指定显示宽度,例如:int(5)表示当数值宽度小于5的时候在数字前面填满宽度,如果不显示指定宽度则默认为int(11)。如果插入的数据大于这个数值宽度,对实际的插入值是没有影响的,是按照int类型的实际大小进行的.
1
2
3
4
5
6
|
create
table
valuetype(
age
int
,
age1
int
)
insert
into
valuetype(age,age1)
values
(1,2);//这时候数据库就显示1
alter
table
valuetype
modify
age
int
zerofill;//这时候数据库就显示
'0000000001'
|
数据插入bit类型字段时,首先转换为二进制,如果位数允许,将插入成功,如果位数小于实际的位置,则插入失败.
日期时间类型 。
mysql里面获取当前时间为now().mssql获取当前时间为getdate() 。
timestamp,支持的范围非常小,从1970-2038年,timestamp受时区的影响 。
1
2
|
create
table
timestamptest(
tp
timestamp
)
|
系统会自动给tp赋予默认值current_timestamp(系统日期),但是mysql只给第一个timestamp设置默认值,如果有第二个timestamp类型,则默认值设置为0 。
字符串类型 。
1.char与varchar类型的区别:
char列最后的空格已经删除,而varchar保留空格 。
4、MySQL中运算符 。
算术运算符 。
比较运算符,满足返回1,否则返回0 。
逻辑运算符(布尔运算符) 。
位运算符 。
运算符优先级,大多情况下使用()进行操作 。
5、常用函数 。
字符串函数 。
数值函数 。
日期和时间函数 。
流程函数 。
其他函数 。
6、选择合适的数据类型 。
char与varchar 。
在Innodb存储引擎中,建议使用varchar类型。对于Innodb数据表,内部的行存储格式没有区分固定长度和可变长度列,因此固定长度列的性能不一定比不可变长度的性能好.
Text与blob 。
一般在保存少量字符串的时候,我们会选择char或者varchar,而在保存较大文本的时候,通常会选择使用text或者blob。两者的区别:text只能保存字符数据,比如日志。blob能保存二进制数据,比如照片.
浮点数与定点数 。
在MySQL中,decimal或者(numberic)用来表示定点数 。
日期类型的选择 。
date/time/datetime/timestamp 。
7、索引的设计和使用 。
索引概述 。
索引是数据库中用来提高性能的最常用工具。在MySQL中,MyISAM与Innodb存储引擎的表默认创建的都是Btree索引.
1.索引的创建 。
1
2
3
4
5
6
7
8
|
create
table
indexTest(
id
int
not
null
auto_increment,
memberid
int
not
null
,
createtime datetime
not
null
default
current_timestamp
,
primary
key
(id)
)
alter
table
indextest
add
orderserial
varchar
(50)
not
null
;
create
unique
index
IX_orderserial
on
indexTest(orderserial);
|
insert into indextest (memberid,createtime,orderserial)values(112123,'2016-08-14','sz121213') 说明:上面创建一个表,其中定义orderserial为唯一索引.
语法:create [unique\fulltext\spatial] index index_name on tablename(columname) 。
2.设计索引的原则 。
1.最合适的索引列是出现在where子句中列,或连接子句中指定的列,而不是出现在select关键字后面的选择列表的列 。
2.使用唯一索引,需要考虑列中某个值得分布,如果索引列种的基数越大,则索引的效果越好。举个例子:订单号就可以设置唯一索引,因为订单号的不一样。而对于rowstatus就无须了,因为rowstatus要么是有效要么是无效。这样的筛选出的范围还是很多,没有意义 。
3.不要过度索引。因为所有也要占用额外的磁盘空间,如果一个索引很少使用,那么会不必要的减缓表的修改速度 显示MySQL的执行计划:explain 后面加mysql语句 。
8、视图 。
视图(View) 。
定义:视图是一种虚拟存在的表,对于使用视图的用户来说基本上是透明的,视图并不是在数据库中实际存在.
优势:
1.简单,用户完全不需要关心后面对应的表的结构/关联条件和筛选条件。对用户来说已经是过滤好的符合条件的结果集 。
2.安全,使用视图的用户只能访问他们被允许查询的结果集 。
3.数据独立,一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响.
语法:
1
2
|
create
or
replace
view
index_view
as
select
*
from
indextest
|
1.创建create [or replace] view viewName as select ... 。
2.查询 select * from 视图名称 。
3.展示视图 show tables,
4.删除视图 drop view viewname 。
9、存储过程和函数 。
1、存储过程(store procedure)和函数 。
存储过程和函数是事先经过编译并存在数据库中的一段SQL语句的集合,调用存储过程和函数可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的 。
语法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
create
database
finance;//创建finance数据库
use finance;
create
table
orders(
orderId
bigint
not
null
auto_increment,
memberId
int
not
null
default
0,
serialNumber
varchar
(50)
not
null
default
''
,
amount
decimal
(18,2)
not
null
default
0,
createTime datetime
not
null
default
current_timestamp
,
primary
key
(orderid)
)//创建orders订单表
insert
into
orders (memberId,serialNumber,amount)
values
(6561121,
'sz12234222'
,5),(233444,
'ys1652233'
,10)//插入测试数据
delimiter &
create
procedure
orders_serial(
in
serial
varchar
(50))
reads sql data
begin
select
*
from
orders
where
serialNumber=serial;
end
&
|
注释:delimiter $$命令就是将语句的结束符从分号;修改成其他符号,这里指的是$$为结尾。这样在number后面的分号就不会认为结束.
1.调用存储过程 。
1
|
call orders_serial(
'sz12234222'
)
|
2.存储过程的好处 。
逻辑封装在数据库端,调用者不需要了解中间的处理逻辑,一旦调用逻辑发生变化,只需要修改存储过程即可,而对调用者的程序完全没有影响.
3.删除存储过程 。
1
2
|
drop
procedure
if exists orders_serial
//if exists可选
|
4.查看存储过程差状态 。
1
|
show
procedure
status
like
'orders_serial'
|
5.查询存储过程的定义 。
1
|
show
create
procedure
orders_serial
|
2、存储过程变量的使用 。
存储过程可以使用变量,并且在MySQL5.1版本后,不区分大小写 。
1.变量的定义 。
变量的作用域只能在begin...end块中,可以嵌套在块中 。
declare currentTime date,
2.变量的赋值 。
1
2
|
set
currentTime=now();//直接赋值
select
XX
into
currentTime
from
XX;//也可以通过sql语句进行赋值
|
3.定义条件和处理 。
1
|
declare
handler_type handler
for
contidtion_value;
|
handler_type
1.continue; 2.exit; 3.undo,
condition_value
1.sqlstate 2.sqlwarning 3.not found 4.sqlexception 。
eg: declare continue handler for sqlstate '2' set @x=1,
3、光标的使用 。
在存储过程和函数中,可以使用光标对结果集进行循环处理,光标的使用包含光标的声明: open、fetch、close 。
定义:
declare cur_id cursor for select * from orders; open cur_id; fetch cur_id; close cur_id,
4、事件调度器 。
事件调度器是MySQL5.1后面新增的功能,可以将数据库按照自定义时间周期触发某种操作。数据库默认操作是关闭的。需要打开 。
1
2
3
4
5
|
create
event x
on
schedule
every 5
second
do
insert
into
orders (memberId,serialNumber,amount)
values
(6561121,
'222'
,5)
|
1
2
3
|
set
global
event_scheduler =1//打开调度器
alter
event x disable;//禁用事件调度器
drop
event x;//删除事件调度器
|
10、 触发器 。
触发器 。
触发器是在5.02版本后支持的,触发器是与表有关的数据库对象,在满足条件时触发,并执行触发器中定义的语句集合。可以协助应用在数据库端确保数据的完整性 。
1
2
3
4
5
6
7
8
|
drop
trigger
orderlog
delimiter $
create
trigger
orderlog
after
insert
on
orders
for
each row
begin
insert
into
orderslog (content)
values
(new.serialNumber);
end
insert
into
orders (memberId,serialNumber,amount)
values
(6561121,
'sz12234222'
,5)
|
解释:上面描述的是创建一个触发器,当往订单表中插入数据之后,在订单日志表插入一条记录。使用old和new来引用触发器发生变化的记录内容,目前只支出行级触发,不支持语句级触发 。
触发器执行的顺序 。
1
|
before
insert
\before
update
\
after
update
|
11、 事务控制和锁定语句 。
MySQL存储引擎的事务说明 。
1.Lock Table与Unlock Table 。
语法:
use finance; lock table orders read; unlock table,
如果某个进程(session1)lock定了表,那么其他的进程(session2)可以查询,但是不能进行更新操作,直到第一个进程释放了锁 。
2.事务控制 。
12、总结 。
很高兴您能阅读到这里,可能在三十分钟很难吸收这么多的知识,这篇文章也是我之前学习MySQL笔记整合的。这篇文章也是理论偏多,对于其中比较比较难理解知识点写些Demo,权当个人理解,如有不足的地方,请您指出。如果对您有所帮助,请点个赞! 。
最后此篇关于三十分钟MySQL快速入门(图解)的文章就讲到这里了,如果你想了解更多关于三十分钟MySQL快速入门(图解)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
如何更改循环中变量的名称?比如 number1 、 number2 、 number3 、 number4 ? var array = [2,4,6,8] func ap ( number1: Int
我想设置 View 的背景颜色并在一定延迟后将其更改为另一种颜色。这是我的尝试方式: print("setting color 1") self.view.backgroundColor = UICo
我在使用 express-session 时遇到问题。 session 数据不会在请求之间持续存在。 正如您在下面的代码中看到的那样,/join 路由设置了一些 session 属性,但是当 /sur
我试图从叶渲染器获得一个非常简单的结果,用于快速 Steam 的 for 循环。 我正在上传叶文件 HTML,因为它不接受此处格式正确的代码 - 下面的pizza.swift代码- import
你们中有人有什么好的链接可以与我分享吗?我正在寻找一个 FAST 程序员编辑器,它可以非常快速地打开包含超过 100, 000 行代码的文件?我目前正在使用记事本自动取款机,打开一个 29000 行长
我现在正在处理眼动追踪数据,因此拥有一个巨大的数据集(想想数百万行),因此希望有一种快速的方法来完成此任务。这是它的简化版本。 数据告诉您眼睛在每个时间点正在查看的位置以及我们正在查看的每个文件。 X
我是新手,想为计时器或其他设备选择提示音。 如何打开此列表,以选择其中一种声音? Alert sound list 最佳答案 您将无法在应用中使用系统声音。 但是,您可以包括自己的声音文件,并将其显示
我编写了以下代码来构建具有顺序字符串的数组。 它的工作方式与我预期的一样,但我希望它能更快地运行。有没有更有效的方法在PowerShell中产生我想要的结果? 我是PowerShell的新手,非常感谢
我有一个包含一些非唯一行的矩阵,例如: x 尝试 y <- rle(apply(x, 1, paste, collapse = " ")) # y$lengths is the vector con
我的函数“keyboardWillShown”有问题。所以我想要的是菜单打开时,菜单正好出现在键盘上方。它可以在Iphone 8 plus,8、7、6上完美运行。但是,当我在模拟器上运行Iphone
我正在尝试通过Swift 5中的HTTP get方法从API提取数据。它在启动时成功加载了数据,但是当我刷新页面时,它说“索引超出范围”,这是因为数据是不再会在我的日志中读取,因此索引中没有任何内容。
我想做什么: 从我的数据库中获取时间戳并将其转换为用户的时区。 我的代码: let tryItNow = "\(model.timestampName)" let format = D
给定字体名称和字体大小,如何查找字符串的宽度(CGFloat)? (目标是将UIView的宽度设置为足以容纳字符串的宽度。) 我有两个字符串:一个重复“1”,重复36次,另一个重复“M”,重复36次。
我正在尝试解析此JSON ["Items": ( { AccountBalance = 0; AlphabetType = 3; Description = "\U0631\U
我在UINavigationBar内放置了一个UILabel。 我想根据navigationBar的高度增加该标签的字体大小。当navigationBar很大时,我希望字体大小更大;当滚动并缩小nav
我想将用户输入限制为仅有效数字并使用以下内容: func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, rep
目前我有一个包含超过 100.000 张图像的数据库,它们大小不一或类似,但我想为我的公司制作以下内容: 我插入/上传一张图片,系统返回最有可能相同的图片。我不知道使用什么算法,但它需要快速。我可以预
在我的 swift 项目中,我有一个按钮,我想在标签上打印按下该按钮的时间。 如何解决这个问题? 最佳答案 添加到DHEERAJ的答案中,您只需在func press(sender: UIButton
我必须发表评论,尝试在解析中导入数组。然而,有一个问题。 当我尝试从 Parse 加载数组时,我的输出是 ("Blah","Blah","Blah")这是一个元组...而不是一个数组 TT... 如何
我的应用程序有一个名为 MyDevice 的类,我用它来与硬件通信。该硬件是可选的,实例变量也是可选的: var theDevice:MyDevice = nil 然后,在应用程序中,我必须初始化设备
我是一名优秀的程序员,十分优秀!