MySql操作
字段命名规范: 表名_字段名 如: stud_id -------------------------------------- 用户管理: 1.登陆 mysql //登录默认用户root 没密码 mysql -uroot -p1234 mysql -h host_name -u user_name –ppassword mysql --user root --password --host localhost mysql -uroot -p1234 -h192.168.1.9; //登陆远程服务器 2.创建用户 命令: CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明:username - 你将创建的用户名, host - 指定该用户在哪个主机上可以登陆, 如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%. password - 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器. create user root identified by '1234'; insert into mysql.user(Host,User,Password) values("localhost","xt",password("1234")); mysql>flush privileges;//刷新系统权限表 这样就创建了一个名为:xt 密码为:1234 的用户。 3.受权 命令: GRANT privileges ON databasename.tablename TO 'username'@'host' 说明: privileges - 用户的操作权限,如SELECT , INSERT , UPDATE 等. 如果要授予所的权限则使用ALL.;databasename - 数据库名,tablename-表名, 如果要授予该用户对所有数据库和表的相应操作权限则可用*表示, 如*.* grant all privileges on stud.* to xt@localhost identified by '1234'; // xt本地用户受权为 all所有权限,操作 stud数据库的所有表 mysql>flush privileges;//刷新系统权限表 如果想指定部分权限给一用户,可以这样来写: mysql>grant select,update on stdu.* to xt@localhost identified by '1234'; //刷新系统权限表。 mysql>flush privileges; grant all on *.* to 'root'@'%' with grant option; //all所有权限, *.* 数据库名.表名 // '%'这里指这可以使用该用户访问的主机ip,'%'表为所有主机都可以用该帐号访问 4.设置与更改用户密码 命令: SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword'); 如果是当前登陆用户用: SET PASSWORD = PASSWORD("newpassword"); 例子: SET PASSWORD FOR 'xt'@'%' = PASSWORD("123456"); 更新用户密码 update user set password=password('1234'); //更新所有用户的密码为1234 //password('1234');表示对密码加密 //对密码的更新要重启服务才能生效 -- 5.修改密码 mysql>update mysql.user set password=password('新密码') where User="xt" and Host="localhost"; mysql>flush privileges; 6.删除名称为空的用户 delete from user where user=''; 7.删除用户 mysql>DELETE FROM user WHERE User="xt" and Host="localhost"; mysql>flush privileges; 或: drop user xt; //删除用户的数据库 mysql>drop database stud; 8.增加用户可以选程访问,mysql.user表: create user root identified by '1234'; --创建用户 root 密码1234 Grant all on *.* to 'root'@'%' with grant option; 授权'%'表示所有主机都可以使用该帐号登陆 9.撤销用户权限 命令: REVOKE privilege ON databasename.tablename FROM 'username'@'host'; 说明: privilege, databasename, tablename - 同授权部分. 例子: REVOKE SELECT ON *.* FROM 'xt'@'%'; 10.显示数据库所有变量设置 show variables; 11. 显示数据库所用的码表; show variables like 'char%'; 12. 设置编码 set character_set_client=UTF8; 13. 同时设置client,connection,database,results编码;(统一编码) set names utf8; 14.修改用户可登陆主机 (可阻止其他IP登陆) update user set host='192.168.1.3' where host='%'; ---------------------------------------------------------------------------- 备分数据库――》 mysqldump -u 用户名 -p 数据库名 > 文件名.sql 恢复数据库――》 Source 文件名.sql ----------------------------------------------------------------------------- 1.显示所有数据库 show databases; 2.创建数据库 create database xtk; create database xtk character set utf8;//创建支持中文编码的数据库 create database if not exists xtk; //如果xtk 不存在就创建; 3.选择使用数据库 use xtk; 4.创建表 create table stud( id int, name varchar(30), age int ); 5.显示默认数据库中所有表 show tables; 或: select * from tables ; select * from tables where table_schema='xt'; //查寻表中有那些字段 select * from columns where table_schema='xt' and table_name='stud'; 6.查寻表 select * from stud; Select * from user; //看一个某个表中的数据: Select 字段 from 表名; select host,user,password from user; SELECT * FROM users WHERE sex='1' AND (age>30 OR addr='NY'); SELECT * FROM users WHERE age IN(25,65,35,15);/*in就是或的关系*/ select * from test.text where id in(1,3,5) /*指找出ID为1 3 5的 not in()则相反 */ SELECT * FROM users WHERE age>=20 AND age<=30; - SELECT * FROM users WHERE age BETWEEN 20 AND 40;/*and且用的是大小就可以转成between*/ select * from test.text where id not between 1 and 4 /*指ID不在1-4里面的 出来 */ **子查询** 子查询是指在一个查询中包含别一个查询语句 ,在服务器解析带有子查询的语句时,会先执行子查询。再执行外部查询: 查询一下,年龄最大的人是哪一个人: SELECT * FROM users WHERE age=(SELECT MAX(age) FROM users); 查询一下,年龄最小的人是哪一个人: SELECT * FROM users WHERE age=(SELECT MIN(age) FROM users); /*没有车的人*/ SELECT DISTINCT users.name FROM users,car WHERE users.id NOT IN (SELECT car.userid FROM car); 7.插入记录 insert into stud values(1,'xtksfm',160); insert into stud(id,name) values(1,’jack’);// 指定列 insert into stud values(1,'xtksfm',160),(2,'sssm',110),(3,'xdddm',80); 8.放弃正在输入的命令 \c clear; 9.显示命令清单 \h help 10.退出mysql程序: \q exit 11.查看mysql服务器状态信息: \s 12.显示系统设置信息 show VARIABLES; 13.显示表结构 desc 表名; 14.删除表中数据 delete from 表名; delete from stud; delete from stud where id=1; /*删除指定的行 */ delete from stud where id>5; 也可以使用 TRUNCATE TABLE stud; //它与delete的区别是不记录操作日志,即无法恢复数据。 15.删除表 drop table 表名; drop table stud; 16.删除数库库 drop database 库名; 17.修改表结构 添加字段: alter table stud add column age int; //给stud添加例 age 删除字段: alter table stud drop column name; 在字段的上面添加一个新的字段。需要关键字 first : mysql > alter table passwd add id int(3) not null auto_increment primary key not null first ; 在指定的位置添加一个新的字段: mysql >alter table passwd add date year after id ; 默认添加在最后面: mysql >alter table passwd add QQ int(16) ; 删除表结构字段: mysql >alter table passwd drop date ; 修改字段类型: mysql >alter table passwd modify QQ int(11) not null ; 修改passwd表的QQ字段。 修改字段名: mysql> alter table passwd change QQ qq int(11) not null ; 修改QQ字段为qq,用到change关键字。 需要将权限类型写上,也可以更改类型。 18. 修改(设置)数据 update stud set age=90; //给stud表的所有age字段设置值; update stud set age=160 where name='ksfm'; //给stud表name='ksfm'的age字段设置值; update stud set name='Rose',id=22 where id=1; //同时修改两个值 在原值上面进行累加操作: Update product set price=price*1.1 -所有商品的价格上涨10% 19. 排序 排序:ORDER BY要出现在其他关键字的后面 /*DISTINCT 去除相同*/ /*ORDER BY 从小到大排序*/ SELECT DISTINCT age FROM stud ORDER BY age; //默认从小到大; SELECT DISTINCT age FROM stud ORDER BY age ASC; /*ORDER BY DESC从大到小排序*/ SELECT DISTINCT age FROM stud ORDER BY age DESC; 20. 自动增长主键 CREATE TABLE b( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(32) ); 21. 添加主键//person_pk为自定义主键名(用于索引) ALTER TABLE person ADD CONSTRAINT person_pk PRIMARY KEY (id); 22. 删除主键: alter table tablename drop primary key ; 23. 外键约束 create table car( id varchar(32) primary key, name varchar(30), price Numeric(10,2), pid varchar(32), CONSTRAINT car_fk foreign key(pid) references person(id) ); ALTER TABLE sb ADD CONSTRAINT sb_fk1 FOREIGN KEY(sb_studid) REFERENCES stud(stud_id); 24. 别名 xs.age 这种引用方式可以在子查询中使用,如果要在主查询中使用 ,就要用 别名.age的形式: SELECT aa.id,aa.name,aa.age FROM (SELECT * FROM stud) AS aa WHERE age>20; SELECT xx.id,xx.name,xx.age FROM stud AS xx; ----------------------------------------------------------------------------------- limit 限制 select *from stud limit 0,2; //大于0行的, 查询2行; ------------------------------------------------------------------------------------ where子句: 1. SELECT * FROM stud WHERE age>80; 2. /*使用between*/ 在两者之间 SELECT * FROM stud WHERE age BETWEEN 29 AND 44; 3. /*and or */ SELECT * FROM stud WHERE age>80 AND age<600; SELECT * FROM stud WHERE age=160 OR age=150; 4. /*用in来换掉or*/ 表示在之内的 SELECT * FROM stud WHERE age IN(5,55,15); 5. /*模糊查询like,%(任意匹配),_(匹配一个)*/ SELECT * FROM stud WHERE NAME LIKE '大__'; SELECT * FROM stud WHERE NAME LIKE '%o%' OR age=44; 6. /*查询没有设置年龄的人*/ SELECT * FROM stud WHERE age IS NULL; UPDATE stud SET age=100 WHERE age IS NULL; ----------------------------------------------------------------------------- view 视图 视图是保存在数据库中的选择查询,相当于从一个或多个数据表中派生出来的虚拟表。 它兼有查询和表的双重功能。 view 相当于一个查寻出来的虚拟表 /*创建一个view*/ CREATE VIEW ss AS SELECT * FROM stud WHERE age>9; 查寻view SELECT * FROM ss ; ------------------------------------------------------------------------------- 聚合函数: 1.Count计数――》 Count(*)行数量—不包含空行 null SELECT COUNT(*) FROM users; //计数并查寻出来 SELECT COUNT(1) FROM users; COUNT不会包含NULL的记录的行 SELECT COUNT(age) FROM users; /*使用count进行数量计算,使用as设置一个别名 使用*或是1是计算所有。 使用某个名,是指不包含null的列的数量 。 */ SELECT COUNT(*) AS num FROM stud; //AS num 别名 SELECT COUNT(age) FROM stud; 2.avg平均――》 /*计算age整型的平均值*/ SELECT AVG(age) FROM stud; /*计算age平均值ROUND取整*/ SELECT ROUND(AVG(age)) AS 平均值 FROM stud; 3.Max最大――》 SELECT MAX(age) FROM stud; SELECT NAME,MAX(age) FROM stud; /*查寻年龄最大的人的名子*/ SELECT * FROM stud WHERE age =(SELECT MAX(age) FROM stud); SELECT * FROM stud WHERE age in(SELECT MAX(age) FROM stud); 4.Min最小――》 /*选择年龄最小的那个人的名称*/ SELECT * FROM stud WHERE age=(SELECT MIN(age) FROM stud); 5.Sum求和――》 SELECT SUM(age) FROM stud; 6.Distinct――》去除相同的信息 /*查寻出age字段 不包含age相同的记录*/ SELECT DISTINCT age FROM stud; 排序:ORDER BY要出现在其他关键字的后面 /*ORDER BY 从小到大排序*/ SELECT DISTINCT age FROM stud ORDER BY age; //默认从小到大; SELECT DISTINCT age FROM stud ORDER BY age ASC; /*ORDER BY DESC从大到小排序*/ SELECT DISTINCT age FROM stud ORDER BY age DESC; 7.Exists存在判断――》 /*exists只判断是否存在*/ SELECT * FROM stud WHERE EXISTS (SELECT * FROM stud WHERE age=100); ------------------------------------------------------------------------- group by对数据进行分组: /*根据名称进行分组计算*/ /*查寻出name 和 age 两个字段 , 并根据name分组 ,所有name 相同的为一行记录 */ SELECT NAME,SUM(age) FROM stud GROUP BY NAME; /* sum(age)要想出现在 where 后那么必须 在前面查寻使用过sum(age)*/ /* 对分组后的数据要筛选不用where 而是having关键字 */ SELECT NAME,SUM(age) FROM stud GROUP BY NAME HAVING SUM(age)>20; -------------------------------------------------------------------------- Having: Having关键字的做用是对已经使用了聚合函数的查询再进行过虑: 如:根据角色ID计算数量,然后只选择数据大于4的记录: SELECT COUNT(*),func_role FROM func GROUP BY func_role HAVING COUNT(*) >4 --------------------------------------------------------------------------- 字符串处理函数: 1. Length(str) - 求字符串长度 2. TRIM(str) SELECT * FROM stud WHERE TRIM(NAME)='xt'; Ltrim(str) - 去掉左边的空格 Rtrim(str) - 去掉右边的空格 SELECT * FROM stud WHERE RTRIM(LTRIM(NAME))='AAA'; Left(str,len); - 从左边取出n个字符 SELECT LEFT(TRIM(NAME),2) FROM stud; Right(str,len); - 从右边取出n个字符 Substring(str,begin,end) -返回子串 Reverse(str) –返回颠倒的字符串 SELECT REVERSE(NAME) FROM stud; Lower(str) - 转成小写 Upper(str) - 转成大写 Concat(Str,str…..)串联字符串。 SELECT CONCAT(NAME,age,id) FROM stud; Instr(str,s) – 返回s在str中出面的位置,没有则返回0 SELECT NAME,INSTR(NAME,'o') FROM stud; ----------------------------------------------------------------------------- ** 数学相关函数** ABS (number2 ) 绝对值 BIN (decimal_number ) 十进制转二进制 CEILING (number2 ) 向上取整 CONV(number2,from_base,to_base) 进制转换 FLOOR (number2 ) 向下取整 FORMAT (number,decimal_places ) 保留小数位数 HEX (DecimalNumber ) 转十六进制 LEAST (number , number2? [,..]) 求最小值 MOD (numerator ,denominator ) 求余 RAND([seed]) RAND([seed]) ------------------------------------------------------------------------------ 关联查询和子查询: 当一个表的数据不能满足我们的需要时,我们就要从多个表中查询数据。 此时必须使用关联查询: inner join – 内关联,双方必须都要存在。 left join -左关联。以左边数据为准。 right join - 右关联。 /*查寻年龄相同的所有人*/ (已知有age 23 或 21的) select * from stud where age=23 or age=21; /*查寻年龄相同的所有人*/ (不知age都是什么值) //分析:根据年龄计数并分组,然后再筛选>=2的 select count(age),age from stud group by age having count(age)>=2; 1.无关子查询 /*无关子查询*/--->>是指子查询语句中不包含主语句中的表 select * from stud where age in( select age from stud group by age having count(age)>=2 ); 2.相关子查询 /*查寻年龄相同并且age>20的所有人*/ (不知age都是什么值) /*相关子查询*/--->>是指子查询语句中包含主语句中的表 SELECT * FROM stud AS xs WHERE age IN( SELECT age FROM stud WHERE xs.age>20 GROUP BY age HAVING COUNT(age)>=2 ); 3.注意: xs.age 这种引用方式可以在子查询中使用,如果要在主查询中使用 ,就要用 别名.age的形式: 例: SELECT aa.id,aa.name,aa.age FROM (SELECT * FROM stud) AS aa WHERE age>20; SELECT xx.id,xx.name,xx.age FROM stud AS xx; 4.关联查询join ---->>指有关联关系的表之间的查询 两个表之间有 一对多 ,多对多, 一对一 的关系: 那么两个表之间就有 : 关键字 join 相当于逻辑判断作用 /*内连接的连接查询结果集中仅包含满足条件的行*/ /*外连接的连接查询结果集中既包含那些满足条件的行,还包含其中某个表的全部行*/ inner join – 内关联,查询时两个表必须都要存在。 相于逻辑 AND -->>示例: users car |-id-主键 |-id-主键 |-name |-name |-sex |-price |-userid-外键 CREATE TABLE users( id VARCHAR(32) PRIMARY KEY, NAME VARCHAR(32), sex CHAR(1) ); CREATE TABLE car( id VARCHAR(32) PRIMARY KEY, NAME VARCHAR(32), price NUMERIC(10,2), userid VARCHAR(32) ); /*查询一个某人拥有什么车*/ SELECT users.name,car.name FROM users,car WHERE users.id=car.userid; /*查询一个某人拥有什么车 关联关系查询*/ SELECT users.name,car.name FROM users INNER JOIN car ON users.id=car.userid;//inner join 指两个表都必须相时存在 /*没有车的人*/ SELECT DISTINCT users.name FROM users,car WHERE users.id NOT IN (SELECT car.userid FROM car); /*没有车的人 用关联关系查询 left join -左关联。查询时以左边数据为准。*/ SELECT person.name,car.name FROM person LEFT JOIN car ON person.id=car.pid //只要左表存在就列出,右表不满足的列null WHERE car.name IS NULL /*查询xt有什么车*/ SELECT person.name,car.name FROM person,car WHERE person.id=car.pid AND person.name='xt'; SELECT car.name FROM car WHERE car.userid=(SELECT users.id FROM users WHERE users.name="xt"); /*查询有2车以上的人的ID*/ SELECT COUNT(pid),pid FROM car GROUP BY pid HAVING COUNT(pid)>=2; SELECT * FROM person WHERE id IN (SELECT pid FROM car GROUP BY pid HAVING COUNT(pid)>=2); right join - 右关联。 ------------------------------------------------------------------------------ 多对多 stud book -------------- ------------------ S001 xt B001 Java S002 yy B002 Oracle S003 YL B003 .Net 中间表 ------------------- 外键<--- StudID BookID--->外键 foreign key S001 B001 S001 B003 S003 B001 ________________ | 联合主键-->> 不同出现两个字段都一样的数据 primary key /*创建stud表*/ CREATE TABLE stud( stud_id VARCHAR(32) PRIMARY KEY, sdub_name VARCHAR(32) ); /*创建book表*/ CREATE TABLE book( book_id VARCHAR(32) PRIMARY KEY, book_name VARCHAR(32) ); /*创建sb中间表*/ CREATE TABLE sb( sb_studid VARCHAR(32) NOT NULL, sb_bookid VARCHAR(32) NOT NULL ); /*给中间表设置联合主键*/ ALTER TABLE sb ADD CONSTRAINT sb_pk PRIMARY KEY(sb_studid,sb_bookid); /*给中间表设置外键*/ ALTER TABLE sb ADD CONSTRAINT sb_fk1 FOREIGN KEY(sb_studid) REFERENCES stud(stud_id); /*给中间表设置外键*/ ALTER TABLE sb ADD CONSTRAINT sb_fk2 FOREIGN KEY(sb_bookid) REFERENCES book(book_id); /*查询所有人选择的所有书*/(SQL 92标准 联合查询) SELECT stud.sdub_name,book.book_name FROM stud,book,sb WHERE stud.stud_id=sb.sb_studid AND book.book_id=sb.sb_bookid; /*查询所有人选择的所有书*/(SQL 96标准使用join) SELECT stud.sdub_name,book.book_name FROM stud INNER JOIN sb ON stud.stud_id=sb.sb_studid INNER JOIN book ON sb.sb_bookid=book.book_id; /*查询所有没有选择书的人*/ SELECT stud.sdub_name,book.book_name FROM stud LEFT JOIN sb ON stud.stud_id=sb.sb_studid LEFT JOIN book ON sb.sb_bookid=book.book_id WHERE book.book_name IS NULL; /*查询没人先的书*/ SELECT stud.sdub_name,book.book_name FROM stud RIGHT JOIN sb ON stud.stud_id=sb.sb_studid RIGHT JOIN book ON sb.sb_bookid=book.book_id WHERE stud.sdub_name IS NULL; ------------------------------------------------------------------------------ 表约束操作: 1.主键约束 添加主键的两种方法: (1) /*创建表时定义约束*/ CREATE TABLE car( id INT PRIMARY KEY, NAME VARCHAR(30), NO INT ); (2) /*创建表后 再修改添加主键约束*/ 推荐使用第二种方法,因为可以指定主键名; CREATE TABLE person( id INT NOT NULL, //要加非空约束 NAME VARCHAR(32), age INT ); ALTER TABLE person ADD CONSTRAINT person_pk PRIMARY KEY (id); //person_pk为自定义主键名(用于索引) 2. 唯一约束 CREATE TABLE b( id INT UNIQUE, NAME VARCHAR(32) ); 3.创建自动增长的主键 注意:自动增长的主键,在有记录删除后主键id 出现断号,而且oracle不支持; CREATE TABLE b( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(32) ); 4.默认约束 例: sex字段的默认值为0 CREATE TABLE s2( id INT, sex CHAR(1) DEFAULT '0' ); INSERT INTO s2(id) VALUE(10); 5.外键约束 FOREIGN KEY create tabl person( id varchar(32) primary key, name varchar(30), sex char(1) ); create table car( id varchar(32) primary key, name varchar(30), price Numeric(10,2), pid varchar(32), CONSTRAINT car_fk foreign key(pid) references person(id) ); /*查询什么人有什么车*/ SELECT person.name,car.name FROM person,car WHERE person.id=car.pid; * 关系查询: /*查询什么人有什么车 用关联关系查询*/ SELECT person.name,car.name FROM person INNER JOIN car ON person.id=car.pid;//inner join 指两个表都必须相时存在 /*没有车的人*/ SELECT person.name,car.name FROM person LEFT JOIN car ON person.id=car.pid //只要左表存在就列出 WHERE car.name IS NULL //再条件 car.name是 NULL的 /*查询xt有什么车*/ SELECT person.name,car.name FROM person,car WHERE person.id=car.pid AND person.name='xt'; /*查询有2车以上的人的ID*/ SELECT COUNT(pid),pid FROM car GROUP BY pid HAVING COUNT(pid)>=2; SELECT * FROM person WHERE id IN (SELECT pid FROM car GROUP BY pid HAVING COUNT(pid)>=2); ------------------------------------------------------------------------------------- if 和 case 控制流程函数 1. if IF(expr1,expr2,expr3) //判断expr1如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL), 则 IF()的返回值为expr2; 否则返回值则为 expr3。 IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。 SELECT IF(1>2,2,3); 结果3 SELECT IF(1<2,'yes ','no'); 结果'yes' SELECT IF(STRCMP('test','test1'),'no','yes'); 结果'no' 2. ifnull IFNULL(expr1,expr2) //如果expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2; IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。 SELECT IFNULL(1,0); 结果1 SELECT IFNULL(NULL,10); 结果10 SELECT IFNULL(1/0,'yes'); 结果'yes' 3.NULLIF NULLIF(expr1,expr2) //如果expr1 = expr2 成立,那么返回值为NULL,否则返回值为 expr1。 这和CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END相同。 SELECT NULLIF(1,1); 结果NULL SELECT NULLIF(1,2); 结果1 4.CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END SELECT CASE 1 WHEN 1 THEN 'one' -> WHEN 2 THEN 'two' ELSE 'more' END; 结果'one' SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END; 结果'true' SELECT CASE BINARY 'B' -> WHEN 'a' THEN 1 WHEN 'b' THEN 2 END; 结果NULL create table ss( id int, sex char(1) default '0', birth varchar(19) ); INSERT INTO ss VALUES(10,'1','2011-09-08 09:23:27'); select id,(case sex when '0' then '女' else '男' end) as 性别,birth from ss; SELECT id,(CASE sex WHEN '0' THEN '女' WHEN sex='1' THEN '男' END) AS 性别,birth FROM ss; ------------------------------------------------------------------------------------------------------- 存储过程: 1. DELIMITER && //改变Mysql语句结束符 为"&&" carete procdure p2() BEGIN select * from lk; END&& DELIMITER ; //创建存储过程完成后,改回 ";" //调用 CALL p2(); 2. 声明变量 @为用户自定义变量 @@为系统变量 例:@abc select @abc; select @@character_set_database; ---------------------------------------------------------------------------------------------- 事物操作: 1.开启一个事物 start transaction; 2. 用户的一次操作(执行SQL语句) 3) 提交 commit; 或 撤销rollback; ------------------------------------ 隔离级别操作: 注意:隔离级别操作,影响的是在开启一个事物之内的操作; . 什么是脏读? 读取别人未提交的数据,未保存的数据就叫脏读; 隔离级别分为 四种级别: Transaction_read_uncommited=1 (读未提交)可读到别人未提交的数据 Transaction_read_commited = 2(读已经提交)只能读到别人已经提交的数据 Transaction_repeatable_read=4(可重复读-默认)永远读取的是自己已经读取到的数据。不受别的连接的影响。 Transaction_serializable =8(串行化-最高级别) 相当于同步(当A用户在操作,那么B用户只能处理等待状态; 1.查看隔离级别: select @@tx_isolation; 2.设置隔离级别:(在纪色的Mysql5.5以上) //设置为可读到别人未提交的数据; set session transaction isolation level read uncommitted; //设置为只能读到别人已经提交的数据; set session transaction isolation level read committed; //设置为串行化-最高级别 相当于同步; set session transaction isolation level serializable;