文档库 最新最全的文档下载
当前位置:文档库 › mysql_one笔记

mysql_one笔记

mysql_one_day

#第一天主要是mysql数据库的介绍与基本语句介绍


mysql介绍
mysql安装
mysql相关文件
mysql库介绍与管理
mysql表管理
mysql数据管理(增删改查)
mysql select 语句

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mysql介绍

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。
MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策(本词条“授权政策”),它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。由于其社区版的性能卓越,搭配PHP和Apache可组成良好的开发环境。


其他数据库
Oracle、DB2、SQL Server

mysql 特点
1.使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性。
2.支持AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统。
3.为多种编程语言提供了API。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
4.支持多线程,充分利用CPU资源。
5.优化的SQL查询算法,有效地提高查询速度。
6.既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。
7.提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。
8.提供TCP/IP、ODBC和JDBC等多种数据库连接途径。
9.提供用于管理、检查、优化数据库操作的管理工具。
10.支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
11.支持多种存储引擎。


mysql引擎类型

MyISAMMysql5.5之前的默认数据库引擎,最为常用。拥有较高的插入,查询速度,但不支持事务

InnoDB事务型数据库的首选引擎,支持ACID事务,支持行级锁定, MySQL 5.5起成为默认数据库引擎

BDB源自Berkeley DB,事务型数据库的另一种选择,支持COMMIT和ROLLBACK等其他事务特性

Memory所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在Mysql重新启动时丢失

Merge将一定数量的MyISAM表联合而成一个整体,在超大规模数据存储时很有用

Archive非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取。Archive拥有高效的插入

速度,但其对查询的支持相对较差

Federated将不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用

Cluster/NDB高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用
CSV: 逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个.CSV文件。这是一种普通文本文件,每个数据行占用一个文本行。CSV存储引擎不支持索引。

BlackHole :黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继

EXAMPLE存储引擎是一个不做任何事情的存根引擎。它的目的是作为MySQL源代码中的一个例子,用来演示如何开始编写一个新存储引擎。同样,它的主要兴趣是对开发者。EXAMPLE存储引擎不支持编索引。




mysql单表理论上可以放18446744073709551616 ((2^32)^2)

一般600W就建议分表 mysql公司有千万记录的表。
1000W记录大概2-3G

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mysql install

##mysql 安装包

mysql-server 服务器包
mysql 客户端包



##安装
[root@convirt ~]# yum install mysql mysql-server -y


##启动 如果是第一次启动会初始化数据库 会在默认目录(/var/lib/mysql)下创建默认数据库文件夹。
[root@convirt ~]# service mysqld start

##登录mysql

[root@convirt ~]# mysql

mysql> mysql提示符


默认情况下:使用mysql命令直接登录 等价于本条命令 mysql -h 127.0.0.1 -u root -p ""


mysql -h server_host_ip
-u user
-p 密码


注:mysql管理员为root 和系统root 是两码事


##关于登录mysql

mysql默认是拒绝远程登录的
假设一个mysql机器的IP是 192.168.18.254
但是登录时不能使用 mysql -h 192.168.18.254 -u root -p
无法登录
正确的方式 mysql -h 127.0.0.1 -u root -p

##退出mysql

mysql> quit;
or
ctrl+c组合键



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mysql相关文件
/var/lib/mysql 默认数据放在该目录下 其实一个数据库就是一个文件夹
/etc/https://www.wendangku.net/doc/f212512967.html,f 配置文件
/var/log/mysqld.log 日志


##配置文件介绍

[mysqld]
在这个配置段之内,将会看到与MySQL守护进程相关的命令

datadir=/var/lib/mysql

MySQL服务器把数据库存储在由datadir变量所定义的目录中。

Socket=/var/lib/mysql/mysql.sock

MySQL套接字把数据库程序局部的或通过网络连接到MySQL客户。





[safe_mysqld]

这个配置段包含MySQL启动脚本所引用的命令。如果使用MySQL4.X或4.X以上版本,必须把这个配置段改成[mysqld_safe]。

err-log=/var/log/mysqld.log

这是MySQL所关联的错误被发送到的这个文件。如果使用M

ySQL4.X或4.X以上版本,必须使用log-error指令替换这条命令。

pid-file=/var/run/mysqld/mysqld.pid

最后,pid-file指令定义MySQL服务器在运作期间的进程标识符(PID)。如果MySQL服务器当前没有运行,这个文件应该不存在。



[client]

这个配置把指令传递给与MySQL服务器相关的客户。

port=3306

MySQL所相关的标准TCP/IP端口是3306。如果需要修改这个端口号(可以增强安全),必须确保用于MySQL客户与服务器的所有相应配置文件中均修改这个号。

socket=/var/lib/mysql/mysql.sock

正像默认的/etc/https://www.wendangku.net/doc/f212512967.html,f文件中所定义的那样,这是控制MySQL客户与服务器间通信的标准套接字文件。



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mysql库介绍与管理
1.数据库的建立
2.数据库的删除
3.数据库的改名
4.查看数据库


方法一:
1.数据库的建立
原因就是一个目录是一个文件夹
[root@convirt ~]# mkdir /var/lib/mysql/hello
[root@convirt ~]# chown mysql.mysql /var/lib/mysql/hello/


2.数据库的删除

[root@convirt ~]# rm -rf /var/lib/mysql/hello

3.数据库的改名

[root@convirt ~]# mv /var/lib/mysql/hello /var/lib/mysql/today

4.查看数据库

[root@convirt ~]# ls /var/lib/mysql/
mysql today vfast 目录

方法二:数据库语句

1.数据库的建立

mysql> create database vfast;
Query OK, 1 row affected (0.00 sec)


2.数据库的删除

mysql> drop database vfast;
Query OK, 0 rows affected (0.00 sec)

3.进入某个库

mysql> use vfast;


4.查看数据库

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| today |
+--------------------+
3 rows in set (0.00 sec)




########create table order
库 -----表 ----列 ---记录 ----数据

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mysql表管理
1.查看表
2.建表
3.修改表
4.删除表

1.查看表
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;


2.建表
mysql> create table rhce (id int);


3.修改表
mysql> alter table rhce rename cbd; 修改表名
mysql> alter table cbd add sex enum('Y','N'); 增加字段 sex
mysql> alter table cbd drop id; 删除字段 id
mysql> alter table cbd modify name char(16); 修改字段name的类型char(16)
or
mysql> alter table vfast_user change name name enum('B','G');

mysql> alter table cbd change name mingzi char(26); 改变列名name为mingzi 类型为char(26)



########
show warnings \G; 显示mysql警告
show create table cbd;

显示表cbd的创建过程
desc cbd; 显示cbd表的所有字段

#######
不为空的字段 not null
指定引擎 engine=innodb
字符集 charset=utf8
如果字段未输入值 则插入默认在 default example (id int default 0)

mysql> create table user ( ID int(5) not null, NAME char(20)) engine=innodb charset=utf8;


4.删除表
mysql> drop table cbd;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mysql数据管理(增删改查)

1.查看数据
2.插入数据
3.更新数据
4.删除数据

语句格式
insert into [num$1,num$2...] [table name] values(....);
select [num$1,num$2] from [table name] where [case ]
update [table name] set



1.查看数据

mysql> select * from xt701;

2.插入数据

mysql> insert into xt701 (name,ID,yuwen) values('lin',1007,99);
or
mysql> insert into xt701 values('zhang',1001,80,70,90),('li',1002,90,98,19),('zhao',1003,68,67,90);
select name,id from xt701 where shuxue>=80;

注意:同时插入多条记录比单条插入执行起来更快些!!



数据类型
char 字符串 空间预先分配
varchar 字符串(空间占用更合理,每次存取数据都用CPU计算,所以更耗CPU) 空间后分配
int 整形 一个整数,支持 -2147493648到2147493647
bigint 大数据整形 一个大整数,支持 -9223372036854775808到9223372036854775807
float 浮点型(小数点) 一个小的菜单精度浮点数。支持 -3.402823466E+38到-1.175494351E-38
date 年月日
time 时分秒
datetime 存储年月日时分秒
blob 存储二进制
text 存储文本
enum 单选
set 多选
timestamp 自动插入当天前时间 default current_timestamp


############批量从文件中添加的方法


向表中导入数据
awk -F: '{print $1 ',' $3 ',' $4 ',' $NF}' /etc/passwd > /tmp/user

load data infile '/tmp/user' into table students fields terminated by ',';

如果要导入的数据有多列,但是默认情况下mysql认为列与列的分隔式用空白,如果不是空白如‘,’即就要加上fields terminated by '*' *代表分隔符



EXAMPLES 导入/etc/passwd文件
###建库
mysql> create table H2 ( NAME char(15), PASSWORD char(50), UID int(5), GID int(5), MIAOSHU varchar(100), HOME varchar(100), SHELL varchar(100));

###导入
mysql> load data infile '/etc/passwd' into table H2 fields terminated by ':';


############ 从表中导出数据

从表中导出数据
select * from students into outfile '/tmp/sss.sql'; or
select * from students into outfile '/tmp/sss.sql' fields terminated by ',';
需要注意的是目标文件目录(/tmp)一定要有mysql用户写权限,该文件sss.sql一定不存在



#########自动插入当前时间








3.更新数据

mysql> update xt701 set shuxue=80 whe

re id=1007 and shuxue is NULL;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from xt701;
+-------+------+-------+--------+--------+
| name | ID | yuwen | shuxue | yingyu |
+-------+------+-------+--------+--------+
| zhang | 1001 | 80 | 70 | 90 |
| li | 1002 | 90 | 98 | 19 |
| zhao | 1003 | 68 | 67 | 90 |
| wang | 1004 | 90 | 70 | 90 |
| qian | 1005 | 88 | 79 | 45 |
| sun | 1006 | 98 | 89 | 75 |
| lin | 1007 | 88 | 99 | 55 |
| lin | 1007 | 99 | 80 | NULL |
+-------+------+-------+--------+--------+
8 rows in set (0.00 sec)





4.删除数据

truncate 删除所有数据 (打碎表后重建新表) 删除速度快于delete
delete 逐行删除数据
mysql> delete from xt701;
mysql> truncate xt701;
mysql> delete from xt701 where yingyu=80;




mysql> select * from xt701;
+-------+------+-------+--------+--------+------+
| name | ID | yuwen | shuxue | yingyu | abc |
+-------+------+-------+--------+--------+------+
| zhang | 1001 | 80 | 70 | 90 | 2 |
| li | 1002 | 90 | 98 | 19 | 1 |
| zhao | 1003 | 68 | 67 | 90 | 2 |
| wang | 1004 | 90 | 70 | 90 | 1 |
| qian | 1005 | 88 | 79 | 45 | 2 |
| sun | 1006 | 98 | 89 | 75 | 1 |
| lin | 1007 | 88 | 99 | 55 | 2 |
| lin | 1007 | 99 | 80 | NULL | 2 |
+-------+------+-------+--------+--------+------+
8 rows in set (0.00 sec)



mysql> delete from xt701 where yingyu is NULL;
Query OK, 1 row affected (0.00 sec)

mysql> select * from xt701;
+-------+------+-------+--------+--------+------+
| name | ID | yuwen | shuxue | yingyu | abc |
+-------+------+-------+--------+--------+------+
| zhang | 1001 | 80 | 70 | 90 | 2 |
| li | 1002 | 90 | 98 | 19 | 1 |
| zhao | 1003 | 68 | 67 | 90 | 2 |
| wang | 1004 | 90 | 70 | 90 | 1 |
| qian | 1005 | 88 | 79 | 45 | 2 |
| sun | 1006 | 98 | 89 | 75 | 1 |
| lin | 1007 | 88 | 99 | 55 | 2 |
+-------+------+-------+--------+--------+------+
7 rows in set (0.00 sec)

mysql> select name,yuwen+shuxue+yingyu as zongfen from xt701;
+-------+---------+
| name | zongfen |
+-------+---------+
| zhang | 240 |
| li | 207 |
| zhao | 225 |
| wang | 250 |
| qian | 212 |
| sun | 262 |
| lin | 242 |
| lin | NULL |
+-------+---------+
8 rows in set (0.00 sec)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


mysql函数


sum 求和
max 取最大值
min 取最小值
avg 取平均值
count 统计

mysql> select count(*) from xt701;
mysql> select sum(yuwen) from xt701;
mysql> select avg(yuwen) from xt701;
or
mysql> select sum(yuwen)/co

unt(*) from H3; 如果有人没考试 成绩为NULL时。



mysql> select min(yuwen) from xt701;
mysql> select max(yuwen) from xt701;
mysql> select ifnull(yuwen,0) as yuwen from xt701; 假如字段为null则默认为0

数学运算

#算术运算符 + - * / > < `==` >= <= <>/!= bewteen
mysql> select 1+1;

mysql> select 1-1;

mysql> select 1*100;

mysql> select 1/100;


###注意 判断结果只有 “真“ 和”假“两种结果 真用数字 1代替 假用0代替
mysql> select 1>=2;

mysql> select 1>=0;




##逻辑运算符 与或非
mysql> select 1>=2 and 2>=1;

mysql> select 1>=0 and 2>=1;

mysql> select 1>=2 or 2>=1;

mysql> select not 1>=2;



分组 排序
mysql> select * from xt701 order by ID;
+-------+------+-------+--------+--------+
| name | ID | yuwen | shuxue | yingyu |
+-------+------+-------+--------+--------+
| zhang | 1001 | 80 | 70 | 90 |
| li | 1002 | 90 | 98 | 19 |
| zhao | 1003 | 68 | 67 | 90 |
| wang | 1004 | 90 | 70 | 90 |
| qian | 1005 | 88 | 79 | 45 |
| sun | 1006 | 98 | 89 | 75 |
+-------+------+-------+--------+--------+
6 rows in set (0.00 sec)

mysql> select * from xt701 order by yuwen;
+-------+------+-------+--------+--------+
| name | ID | yuwen | shuxue | yingyu |
+-------+------+-------+--------+--------+
| zhao | 1003 | 68 | 67 | 90 |
| zhang | 1001 | 80 | 70 | 90 |
| qian | 1005 | 88 | 79 | 45 |
| li | 1002 | 90 | 98 | 19 |
| wang | 1004 | 90 | 70 | 90 |
| sun | 1006 | 98 | 89 | 75 |
+-------+------+-------+--------+--------+
6 rows in set (0.00 sec)



降序排列
mysql> select * from xt701 order by yuwen desc;
+-------+------+-------+--------+--------+
| name | ID | yuwen | shuxue | yingyu |
+-------+------+-------+--------+--------+
| sun | 1006 | 98 | 89 | 75 |
| li | 1002 | 90 | 98 | 19 |
| wang | 1004 | 90 | 70 | 90 |
| qian | 1005 | 88 | 79 | 45 |
| zhang | 1001 | 80 | 70 | 90 |
| zhao | 1003 | 68 | 67 | 90 |
+-------+------+-------+--------+--------+
6 rows in set (0.00 sec)

mysql> select * from xt701 order by yuwen;
+-------+------+-------+--------+--------+
| name | ID | yuwen | shuxue | yingyu |
+-------+------+-------+--------+--------+
| zhao | 1003 | 68 | 67 | 90 |
| zhang | 1001 | 80 | 70 | 90 |
| qian | 1005 | 88 | 79 | 45 |
| li | 1002 | 90 | 98 | 19 |
| wang | 1004 | 90 | 70 | 90 |
| sun | 1006 | 98 | 89 | 75 |
+-------+------+-------+--------+--------+
6 rows in set (0.00 sec)


##找出前三名
mysql> select * from xt701 order by yuwen desc limit 3;
+------+------+-------+--------+--------+
| name | ID | yuwen | shuxue | yingyu |
+------+------+-------+--------+

--------+
| sun | 1006 | 98 | 89 | 75 |
| li | 1002 | 90 | 98 | 19 |
| wang | 1004 | 90 | 70 | 90 |
+------+------+-------+--------+--------+
3 rows in set (0.00 sec)



##按组排序
mysql> select * from xt701;
+-------+------+-------+--------+--------+------+
| name | ID | yuwen | shuxue | yingyu | abc |
+-------+------+-------+--------+--------+------+
| zhang | 1001 | 80 | 70 | 90 | 1 |
| li | 1002 | 90 | 98 | 19 | 1 |
| zhao | 1003 | 68 | 67 | 90 | 1 |
| wang | 1004 | 90 | 70 | 90 | 1 |
| qian | 1005 | 88 | 79 | 45 | 1 |
| sun | 1006 | 98 | 89 | 75 | 1 |
| lin | 1007 | 88 | 99 | 55 | 1 |
| lin | 1007 | 99 | 80 | NULL | 1 |
+-------+------+-------+--------+--------+------+
8 rows in set (0.00 sec)

mysql> update xt701 set abc=2 where id=1001 or id=1003 or id=1005 or id=1007;
Query OK, 5 rows affected (0.00 sec)
Rows matched: 5 Changed: 5 Warnings: 0
mysql> select * from xt701;
+-------+------+-------+--------+--------+------+
| name | ID | yuwen | shuxue | yingyu | abc |
+-------+------+-------+--------+--------+------+
| zhang | 1001 | 80 | 70 | 90 | 2 |
| li | 1002 | 90 | 98 | 19 | 1 |
| zhao | 1003 | 68 | 67 | 90 | 2 |
| wang | 1004 | 90 | 70 | 90 | 1 |
| qian | 1005 | 88 | 79 | 45 | 2 |
| sun | 1006 | 98 | 89 | 75 | 1 |
| lin | 1007 | 88 | 99 | 55 | 2 |
| lin | 1007 | 99 | 80 | NULL | 2 |
+-------+------+-------+--------+--------+------+
8 rows in set (0.00 sec)

mysql> select * from xt701 group by abc;
+-------+------+-------+--------+--------+------+
| name | ID | yuwen | shuxue | yingyu | abc |
+-------+------+-------+--------+--------+------+
| li | 1002 | 90 | 98 | 19 | 1 |
| zhang | 1001 | 80 | 70 | 90 | 2 |
+-------+------+-------+--------+--------+------+
2 rows in set (0.00 sec)

mysql> select count(*) from xt701 group by abc;
+----------+
| count(*) |
+----------+
| 3 |
| 5 |
+----------+
2 rows in set (0.00 sec)

mysql> select count(*) from xt701 group by abc having count(*)>4;
+----------+
| count(*) |
+----------+
| 5 |
+----------+
1 row in set (0.00 sec)


#注意 group by 不能和条件where共同使用,需要用having


##注意NULL值的检索办法
mysql> select * from xt701;
+-------+------+-------+--------+--------+
| name | ID | yuwen | shuxue | yingyu |
+-------+------+-------+--------+--------+
| zhang | 1001 | 80 | 70 | 90 |
| li | 1002 | 90 | 98 | 19 |
| zhao | 1003 | 68 | 67 | 90 |
| wang | 1004 | 90 | 70 | 90 |
| qian | 1005 | 88 | 79 | 45 |
| sun | 1006 | 98 | 89 | 75 |
| lin | 1007 | 88 | 99 |

55 |
| lin | 1007 | 99 | NULL | NULL |
+-------+------+-------+--------+--------+
8 rows in set (0.00 sec)

mysql> select * from xt701 where shuxue is NULL;
+------+------+-------+--------+--------+
| name | ID | yuwen | shuxue | yingyu |
+------+------+-------+--------+--------+
| lin | 1007 | 99 | NULL | NULL |
+------+------+-------+--------+--------+
1 row in set (0.00 sec)







~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

mysql> show variables like '%storage_engine%'; 查看默认引擎



指定表引擎
create table xt701 (ID int) engine=innodb;

mysql一共包含两种引擎:myisam and innodb
rhel5 之前系统自带的mysql engine is myisam
之后engine is innodb

两者不同:
innodb是事务型引擎,它是先记录日志在操作的。 保证了数据库的合理性,持久性,一致性。

日志存在/var/lib/mysql目录下,(ib_logfile0,ib_logfile1)这两个日志文件都很小,他们是采用循环结构存储日志的,只记录上一次的操作,下一个事务开始即覆盖上一个事务的日志。




#####Myisam和Innodb引擎区别


MyISAM是MySQL的默认存储引擎。MyISAM不支持事务、也不支持外键,但其访问速度快,对事务完整性没有要求。

InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是比起MyISAM存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。


事务
事务都应该具备ACID特征。所谓ACID是Atomic(原子性),Consistent(一致性),Isolated(隔离性),Durable(持续性)四个词的首字母所写,下面以“银行转帐”为例来分别说明一下它们的含义:

原子性:组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。换句话说,事务是不可分割的最小单元。比如:银行转帐过程中,必须同时从一个帐户减去转帐金额,并加到另一个帐户中,只改变一个帐户是不合理的。

一致性:在事务处理执行前后,数据库是一致的。也就是说,事务应该正确的转换系统状态。比如:银行转帐过程中,要么转帐金额从一个帐户转入另一个帐户,要么两个帐户都不变,没有其他的情况。

隔离性:一个事务处理对另一个事务处理没有影响。就是说任何事务都不可能看到一个处在不完整状态下的事务。比如说,银行转帐过程中,在转帐事务没有提交之前,另一个转帐事务只能处于等待状态。

持续性:事务处理的效果能够被永久保存下来。反过来说,事务应当能够承受所有的失败,包括服务器、进程、通信以及媒体失败等等。比如:银行转帐过程中,转帐后帐户的状态要能被保存下来。


假设你在ATM提款机上存钱,当你操作完

毕后,机器在写入数据库数据( 往你账户中写入你存的数额)的时候,机器宕机了。如果没事事务是不是就悲剧了。


MYSQL的事务处理主要有两种方法。
1、用begin,rollback,commit来实现
begin 开始一个事务
rollback 事务回滚
commit 事务确认


简单介绍事务回滚实例
mysql> create database vfast;
Query OK, 1 row affected (0.00 sec)

mysql> use vfast;
Database changed
mysql> create table test (a int) TYPE=INNODB;
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test value(3);
Query OK, 1 row affected (0.00 sec)

mysql> insert into test value(4);
Query OK, 1 row affected (0.00 sec)

mysql> select * from test;
+------+
| a |
+------+
| 3 |
| 4 |
+------+
2 rows in set (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.01 sec)

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test value(40);
Query OK, 1 row affected (0.00 sec)

mysql> insert into test value(41);
Query OK, 1 row affected (0.00 sec)

mysql> select * from test;
+------+
| a |
+------+
| 3 |
| 4 |
| 40 |
| 41 |
+------+
4 rows in set (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from test;
+------+
| a |
+------+
| 3 |
| 4 |
+------+
2 rows in set (0.00 sec)

mysql>


myisam 数据库中表文件 *.myd 存储表中数据 *.myi 存储表中索引 *.frm 存储表头数据 表结构

innodb *.frm 存储表头数据 ../ibdata1 存放数据 ib_logfile 日志文件



索引介绍




索引
索引的好处,查找数据快,但是占用磁盘容量大
text (myisam 支持,innodb暂时不能支持) 大文本索引




key 分类

unique (如果给字段定义了这个KEY,则该字段不能有重复数据,空值除外)
primary (定义了主键的字段不能为空)
foreign (定义了外键的字段可以将两个表联系起来)
text (myisam 支持,innodb暂时不能支持) 大文本索引


关于主外键

1.有外键约束的表必须是innodb引擎
2.插入数据的规则 先主键表后外键表
3.删除表 先删除外键表 后删除主键表




关于锁
Mysql 在执行每一个操作的时候都会先申请锁,申请到锁后才会执行操作,如果手动备份某个表的时候一定要先对该表手动加读锁,为了保持数据一致性,防止在备份的时候又在写东西,备份介绍在执行unlock命令解锁就行了。

如你在对一个表插入1000条数据的时候,用另一个终端更新其中一条,结果是发现更新会一直等待到第一个操作结束后再更新。


read 只读
lock

write 谁加的写锁,谁能读写,其他的不能读写





alter table xt701 add unique key (I

D);

lock table xt701 read;

unlock tables;

相关文档
相关文档 最新文档