MySQL学习心得

时间:2024.5.14

MySQL学习心得

第一章

一、数据库管理系统(DBMS)是操作和管理数据库的大型软件,它按一定的数据模型组织数据。

例如:Oracle、SQL Server、MySQL、Access。

二、数据库应用系统在数据库管理系统(DBMS)支持下建立的计算机应用系统,简写:DBAS。

例如:.net Java。

三、字符集从大到小排序:utf8-- gbk --gb2312。

四、mysql的特点:

适用于中小型网站中,体积小、速度快、总体拥有成本低,尤其是有开放源码这一特点。 五、

目前Internet上浒的网站构架方式是LAMP(Linux+apache+mysql+php)即使用Linux作为操作系统,Apache作为Web服务器,MySQL作为数据库,PHP作为服务器端脚本解释器,由于4个软件都是遵循GPL的开放源码软件,因此使用这种方式不用花一分钱就可以建立起一个稳定、免费的网站系统。

第二章

一、安装过程中遇到的问题及解决方法:

安装过程中没有完成时计算机关机。(没有删除完文件)

安装完成时找不到所配置的路径。(可以从配置文件中找到)

安装完成后无法正常使用。(在计算机管理中重新启动MySQL服务)

安装到一半时没有出现下一步。(误把配置文件删除了)

安装到最后一步时start service错误。

到控制面板里面先把mysql删除.

到c盘C:\Program Files目录下把mysql目录删除.

如果在其他盘还有设置目录也要删除.空目录也要删除

到regedit把注册表

HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/Eventlog/Applications/MySQL HKEY_LOCAL_MACHINE/SYSTEM/ControlSet002/Services/Eventlog/Applications/MySQL HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Eventlog/Applications/MySQL

有的话,全部删除!(技巧:用F3循环查找“mysql”)

如果任务管理器里有关mysql内容也删除

把防火墙关了

重新装mysql(这里我没有重启计算机)

重装时候有必要的话,重启计算机,停用IIS,和删除temp里的临时文件.

实在不行的话,配置mysql时候,把mysql服务换个服务名.

使用时输入中文会出错。(在配置时在“Character Set”选框中将latinl修改为gb2312;也可以在配置文件中修改)

二、启动服务器的方法:

① 方法1:

在 “计算机管理”中的“服务”项目中启动与停止。

② 方法2:

使用命令(net start mysql和net stop mysql)

三、连接MySQL

格式: mysql -h主机地址 -u用户名 -p用户密码

①先在打开DOS窗口,然后进入目录 mysql\bin(如果设置了环境变量,则直接输入命令即可。)

②键入命令mysql -uroot -proot

③接回车即可进入到MYSQL中了

MYSQL的提示符是:mysql>

注明:直接打开Mysql command line client

四、MySQL注释符有三种:

①#... ②"-- ..." ③

五、忘记密码重新更改密码

先停止mysql服务,修改D:\MySQL\MySQL Server 5.0\ 目录下的my.ini文件,在[mysqld]下添加skip-grant-tables

启动mysql服务后就可以以空密码登录,之后别忘记修改root密码

use mysql

update user set password=password('hanaixia') where user='root';(分号不能少)

password('hanaixia')此处必须用函数设置。

修改密码后需要重新启动服务或者使用 flush privileges;语句,用于从mysql数据库中的授权表重新载入权限。

把 skip-grant-tables 这一句删掉再重启mysql服务。


第二篇:SQL学习总结


知识总结

1.插入,删除,修改(语法)

(插入)INSERT  [INTO] <表名>  [列名] VALUES <值列表>

(更新)  UPDATE <表名> SET<列名> =<给列赋的新値>

[WHERE <更新条件>]

(删除)DELETE   [FROM] <表名> [WHERE <删除条件>]

注意

 插入语句

如果没有能很好的记住字段在表中的顺序最好是写上列名

2.条件查询

     Select <列名>

     From <表名>

     Where <查询条件的表达式>

    Order <排序的列名>

3 给字段取别名 as 用法

使用AS 来为列其别名

Select  学号 as studentNO,姓名 as name ,家庭地址 as address

From studentinfo

Where 家庭地址<>‘黑龙江哈尔滨’

使用=来为列 另起别名

Select ‘姓名’=firstName+‘.’+lastname from employees

注意:1.+连接字符数据,结果为字符串数据的连接

      2.如果+ 连接数值型,结果为数值的和

4.函数

字符串函数

数学函数

备注:

日期函数中datediff可以用来计算时间差(例如,年龄) getdate()用来设置默认

这些函数容易记也容易忘,尤其是书写的格式规范。

5 like 用法

*通配符

*% 包含零个或更多字符串

*_( 下划线)任何单个字符

*[]指定范围([a-f])或集合[abcdf] 中任何的一个单个字符

*[^] 不属于指定范围[a-f]或集合[abcdef] 的任何单个字符

SELECT * FROM 数据表

WHERE 编号 LIKE ‘00[^8]%[AC]%’

可能会查询出的编号值为( a)。

A、0090ACD

B、007_AFF

C、008&DCG

D、008C

6.聚合函数

*Count(), * Max(),*Min(),*Avg(),sum()

 6.1分组查询—group by—having

Select 任职部门,count(*

From lucia 工作室

Where 目前的薪资>=2000

Group by 任职部门

      Having count(*)>4

7.多表查询

*inner join 内连接: 两张表的顺序颠倒对结果没有影响

*left join   左连接:左边的表是主表,表的顺序不能颠倒

*right join  右连接:右边的表是主表,表的顺序不能颠倒

SELECT       S.姓名,C.课程编号,C.笔试成绩

FROM          StudentInfo AS S

INNER JOIN       Score Info AS C

ON               C.学号 = S.学号

8.建表的三大范式

v   第一范式的目标是确保每列的原子性

v   如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)

v  

v   如果一个表中个字段关系满足1NF,并且除了主键以外的其它列,都依赖于该主键,则满足第二范式(2NF)

v   第二范式要求每个表只描述一件事情(去除不依赖主键或部分依赖主键的列)

由第二范式可知:产品价格不是依赖订单的编号

v   如果一个关系满足2NF,并且除了主键以外的其它列都不传递依赖于主键列,则满足第三范式(3NF)

v   第三范式的目标是确保每列都直接依赖主键

由第三范式可知:产品的结果是依赖产品编号 而不是直接依赖订单编号的

9. 主键(primary key),外键(foreign key) 创建/添加 语法

 Constraint PK_ 主键名称 primary key(主键名称)

 Constraint FK_外键的名称 foreign key(外键名称)

 References 父表 (父表字段)

修改

Alter table 子表

Add Constraint FK_外键的名称 foreign key(外键名称)

 References 父表 (父表字段)

10 变量(局部变量,全局变量)

局部变量

*声明局部变量 

 DECLARE   @变量名  数据类型

* 赋值

*SET @变量名= 值

*SELECT @变量名=值

全局变量

是系统的,是不能改变的

较常用的是:

11.if…… else ,while,case end, when then 用法例题

=============if  else ===================

if exists (select *from sysobjects where name='NewTable')

drop table NewTable

select 姓名,S.学号,笔试成绩,机试成绩, 是否通过=case

when 笔试成绩>60 and 机试成绩>60 then 1

else 0

 end

into NewTable from studentinfo as s

left join scoreinfo  as c

on s.学号=c.学号

go

==============while===================

declare @writtenAvg decimal

declare @labavg decimal

select @writtenAvg= avg(笔试成绩) from studentscore

select @labavg=avg(机试成绩) from studentscore

if(@writtenAvg>@labavg)

begin

print('笔试成绩大于机试成绩')

while(1=1)

begin

update studentscore set 机试成绩=机试成绩+1

if(select max(机试成绩)from studentscore)>=97

break

end

end

else

begin

print('机试成绩大于笔试成绩')

while(1=1)

begin

update studentscore set 笔试成绩=笔试成绩+1

if(select max(笔试成绩) from studentscore)=97

break

end

end

go

select * from studentscore

go

============case  end==============

select 姓名,学号

,笔试成绩=

                                                

            case

                  when 笔试成绩 is null then'缺考'

                  else convert(varchar(5),笔试成绩)

                     end

,机试成绩=

            case

                            when 机试成绩 is null then'缺考'

                else convert(varchar(5),机试成绩)

                  end

,是否通过=

                     case

                            when  是否通过=1 then '是'

                when  是否通过=0 then'否'

                     end

from NewTable

go

===========when then =====================

if exists (select *from sysobjects where name='NewTable')

drop table NewTable

select 姓名,S.学号,笔试成绩,机试成绩, 是否通过=case

when 笔试成绩>60 and 机试成绩>60 then 1

else 0

 end

into NewTable from studentinfo as s

left join scoreinfo  as c

on s.学号=c.学号

go

select * from newTable

12 子查询(in,exists)

SELECT 姓名 FROM StudentInfo

WHERE  学号

IN

(SELECT 学号 FROM  ScoreInfo )

GO

注意:

基本上 in 可以等价于“=”可是“=”只能是子查询返回的是单个结果,如果是多个查询结果只能用 in

Exists 用法用例:

IF  EXISTS (SELECT * FROM  sysdatabases WHERE  name =‘LuciaBank')

 DROP DATABASE LuciaBank

14 存储过程

优点:

<1>执行的速度更快

<2>允许模块化程序设计

<3>提高系统安全性

<4>减少网络流通量

14.1分类

<1>系统存储过程

“sp_”或者是“XP_”

常用系统存储过程

Sp_database:列出服务器上的所有数据库

Sp_helpdb:报告有关指定数据库或所有数据库的信息

Sp_rename :更改数据库的名称

Sp_tables:返回当前环境下可查询的对象的列表

sp_columns:返回某个表列的信息

sp_help:查看某个表的所有信息

sp_helpconstraint:查看某个表的约束

sp_helpindex: 查看某个表的索引

sp_password: 添加或修改登录帐户的密码

sp_helptext: 显示默认值、未加密的存储过程、用户定义的存储过程、触发器或视图的实际文本

14.2自定义的存储过程

14.2.1定义存储过程的语法和调用的语法

<1>

CREATE PROC[EDURE] 存储过程名

@参数1 数据类型= 默认值OUTPUT,

…… ,

@参数n 数据类型= 默认值OUTPUT

AS

SQL语句

<2>

调用的语法

EXEC过程名[参数]

14.2.2不带参数的存储过程

/*------------------------------------------------------

 存储过程(不带参数)

题目:查看本次考试的平均分数,并查看没有通过的学生的名单

----------------------------------------------------------*/

create procedure p_scoreInfo

as

 declare @writtenAvg decimal

 declare @labAvg  decimal

 select @writtenAvg=avg (笔试成绩),@labAvg=avg(机试成绩) from studentscore

print'笔试成绩的平均分'+convert(nvarchar(5),@writtenAvg)

print'机试成绩的平均分'+convert(nvarchar(5),@labAvg)

if(@writtenAvg>60 and @labAvg>60)

print'本班的成绩优秀'

else

print'本班的成绩很差'

print'-------------------------------------------------------'

print '本班成绩不及格的人名单'

select s.学号,姓名,笔试成绩,机试成绩

from studentinfo s, studentscore c

where s.学号=c.学号

and 笔试成绩<60 or 机试成绩<60

go

exec p_scoreInfo

go

14.2.3 带参数的存储过程

 存储过程的参数分两种:输入参数,输出参数

例题

/*--------------------------------------------------------------

带参数的存储过程

 题目:查看本次考试的平均分数,并查看没有通过的学生的名单

 可以规定及格的分数

-----------------------------------------------------------------*/

create procedure proc_scoreinfoHaveParams

(

  @writePass decimal ,--默认值是60

  @labPass  decimal

)

as

 declare @writtenAvg decimal

 declare @labAvg  decimal

 select @writtenAvg=avg (笔试成绩),@labAvg=avg(机试成绩) from studentscore

 print'笔试成绩的平均分'+convert(nvarchar(5),@writtenAvg)

 print'机试成绩的平均分'+convert(nvarchar(5),@labAvg)

if(@writtenAvg>@writePass and @labAvg>@labPass)

print'本班的成绩优秀'

else

print'本班的成绩很差'

print'-------------------------------------------------------'

print '本班成绩不及格的人名单'

select s.学号,姓名,笔试成绩,机试成绩

from studentinfo s, studentscore c

where s.学号=c.学号

and 笔试成绩<@writePass or 机试成绩<@labPass

go

exec proc_scoreinfoHaveParams 45,35

go

*--------------------------------------------------------------

带参数(输出)的存储过程

 题目:查看本次考试的平均分数,并查看没有通过的学生的人数

-----------------------------------------------------------------*/

 create procedure proc_outputscoreInfo

(

   @sumNotPass int output,

   @writePass decimal=60 ,--默认值是60

   @labPass  decimal=60

)

as

declare @writtenAvg decimal

 declare @labAvg  decimal

 select @writtenAvg=avg (笔试成绩),@labAvg=avg(机试成绩) from studentscore

 print'笔试成绩的平均分'+convert(nvarchar(5),@writtenAvg)

 print'机试成绩的平均分'+convert(nvarchar(5),@labAvg)

if(@writtenAvg>@writePass and @labAvg>@labPass)

print'本班的成绩优秀'

else

print'本班的成绩很差'

print'-------------------------------------------------------'

select @sumNotPass=count(*) from studentscore where 笔试成绩<@writtenAvg or 机试成绩=@labAvg

go

declare @sum int

exec proc_outputscoreInfo @sum output, 35,35

print '***************************************'

if @sum>=3

print '本班成绩不及格的人数是'+convert(varchar(5),@sum)+'及格人太少,及格分数要在调低'

else

print'及格人数适中,及格分数线可以'

drop proc proc_outputscoreInfo

go

14.2.4 RAISERROR 用法

语法

RAISERROR (msg_id| msg_str,severity, state WITH option[,...n]])

msg_id:在sysmessages系统表中指定用户定义错误信息

msg_str:用户定义的特定信息,最长255个字符

severity:定义严重性级别。用户可使用的级别为0–18级

state:表示错误的状态,1至127之间的值

option:指示是否将错误记录到服务器错误日志中

/*--------------------------------------------------------------

带参数(输出)的存储过程

 题目:查看本次考试的平均分数,并查看没有通过的学生的人数

当输入的及格分数不再1到100之间则报错

-----------------------------------------------------------------*/

declare @sum int,@t int

exec proc_outputscoreInfo @sum output,80

set @t=@@error

print '错误号:'+convert(nvarchar(10),@t)

if @t<>0

raiserror('及格线错误,请重新输入(1——100之间)',16,1)

return

print '***************************************'

if @sum>=3

print '本班成绩不及格的人数是'+convert(varchar(5),@sum)+'及格人太少,及格分数要在调低'

else

print'及格人数适中,及格分数线可以'

drop proc proc_outputscoreInfo

go

15 事物

15.1  事物概念

v  事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作

v  这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行

v  事务是一个不可分割的工作逻辑单元

15.2事物四个属性

u  原子性(Atomicity):事务是一个完整的操作。

   事务的各步操作是不可分的(原子的);要么都执行,要么都不执行

u  一致性(Consistency):当事务完成时,数据必须处于一致状态

u  隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务

u  永久性(Durability):事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的永久性

15.3管理事务T_SQL语句

<1> 开始事务: beigin transaction

<2> 提交事务:commit transaction

<3> 回滚事物: rollback  transaction

15.4 判断出错的语句 @@ERROR

v  15.5事务的分类:

u  显性事务:用BEGIN TRANSACTION明确指定事务的开始,这是最常用的事务类型

u  隐性事务:通过设置SET IMPLICIT_TRANSACTIONS ON 语句,将隐性事务模式设置为打开,下一个语句自动启动一个新事务。当该事务完成时,再下一个 T-SQL 语句又将启动一个新事务

u  自动提交事务:这是 SQL Server 的默认模式,它将每条单独的 T-SQL 语句视为一个事务,如果成功执行,则自动提交;如果错误,则自动回滚

15.6例题

---------------------------------

--转账事物处理

--------------------------------

begin  transaction

declare @errorcount int

set @errorcount=0

update clientAccount set 余额=余额-1000

where 账号='6226900707220987'

 set @errorcount=@errorcount+@@error

update clientAccount set 余额=余额+1000

WHERE 账号='6226900707220654'

set @errorcount=@errorcount+@@error

if @errorcount<>0

begin

print'交易失败,回滚事物'

rollback transaction

end

else

begin

print '交易成功'

commit transaction

end

go

print'查看转账事物后余额'

select * from  BankAccount

go

16 索引(提高查询速度,但是占空间) 是SQL Server编排数据的内部方法

16.1索引的类型

v  唯一索引:唯一索引不允许两行具有相同的索引值

v  主键索引:为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的,并且不能为空

v  聚集索引(Clustered):表中各行的物理顺序与键值的逻辑(索引)顺序相同,每个表只能有一个

v  非聚集索引(Non-clustered):非聚集索引指定表的逻辑顺序。数据存储在一个位置,索引存储在另一个位置,索引中包含指向数据存储位置的指针。可以有多个,小于249个

16.2 语法

CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED] 

INDEX   index_name

ON table_name (column_name…)

[WITH FILLFACTOR=x]

<1>UNIQUE表示唯一索引,可选

<2>CLUSTERED、NONCLUSTERED表示聚集索引还是

   非聚集索引,可选

<3>FILLFACTOR表示填充因子,指定一个0到100之间的值,

<4>值指示索引页填满的空间所占的百分比

16.3索引创建的指定原则

v  请按照下列标准选择建立索引的列

u  该列用于频繁搜索

u  该列用于对数据进行排序

v  请不要使用下面的列创建索引:

u  列中仅包含几个不同的值

u  表中仅包含几行。为小型表创建索引可能不太划算,因为SQL Server在索引中搜索数据所花的时间比在表中逐行搜索所花的时间更长

17视图

概念:视图是一张虚拟表,它表示一张表的部分数据或多张表的综合数据,其结构和数据是建立在对表的查询基础上

17.1视图的用途

u  筛选表中的行

u  防止未经许可的用户访问敏感数据

u  降低数据库的复杂程度

u  将多个物理数据库抽象为一个逻辑数据库

17.2语法

CREATE VIEW view_name 

   AS

<select语句>

17.3例题

-------------------------------------------------

----创建CS_KC视图,包括雇员名字,部门名字、其选修的课程号及成绩收入在—之间的雇员号码

--------------------------------------------------

create view CS_KC as

select e.name as 顾员姓名,

d.departmentname as 部门名称,

e.EmployeeID as 雇员编号

from Employees as e ,Departments as d,Salary as s

where s.Income between 20## and 3000 and e.departmentID=d.departmentID and e.employeeID=s.employeeID

18 触发器

触发器是一种特殊的存储过程,类似于事件函数,SQL Server 允许为 INSERT、UPDATE、DELETE 创建触发器,即当在表中插入、更新、删除记录时,触发一个或一系列 T-SQL语句。

18.1 语法

创建触发器用 :CREATE TRIGGER

CREATE TRIGGER 触发器名称

ON 表名

FOR INSERT、UPDATE 或 DELETE

AS

T-SQL 语句

18.2触发器中用到两个临时表:Deleted 和Inserted

一个数据库系统中有两个虚拟表用于存储在表中记录改动的信息,分别是:

Deleted  ,Inserted

虚拟表Inserted

u  表记录新增时,用来存放新增的数据记录

u  表记录更新时,用来存放更新的新记录

u  表记录删除时,不存储任何信息

虚拟表Deleted

u  表记录新增时,不存放任何记录

u  表记录更新时,用来存放更新前的记录

u  表记录删除时,用来存放删除前的数据记录

18.4例题

-----------------------------------------------------------

--修改Departments表departmentID字段值时,该字段在Employees表中的对应值也应修改;

-----------------------------------------------------------------

create trigger deparmentsudate on departments

for update

as

begin

if(columns_updated()&01)>0

update employees

set departmentID=(select ins.departmentID from inserted ins)

  where departmentID=(select departmentID from deleted)

end

------------------------------------------------------

----1.向Employees表添加一记录时,该记录的departmentID值在

--Departments表中应存在create  trigger employeesinsert on employees

-------------------------------------------------------------

 create  trigger employeesinsert on employees

 for insert update

 as

begin

if((select ins.departmentid from inserted ins) not in(select departmentid from departments))

rollback

end

---------------------------------------------------------------------

---1.3. 删除Departments表中一记录时,该记录departmentID字段值在Employees表中对应的记录也应删除

---------------------------------------------------------------------

create trigger departmentsdelete on departments

for delete

as

begin

delete from employees

where departmentID=(select departmentID from deleted)

end

go

更多相关推荐:
syb创业培训学习心得

SYB青年创业培训班学员20xx年x月x日我很荣幸的参加了SYB培训班。在这短暂的两周学习生活中,我学到了很多有关创业的专业知识,通过这次学习也给我的人生增添了丰富多彩的新篇章。刚开始参加SYB培训时,看到…

syb培训心得

创业培训心得体会学校新疆工程学院姓名罗总系部计算机工程系日期20xx年5月19日时光匆匆为期8天的创业培训课程就要结束了在这段日子里和同学老师度过了难忘的时光创业培训课虽然上课的时间不长但是让我学到了很多眼界也...

syb创业培训心得体会

创业培训心得体会20xx年x月x日至15日,这十天是我过得最充实的日子,在这十天,我参加了运城市职业培训中心举办的SYB创业培训班。此次培训共有179期和180期两期共六十多人,我被安排在第180期。在这次培…

SYB创业培训学习心得体会

SYB创业培训学习心得体会20xx年x月我很荣幸的参加了SYB培训班。在这短暂的10天学习和生活中,让我学到了很多有关创业的专业知识,通过这次学习也给我的人生增添了丰富多彩的新篇章。在此,我特别感谢三都县委、县…

siyb创业培训心得体会

siyb创业培训心得体会祁县第三期SIYB创业培训班,在老师的辛勤指导下,在学员们的艰苦努力下,在各级领导的深切关怀下,今天就圆满结束了。十天前大家怀着梦想和期望走进了世达学校,经过十天的听课、讨论、参观、互动…

syb大学生创业培训心得体会

SYB创业培训心得体会在社会竞争日益激烈的时代,大学生就业面临重重的困难,以创业带动就业,也是我们成功的动力。20xx年x月,我参加了创业培训班。在一个月的时间里,我们认真聆听了老师富有激情、风趣而贴切实际的…

SIYB创业培训师学习心得体会

SIYB创业培训师学习心得体会SIYB创业培训心得体会刘德浪得虚名20xx/11/20我是来自宁夏大学物理电气信息学院电气工程与自动化专业的学生,我捷孵德。20xx年x月,我有幸参加宁夏大学就业指导中心举办的…

ansys学习经验

学习ANSYS的经验总结一学习ANSYS需要认识到的几点相对于其他应用型软件而言ANSYS作为大型权威性的有限元分析软件对提高解决问题的能力是一个全面的锻炼过程是一门相当难学的软件因而要学好ANSYS对学习者就...

ansys学习心得

常规设置1调整显示精度以使图形看起来更清晰逼真把参数调到最小2CATIA制图自动生成尺寸的命令设置Dimensiongeneration更新图纸时建立尺寸每次更新后会自动将标注尺寸建立出来建立后自动定位可以将产...

学习ansys的一些心得

学习ansys的一些心得学习ansys的一些心得送给初学者和没有盟币的兄弟1做了布尔运算后要重画图形删除实体时需拾取UtilityMenugtPlotgtReplot2标点的输入是在英文状态下3线段中点的建立M...

Ansys学习经验

Ansys学习经验谈下面是本人在学习时使用ANSYS时的一些经验和技巧希望对大家有用转自仿真论坛版主lirui0726仅作分享1将ANSYS的学习紧密与工程力学专业结合起来毫无疑问刚开始接触ANSYS时如果对有...

ansys学习方法汇总

一学习ANSYS需要认识到的几点相对于其他应用型软件而言ANSYS作为大型权威性的有限元分析软件对提高解决问题的能力是一个全面的锻炼过程是一门相当难学的软件因而要学好ANSYS对学习者就提出了很高的要求一方面需...

syb学习心得(3篇)