百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

MySQL数据库知识

liuian 2025-08-02 19:27 96 浏览

MySQL是一种关系型数据库管理系统;那废话不多说,直接上自己以前学习整理文档:

查看数据库命令:

(1).查看存储过程状态:show procedure status;

(2).显示系统变量:show variables (最好使用模糊查询)

(3).查询当前系统正在执行的进程(相当于DDL(数据库定义语言) 或 DML(数据库操作语言) 或 DCL(数据库控制语言)):show processlist

(4).显示操作对于的操作内容权限:show privileges

(5).显示数据库支持引擎:show engines

(6).显示最后一个执行的语句所产生的错误、警告和通知:show warnings

(7).显示最后一个执行语句的错误:show errors

(8).数据库帮助命令:在登录情况下help

(9).数据库退出指令:exit 或 quit

(10).数据库操作命令大全:在未登录情况下 mysql - help

(11).set names = 编码 进入数据库后马上设置 防止乱码


操作术语:

DDL: Data Definition Language 数据定义语言

DML: Data Manipulation Language 数据操纵语言

DQL: Data Query Language 数据查询语言

DCL: Data Control Language 数据控制语言

TCL: Transaction Control Language 事务控制语言

数据库设计原则(三大范式 3NF):

第一范式(1NF):

原子性:数据不可再分:一个表中的数据(字段值)不可再分 (注意:从应用需求来决定,没有绝对性)

例子(错误):

id name

1 张三,重庆

例子(正确):

id name address

1 张三 重庆

第二范式(2NF):

唯一性:保证行数据的唯一性

例子(错误):

id name

1 张三

1 李四

例子(正确):

id name

1 张三

2 李四

第三范式(3NF):

独立性:消除传递依赖:禁止非主键字段依赖非主键依赖,在发生数据冗余,难以维护修改 (注意:发生这种情况一定是多主键表)

例子(错误):

id name classno classname

1 张三 1 一班

1 李四 2 二班

例子(正确):

id name classno

1 张三 1

1 李四 2

classno classname

1 一班

2 二班

数据库连接方式:

连接本地:

mysql -u 用户名 -p \n

输入密码

连接远程:

mysql -h 主机名 -u 用户名 \n (在对方的数据库中拥有登录用户并且有权限)

输入密码

数据库用户操作:

查询所有用户:

select user from user;

创建用户:

create user 用户名 identified by 密码

用户授权:

grant 权限名称(如:select、delete等DML语句、全部(ALL)) on *.*(注意这里前面的*是代表数据库,第二个*是表名,这里表示所有的数据库.表) to 用户

撤销用户权限:

revoke 权限 on *.* from 用户

删除用户:

drop user 用户名 (这个有点问题,待解决)

delete from mysql where user = '用户名称'

查询用户信息:

show grants for 用户名

密码转换:

select password('密码') 注意:这是一个41个长度的16进制密码,如果在登录后设置密码必须转换为41个长度16进制密码,否则报错

未登录设置用户密码:

mysqladmin -u 用户名 -p 新密码(注意这里是第一次安装设置)

修改用户密码:

mysqladmin -u 用户名 -p 旧密码 password 新密码

登录后设置用户密码:

set password for 用户名 = password(新密码),如果是当前用户直接set password = password(新密码)

修改用户名:

MYSQL5.0以后 rename user 用户名 to 新用户名

update 表名 set user = '新用户名' where user = '旧用户名'

刷新权限: flush privileges

权限列表: 表的创建、插入、修改、删除、查询权限:

create //创建

insert //插入

update //修改

delete //删除

select (select(列名...),可以作用在某列上)//查询

数据库与表的删除和修改权限:

drop

alter

modify

chanage

外键权限: references

临时表权限:create temporary tables

索引权限:index

视图权限:

create view

show view

存储过程、函数权限:

cteate routine

alter routine

execute(execute on procedure)

execute(execute on function)

重载权限: reload

锁表权限:lock tables

复制权限:

replication client

replication slave

查看数据库权限:

show databases

查看进程权限:

process

创建用户权限:

create user

文件访问权限:

file

杀死线程权限:

super

数据库管理员命令:

mysqladmin -V 数据库版本信息

mysqladmin -u 用户 -p 旧密码 password 新密码 修改密码

mysqladmin -i(number) 重复执行间隔数

mysqladmin -c(count) 重复执行次数

mysqladmin variables 数据库变量

mysqladmin -? 数据库帮助

mysqladmin -u root -p reload 重载权限信息

mysqladmin -uroot -p shutdown 使用安全模式关闭数据库

待研究...


库操作:

(1).查看存在数据库:

show databases

(2).创建数据库:

create database if not exists 数据库名称 (注意:后面最好加上字符编码,防止乱码) -> create database 数据量名称 character set utf8(你需求的字符编码) collate utf8_general_ci(子集)

(3).使用数据库:

use 数据量名称

(4).删除删除库:

drop database if exists 数据库名称

(5).查看创建数据库信息:

show create database 数据库名称

表操作:

(1).查看数据库表:show tables

(2).创建表:

create table if not exists 表名(

属性名称 属性类型[完整性约束条件],

属性名称 属性类型[完整性约束条件],

属性名称 属性类型[完整性约束条件]

)engine=引擎类型,charset=字符编码集,comment=表备注;

(3)完整性约束条件表:

primary key 主键约束

foreign key 外键约束

unique 唯一约束

not null 不能为空

auto_increment 自增

default 默认值

(4)设置表主键:

create table 表名(

属性名称 属性类型 primary key, <---- 光标

属性名称 属性类型[完整性约束条件],

属性名称 属性类型[完整性约束条件]

)engine=引擎类型,charset=字符编码集;

多字段主键:

create table 表名(

属性名称 属性类型[完整性约束条件],

属性名称 属性类型[完整性约束条件],

primary key(属性1,属性2,...) <---- 光标

)engine=引擎类型,charset=字符编码集;

添加主键:

alter table 表名 add primary key(列名)

修改主键:

alter table 表名 change 列名 属性名称 属性类型[完整性约束条件]

删除主键:

alter table 表名 drop primary key

修改自增变量值:

alter table 表名 auto_increment = 从数字几开始.

(5)设置外键:

外键是表的一个特殊字段。如果字段id是一个表A的属性,且依赖于表B的主键.

那么,称表B为父表,表A为子表,id为表A的外键。通过id字段将父表B和子表A建立关联关系.

设置表的外键指在创建表设置某个字段为外键.

外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作.

级联操作:

on delete (在删除的时候) restrict(限制外表中的外键改动) cascade(跟随外键改动) set null(设置为空) set default(设置默认值) no action(无动作,默认的)

on update (在删除的时候) restrict(限制外表中的外键改动) cascade(跟随外键改动) set null(设置为空) set default(设置默认值) no action(无动作,默认的)

创建表时设置外键:

create table 表名(

属性名称 属性类型[完整性约束条件],

属性名称 属性类型[完整性约束条件],

constraint 外键名称 foreign key(外键表列属性(也就是本表列属性)) references 主键表名称(主键表列属性) on (update 级联操作 或 delete 级联操作) <---- 光标

)engine=引擎类型,charset=字符编码集;

单独设置外键:

alter table employee add constraint 外键名称 foreign key(外键表列属性(也就是本表列属性)) references department(主键表列属性) on (update 级联操作 或 delete 级联操作)

修改外键:

外键不支持修改

删除外键:

alter table 表名 drop foreign key 外键名称

(6).设置唯一约束:

创建唯一约束:

建表时创建:

create table 表名(

属性名称 属性类型[完整性约束条件],

constraint 唯一约束名称 unique key(列名) <---- 光标

)engine=引擎类型,charset=字符编码集;

建表后创建:

alter table 表名 add constraint 唯一约束名称 unique key(列名)

删除唯一约束:

alter table 表名 drop index 约束

修改唯一约束:

唯一约束不支持修改

(7).设置默认值:

建表时创建:

create table 表名(

属性名称 属性类型[完整性约束条件] default 默认值 <---- 光标

)engine=引擎类型,charset=字符编码集;

建表后创建:

alter table 表名 alter column 列名 set default 默认值

删除默认值:

alter table 表名 alter column 列名 drop default

修改默认值:

同创建方式

(8).设置不为空值:

建表时创建:

create table 表名(

属性名称 属性类型[完整性约束条件] not null <---- 光标

)engine=引擎类型,charset=字符编码集;

建表后创建:

alter table 表名 change 列名 列名(属性名称) 属性类型[完整性约束条件]

修改不能为空值:

alter table 表名 modify 列名 属性类型[完整性约束条件] not null

删除空值:

(在实际意义上算是修改字段属性了) alter table 表名 change 列名 列名(属性名称) 属性类型[完整性约束条件]

(9).自增变量:

auto_increment 默认是从1开始递增

建表时创建:

create table 表名(

属性名称 属性类型[完整性约束条件] auto_increment <---- 光标

)engine=引擎类型,charset=字符编码集,(如果要改变自增变量起始值)auto_increment = 起始值;

建表后创建:

alter table 表名 modify 列名 int auto_increment (注意:自增的前提 此列必须为主键 或者 唯一约束)

alter table 表名 auto_increment = 起始值

删除自增:

alter table 表名 modify 列名 属性类型[完整性约束条件]

修改自增:

同建表后创建

(10).删除表:

drop if exists 表名

(11).清空表数据:

truncate 表名

(12).改变列名称:

alter table 表名 change 列名 列名(属性名称) 属性类型[完整性约束条件]

(13).改变列类型属性约束:

alter table 表名 modify 列名(属性名称) 属性类型[完整性约束条件]

(14).增加一列:

alter table 表名 add column 列名(属性名称) 属性类型[完整性约束条件]

(15).删除一列:

alter table 表名 drop column 列名

(16).表引擎:

创建时指定表引擎:

create table 表名(

属性名称 属性类型[完整性约束条件]

)engine=引擎类型; <---- 光标

修改表引擎:

alter table 表名 engine = 引擎名称

删除表引擎:

不存在

引擎类型:(存储机制,也称为表类型)

InnoDB

MyIsam

BDB

archive

Mermory

...

默认是innodb

(17).查看表状态:

show table status from 数据库名称 where name = '表名'

show table status

(18).查看一个表几行几列:

mysqlshow -u root -p 数据库名称 -v -v

(19).查看表列信息:

show columns from 表名 或者 show columns from 数据库.表名

(20).表备注:

创建表时:

create table if not exists 表名(

属性名称 属性类型[完整性约束条件],

属性名称 属性类型[完整性约束条件],

属性名称 属性类型[完整性约束条件]

)engine=引擎类型,charset=字符编码集,comment=表备注;

创建表后:

alter table 表名 comment = 备注信息

修改表备注:

同创建表后

删除表备注:

暂时未发现

(21).创建相似表:

create if not exists table 表名 like 存在表名 (注意:只是复制了表结构,数据不会复制)


数据类型:

数值类型:

整数类型:

tinyint -> 1字节 -> 小整数值

smallint -> 2字节 -> 大整数值

mediumint -> 3字节 -> 大整数值

int -> 4字节 -> 大整数值

bigint -> 8字节 -> 极大整数值

float -> 4字节 -> 单精度浮点数值

double -> 8字节 -> 双精度浮点数值

decimal 附属double

字符串类型:

char -> 0-255字节 -> 定长字符串

varchar -> 0-255字节 -> 变长字符串

tinyblob -> 0-255字节 -> 不超过255个字符的二进制字符串

tinytext -> 0-255字节 -> 短文本字符串

blob -> 0-65535字节 -> 二进制形式的长文本数据

text -> 0-65535字节 -> 长文本数据

mediumbob -> 0-16777215字节 -> 二进制形式的中等长度文本数据

mediutext -> 0-16777215字节 -> 中等长度文本数据

logngblob -> 0-4294967295字节 -> 二进制形式的极大文本数据

longtext -> 0-4294967295字节 -> 极大文本数据

varbinary(m) -> 允许长度0-m个字节的定长字符串,值的长度+1个字节

binary(m) -> 允许长度0-m个字节的定长字符串

日期和时间类型:

date -> 4字节 -> 1000-01-01/9999-12-31 yyyy-mm-dd -> 年/月/日

time -> 3字节 -> '-838:59:59'/'838:59:59' hh:mm:ss -> 时/分/秒

year -> 1字节 -> 1901/2155 yyyy -> 年

datetime -> 8字节 -> 1000-01-01 00:00:00/9999-12-31 23:59:59 yyyy-mm-dd hh:mm:ss -> 年/月/日 时/分/秒

datestamp -> 4字节 -> 1970-01-01 00:00:00/2037 yyyymmdd hhmmss -> 时间戳 年/月/日 时/分/秒

复合类型:

enum -> 包含65536个元素,其中一个元素保留,用来保存错误信息 -> enum('值1','值2'...)

set -> 包含64个元素,不能包含2个相同的元素 -> set('值1','值2'...)

索引 :

官方介绍:索引(Index)是帮助MySQL高效获取数据的数据结构。我们可以简单理解为:快速查找排好序的一种数据结构。Mysql索引主要有两种结构:B+Tree索引和Hash索引。我们平常所说的索引,如果没有特别指明,一般都是指B树结构组织的索引(B+Tree索引)。

自己总结:索引用来快速地寻找那些具有特定值的记录,如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录,如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。(相当c语言的指针)。

(1).查看索引:

show index from 表名

show keys from 表名

创建索引

create index 索引名称 on 表名(列名);

alter table 表名 add index 索引名称(列名)

唯一索引:

create unique index 索引名称 on 表名(列名)

alter table 表名 add unique 索引名称(列名)

与普通索引相似,但是要求索引列值是唯一不能重复的,可以为空.

主键索引:

create primary key on 表名(列名)

alter table 表名 add primary key(列名)

就是主键列,不允许为空值,一般为Int类型和自增

组合索引:

create index 索引名称 on 表名(列名1,列名2,...)

全文索引:

create fulltext 索引名称 on 表名(列名1,列名2,...)

alter table 表名 add fulltext (列名1,列名2,...)

删除索引:

drop index 索引名称 on 表名

alter table 表名 drop index 索引名称

(注意如果有主外键约束,需要先删除主外键约束)

视图:

视图是一个虚拟的表,是一个表中的数据经过某种筛选后的显示方式,视图由一个预定义的查询select语句组成。

视图的特点。

视图中的数据并不属于视图本身,而是属于基本的表,对视图可以像表一样进行insert,update,delete操作。

视图不能被修改,表修改或者删除后应该删除视图再重建。

视图的数量没有限制,但是命名不能和视图以及表重复,具有唯一性。

视图可以被嵌套,一个视图中可以嵌套另一个视图。

视图不能索引,不能有相关联的触发器和默认值,sql server不能在视图后使用order by排序。


创建视图:

默认字段:create view 视图名称 as 查询语句 (注意:这里创建的视图是虚拟表,在查看表可以看到,但是是虚拟的)

自声明字段:create view 视图名称 ('字段1','字段2'...) as 查询语句 (注意:查询的字段列数必须和视图表列数相同)

删除视图:

drop view if exists 视图名称

修改视图:

视图用来查询数据,如果做修改就毫无意义了,而且即使修改也会出现各种问题

注意: -> 在MYSQL中,字符串和日期值必须使用单引号引用,数值类型可有可无


DML语句 -> 插入数据语法:

(1).insert into 表名 (列名1,列名2,列名3...) values('值1','值2'...) (注意:自增字段忽略值)

(2).replace into 表名 (列名1,列名2,列名3...) values('值1','值2'...) (注意:插入数据与主键和唯一键有重复则会变成更新数据,否则增加一行数据)

(3).insert into 表名 (列名1,列名2,列名3...) select 列名1,列名2... from 其他表名 (注意:列数量要一致)

(4).insert into 表名 set 列名1 = 值1 , 列名2 = 值2 ...

载入文本数据(load data):(在有主键的方式下运行有问题) 以下皆是

(1).load data infile '完整数据文件地址' into table 表名 (普通方式)

(2).load data infile '完整数据文件地址' into table 表名 fields terminted by '列分割符'

(3).load data local infile '完整数据文件地址' into table 表名 ... (指定local本地读取,未指定在服务器上读取)

(4).load data low_priority infile '完整数据文件地址' into table 表名 ... (指定low_priority会在其他人没读取这个表的时候才把数据插入)

(5).load data infile '完整数据文件地址' replace into table 表名 (普通方式)

(6).load data infile '完整数据文件地址' into table 表名 fields terminted by '列分割符' ignore 行数 lines (忽略前几行导入)

(7).load data infile '完整数据文件地址' into table 表名 fields terminted by '列分割符' lines ternubated by '行分割符'

(8).load data infile '完整数据文件地址' into table 表名 fields terminted by '列分割符' enclosed by '符号' (字段包含符号)

(9).load data infile '完整数据文件地址' into table 表名 fields terminted by '列分割符' escaped by '符号' (转义符)

复制表:

复制表结构生成新表:

create table 新表名称 like 旧表名称

复制表和数据一起:

create table 新表名称 select * from 旧表名称

复制表中其中一些字段:

create table 新表名称 (select '列名1','列名2'...)

复制表中其中一些字段并且改名:

create table 新表名称 (select '列名1' as '新表列名'.... from 旧表名称)

复制表中其中一些字段并且增加字段:

create table 新表名称(列名 属性类型[完整性约束条件])(select '列名'... from 旧表)

复制旧表数据到新表:

全表数据:

insert into 新表名称 select * from 旧表名称

单列数据:

insert into 新表名称('列名1','列名2'...) select '列名1','列名2' from 旧表名称

DML语句 -> 删除数据语法:

删除数据:

(1).delete from 表名 (删除表中全部数据)(以行为单位)

(2).delete from 表名 where 条件表达式 (带条件的删除,以行为单位)

(3).delete from 表名 where 条件表达式 order by '列名' desc 或者 asc (用于指定这些数据的删除顺序)(以行为单位)

(4).delete from 表名 limit 数目 (删除指定范围的数据)(以行为单位)

DML语句 -> 修改数据语法:

修改数据:

(1).update 表名 set '列名1' = '值1','列名2' = '值2' (修改表中所有数据)(以行为单位)

(2).update 表名 set '列名1' = '值1','列名2' = '值2' where 条件表达式 (带条件的删除,以行为单位)

(3).update 表名 set '列名1' = '值1','列名2' = '值2' order by '列名' desc 或者 asc (用于指定这些数据的修改顺序)(以行为单位)

(4).update 表名 set '列名1' = '值1','列名2' = '值2' limit 数目 (修改指定范围的数据)(以行为单位)


DML语句 -> 查询数据语法:

(1).基本查询:

(1).select 表达式

举例 1: select 1

结果: 1

举例 2: select 1 + 1

结果: 2

举例 3: select 1 > 0

结果: 1 (这里返回是 true 和 false , 1 代表 true , 0 代表 false)

举例 4: select 1 < 0

结果: 0 (这里返回是 true 和 false , 1 代表 true , 0 代表 false)

举例 5: select now()

结果: 当前时间

(2).别名 as

select '列名' as '别名' .... from 表名 (给字段取别名)

select 别名.列名1,别名.列名2 ... from 表名 as 别名 (给表取别名)

(3).去重 distinct (默认为all)

select distinct '列名' from 表名 (distinct * 无效)

(4).from 数据源

select 输出 from 数据源(表)

(5).where子句

select 输出 from 数据源(表) where 筛选条件列 (对数据源进行条件筛选,筛选机制是按行判断,where子句依赖from子句)

(6).where子句各种运算符:

算术运算符: + - * / %

比较运算符: > >= < <= = <> == != (最后2种不推荐使用,应该遵循SQL语法规范)

逻辑运算符: and(与) or(或者) not(非)

select 输出 from 数据源 where 筛选条件列 = 列值

select 输出 from 数据源 where true

select 输出 from 数据源 where 1

select 输出 from 数据源 where false

select 输出 from 数据源 where 0

select 输出 from 数据源 where not(筛选条件表达式)

(7).is 运算符

'列名' is null (判断字段是否是空值,就是没有值得意思)

'列名' is not null (判断某个字段不是空值)

'列名' is true (判断某个字段为真)

'列名' is false (判断某个字段为假:0,0.00,'',null等)

(8).between运算符 (范围判断 什么和什么之间)

select '列名1'... from 表名 where 筛选条件列 between ? and ? (方法1)

select '列名1'... from 表名 where 筛选条件列 比较运算符 ? and ? (方法2)

(9).in 运算符 (查询指定范围但无任何顺序范围)

select '列名1'... from 表名 where 筛选条件列 in ('值1'...)

(10).like 运算符 (模糊查询)

(注意:like 查询依赖2个特殊符号: 1. % 代表任何长度的任何字符 2. _ 代表一个长度的任何字符)

select '列名1'... from 表名 where 筛选条件列 like '%值%'

(如果遇到查询与符号相同的需求可以使用转义字符 如: \% \_)

(11).group by 分组 (将多行数据,以某种标准进行分类存放)

(注意:这里会有点抽象,我们根据分组查询的信息只有部分是有用的,比如共有几个分组等)

select count(*) from 表名 group by '列名' (得到的是每个分组下的数据条数)

select 组信息 form 表名 group by '列名' (可以这样理解,我们得到的是组信息,而不是单条数据信息)

(12).having (只能对分组结果进行筛选,就是必须与group by 连用)

select count(*) from 表名 group by '列名' having count(*) > 数字

(13).order by (对结果进行排序 asc 或 desc)

select * from 表名 order by '列名1'...

(14).limit (指定范围数据查询,起始行号从0开始,取出指定的函数)

select * from 表名 limit 起始行号,显示的记录条数

(2).连接查询:

(1).交叉连接 cross join

select * from 表1,表2,... on 连接条件

select * from 表1 join 表2 on 连接条件 join 表3 on 连接条件...

select * from 表1 cross join 表2 on 连接条件 cross join 表3 on 连接条件...

交叉连接结果: (表1 + 表2)个列 (表1 * 表2)个行

(2).内连接 inner join

select * from 表1 inner(可省略) join 表2 on 连接条件 (注意:连接条件一般是参与表连接的n个表,相同列的相等)

select '列名1'... from 表1 inner(可省略) join 表2 on 连接条件 (注意:连接条件一般是参与表连接的n个表,相同列的相等)

(注意:跟主外键并无实际的关系)

(3).左连接 left(outer) join

select * from 表1 left join 表2 on 连接条件 (注意:内连接结果,但是多了一个功能就是可以将左表不符合内连接条件的数据也查询出来)

(4).右连接 right(outer) join

select * from 表1 right join 表2 on 连接条件 (注意:内连接结果,但是多了一个功能就是可以将右表不符合内连接条件的数据也查询出来)

(5).全连接 (注意:在mysql中是没有这种语法的)

(注意:内连接结果,但是多了一个功能就是可以将左、右表不符合内连接条件的数据也查询出来)

(3).子查询: (就是用一个查询的结果,作为另一个查询的判断条件)

(注意:子查询必须带有圆括号)

(1).表子查询:

(一个子查询返回的结果理论上是多行多列的时候,此时可以当作一个"表"来使用,通常放在from后面)

例子:

select * from (select * from 表名) as 别名 (注意:把查询结果集当作数据源必须要有别名,否则报错)

(2).行子查询:

(一个子查询返回的结果理论上是一行多列的时候,此时可以当作一个行来使用,通常放在行比较语法中)

例子:

select * from (select * from 表名 where 列名 = 值) as 别名

(3).列子查询:

(一个子查询返回的结果理论上是多行一列的时候,此时可当多个值使用,类似(6,2,5,3))

例子:

select * from 表名 where 列名 in (select 列名 from 表名 where 列名 = 值)

(4).标量子查询:

(一个子查询返回的结果理论上是一行一列的时候,此时可以当作一个值使用)

例子:

select * form 表名 where 列名 = (select 列名 或 其他)

(5).all

select * from 表名 where 列名 比较运算符 all(子查询) (用来遍历判断,只要是比较为真的都被视为结果)

(6).any

select * from 表名 where 列名 比较运算符 any(子查询) (用来遍历判断,只要是比较为真的都被视为结果)

(7).exists 子查询

(该子查询如果有数据,则返回真,否则为假,带隐式连接,子查询使用了主查询的数据)

select * from 表名1 where exists (select * from 表名2 where 列名 = 值 where 表名2.列名 = 表名1.列名)

(4).联合查询: union

(1).select * from 表1 union [all | distinct] select * from 表2 ...

(注意:参与表必须字段数一致,字段类型也应该一致,联合查询默认会自动消除重复行distinct,如果希望被允许,使用all)

事务:

(事务简单来说就是: 要成功一起成功,失败一个也是失败,全部是真才是真,一个为假,也是假)

(1).开启、关闭自动提交事务

set autocommit = 0 或者 1 或者 true 或者 false

(2).手动模式下每执行一条语句需要手动提交

commit (注意语句在没提交事务的情况下,执行后是在内存中,等待生效)

(3).事务的基本执行流程:

(1).开启一项事务: start transaction 或者 begin

(2).执行多条DML语句

(3).判断这些语句的结果

如果没错误 commit 如果有错误 rollback

例子:

(无错误情况下)

start transaction

insert、delete、update、quer

commit

(有错误情况下)

start transaction

insert、delete、update、query (过程出错)

rollback

mysql编程:

(1).语句块包含符:

[标识符 :] begin

...

end [标识符];

(2).流程控制:

(1).if语句:

if 条件表达式 then

begin

...

end;

else if 条件表达式 then

begin

...

end;

...n个else if 语句...

else

begin

...

end;

(2).case 语句:

case 值

when 匹配值 then begin ... end;

...

else begin ... end;

end case

(3).loop 语句:

标识符:loop

begin

if(条件) then (必须有一个退出循环的条件,否则形成死循环)

leave 标识符;

...

end if;

end;

end loop 标识符

(4).while 语句:

while 条件表达式 do

... (这里退出靠循环机制)

end while;

(5).repeat 语句:

repeat

...

until(条件表达式)

end repeat;


(2).变量声明:

(1).普通变量 不带 @ 符号 (只能在编程环境中使用:函数内部、存储过程、触发器)

声明形式:

declare 变量名 属性类型 默认值...

赋值形式:

set 变量名 = 值

(2).会话变量 带 @ 符号

声明形式:

set @变量名 = 值

select @变量名 := 值

selent 值 into @变量名

(3).函数:

(1).声明方式:

delimiter // (定义语义分隔符)

create function 函数名称(形参1 类型1,形参2,...)

returns 返回值类型

begin

...

return 返回值;

end;

//

(2).调用方式:

select 函数名称()

(3).删除函数:

drop function 函数名

注意事项:

在函数体中不能有select或者其他返回结果集语句

(4).存储过程: procedure

(1).声明方式:

delimiter 分隔符

create procedure 存储过程名称(in|out|inout 形参1 类型1,...)

begin

...

end;

分隔符

(2).调用存储过程:

call 存储过程名称()

(5).触发器:

(1). 声明方式:

create trigger 触发器名称 触发时间(before、after) 触发事件(insert、update、delete) on 表名 for each row

begin

...

end;

相关推荐

手机临时文件夹在哪个位置(手机临时文件夹在哪个位置找)

1.手机文件临时文件是指在手机使用过程中产生的临时文件。2.手机应用程序在运行时需要产生一些临时文件,如缓存文件、日志文件、临时下载文件等,这些文件可以提高应用程序的运行效率和用户体验。但是,这些...

安卓10系统下载(安卓10 下载)

方法及步骤:  其实使用安卓车机下载歌曲的方法十分的简单,具体操作步骤和安卓手机一模一样。  首先我们需要在车机的应用商店上,下载一个音乐播放器,例如网易云音乐或者QQ音乐等。  下载完成后点击进入...

华硕人工客服24小时吗(华硕售后人工客服)

华硕服务中心广东省惠州市惠东县城平深路(创富斜对面)惠东同心电脑城1L11(1.3km)笔记本电脑,平板电脑华硕服务中心广东省惠州市惠东县平山镇同心电脑城1F26(1.3km)笔记本电脑,平...

电脑音量小喇叭不见了(电脑声音喇叭图标不见了怎么办)

如果您电脑上的小喇叭(扬声器)不见了,可以尝试以下方法找回:1.检查设备管理器:在Windows下,右键点击“我的电脑”(或此电脑)->点击“属性”->点击“设备管理器”,查看“声音、视...

腾达路由器手机设置教程(腾达路由器手机设置教程视频)

用手机设置腾达路由器的方法如下:1在手机上打开浏览器,输入路由器背面的管理IP和用户及对应的密码2一般第一次打开,默认会跳出设置向导,准备好宽带用户名和密码,3按向导提示输入相应内容4在无线设置的安全...

自配电脑配置推荐(自配电脑配置推荐百度)

首先,像这类软件最低要求不高。最高没上限。纯粹看你的工程量大小。CPU有双核,内存有4G,就可以运行。但是实际体验肯定比较差,卡是肯德。渲染时间也会超长,一个小作品渲染几小时是正常的。稍微大点的工程也...

2025年平板性价比排行(2020年值得买的平板)

推荐台电P30S好。 基本配置:10.1英寸IPS广视角屏幕,1280*800分辨率,16:10的黄金显示比例,K9高压独立功放,支持3.5mm耳麦接口,联发科MT8183八核处理器,4GB...

2020显卡天梯图10月(2020显卡天梯图极速空间)

排行球队名称积分已赛胜平负进球失球净胜球  1?诺维奇城974629107753639 2?沃特福德91462710...

路由器加密防蹭网(路由器加密防蹭网吗)
  • 路由器加密防蹭网(路由器加密防蹭网吗)
  • 路由器加密防蹭网(路由器加密防蹭网吗)
  • 路由器加密防蹭网(路由器加密防蹭网吗)
  • 路由器加密防蹭网(路由器加密防蹭网吗)
笔记本电脑无线网络连接(笔记本电脑无线网络连接不上怎么办)
笔记本电脑无线网络连接(笔记本电脑无线网络连接不上怎么办)

一、笔记本电脑怎么连接wifi---win7系统笔记本连接wifi1、要先创建无线网络连接,将鼠标移到Win7的开始菜单,然后点击“控制面板”。2、然后点击“网络和Internet”。3、再打开“网络和共享中心”,这是Win7系统必有的功...

2025-12-22 05:55 liuian

wind数据库(wind数据库官网)

先购买wind数据库,安装好wind取得使用权后,按照wind所给提示,输入账户和密码可使用wind数据库。Wind资讯金融终端是一个集实时行情、资料查询、数据浏览、研究分析、新闻资讯为一体的金融数据...

如何关闭360家庭防火墙(如果关闭360家庭防火墙)

关闭方法如下:1.打开手机360主界面之后,点击“安全防护中心”。2.点击第三列“入口防护”下方的“查看状态”按钮。3.在列出的功能项中找到“局域网防护”,直接点击后面的“关闭”按钮,关闭所有的“局域...

笔记本电脑型号配置怎么看(怎么查自己电脑的型号)

查电脑的配置和型号方法:方法一:1、右键单击“此电脑”,点击属性2、这里可以看到操作系统,CPU等大致信息3、点击设备管理器4、这里可以查看具体硬件的详细信方法二:1、首先打开电脑上的“控制面板”2、...

pscs6序列号是什么

AdobePhotoshopCS6就二个版本(测试版和正式版)1、AdobePhotoshopCS6是AdobePhotoshop的第13代,是一个较为重大的版本更新。2、Photoshop在前几...

win7桌面图片怎么设置(win7如何设置桌面图片)

1、首先用鼠标右键单击桌面的空白处。然后在弹出的菜单上选择“个性化”选项。这样就弹出了的个性化窗口上能显示看到“桌面背景”按钮。点击它即可。2、继续打开了选择“桌面背景”选项,然后在上面选择你想要设置...