关于网站建设的案例分析,重庆横幅制作,个人资料库网站怎么做,湖北网站推广MySQL必知必会
commit 和 rollback 的差异是commit会提交#xff0c;而rollback不会#xff0c;就好像是撤回。
使用保留点#xff1a;
简单的rollback和commit语句就可以写入或者撤销整个事务处理#xff0c;但是#xff0c;只是对简单的事务处理才能这样做#xff0…MySQL必知必会
commit 和 rollback 的差异是commit会提交而rollback不会就好像是撤回。
使用保留点
简单的rollback和commit语句就可以写入或者撤销整个事务处理但是只是对简单的事务处理才能这样做更简单的事务处理可能需要部分提交或回退。
为了支持回退部分事务处理必须能在事务处理块中合适的位置放置占位符。这样如果需要回退可以退回到某个占位符。
这些占位符称为保留点为了创建占位符可以使用 语法 保留点在事务处理完成执行一条rollback或者commit后自动释放也可以用release savepoint明确地释放保留点。 如果需要回退
回退语法rollback to 保留点名称 更改默认的提交行为
MySQL默认行为是自动提交所有更改如果想要MySQL不自动提交更改需要使用以下语句。 设置回去是 字符集和校对顺序
MySQL需要适应不同的字符集不同的字母和字符适应不同的排序和检索数据的方法。
字符集为字母和符号的集合编码为某个字符集成员的内部表示校对为规定字符如何比较的指令。 校对的重要性在数据的排序时如果想要拿到自己想要的正确顺序就需要校对 给表指定字符集和校对 对列进行指定字符集和校对 如果需要用与创建表时不同的校对顺序排序特定的select语句 安全管理
访问控制
MySQL服务器的安全基础是用户应该对他们需要的数据具有适当的访问权。 使用访问权的情况 多数用户只需要对表进行读和写但是少数用户需要能创建表和删除表。某些用户需要读表但是不需要更新表允许用户添加数据但是不允许删除数据一些用户需要处理用户账号的权限但是多数用户不需要。让用户通过存储过程访问数据但是不能直接访问数据根据用户登录的地点限制对某些功能的访问。 MySQL的数据库的user表里面包含所有的用户账号。
创建用户账号 identified by 指定的口令为纯文本MySQL将保存到user表之前对其进行加密为了作为散列值指定口令使用identified by password。
使用grant或者insert grant语句也可以创建用户账户但是一般来说creat user是最清楚和最简单的句子。此外也可以通过插入行列到user表来增加用户但是为了安全起见不建议这样做。MySQL用来存储用户账号信息的表极为重要对它们的任何毁坏都可能严重地伤害到MySQL服务器。
重命名用户账户 rename user只在mysql5之后的版本支持。
删除用户账号 设置访问权限
创建用户账号后必须接着分配访问权限。新创建的用户账号没有访问权限。能登录MySQL不能看到数据不能执行任何数据库操作。
这是查看用户账号的权限目前还是看不懂 设置权限使用grant语句需要给出以下信息
要授予的权限被授予访问权限的数据库或者表用户名 每个grant添加或更新用户的一个权限MySQL读取所有的授权并根据它们确定权限。
grant 的反向操作是revoke 用来撤销特定的权限。
是revoke而不是remove grant和revoke可以在几个层次上控制访问权限
整个服务器grant all 和 revoke all整个数据库on database.* 特定的表使用on database.table 特定的列特定的存储过程具体的表 未来的授权在使用grant 和 revoke 用户账号必须存在 但是所涉及的对象没有这个要求这允许管理员在创建数据库和表之前设计和实现安全措施。但是这样做的副作用是当某个数据库或者表被删除时drop语句相关的权限依然起作用。
简化授权
可以通过累出各权限将多条grant语句串在一起 更改用户口令密码 书上说应该这样写但是一直没成功 在不指定用户名时set password更新当前登录用户的口令。
数据库维护
备份数据 解决方案 使用命令行实用程序MySQLdump转储所有数据库内容到某个外部文件在进行常规备份钱这个实用程序应该正确地备份转储文件。可用命令行实用程序MySQLhotcopy从一个数据库复制所有数据但是不是所有数据库引擎都支持这个实用程序。可以使用MySQL的backup table或者select into outfile 转储所有数据到某个外部文件这俩条语句都接受将要创建的系统文件名此系统文件必须不存在否则会出错。数据可以用restore table来复原。 进行数据库维护
检查表键是否正确 check table用来针对许多问题对表进行检查。在MyISAM表上还对索引进行检查。check table支持一系列的用于MyISAM表的方式。changed检查自最后一次检查以来改动过的表extended执行最彻底的检查fast只检查未正常关闭的表medium检查所有被删除的链接并进行键检验quick只进行快速扫描。 如果MyISAM表访问产生不正确和不一致的结果可能需要用repair table来修复相应的表。但是这条语句不应该多次使用经常使用可能会有更大的问题要解决。
如果从一个表中删除大量数据应该使用optimize table来收回所用的空间从而优化表的性能。
改善性能
查看当前设置可以使用show variables 和show statusMySQL是一个多用户多线程的DBMS它经常同时执行多个任务如果这些任务中的某一个执行缓慢则所有请求都会执行缓慢。如果遇到这样的情况可以使用show processlist显示所有活动进程以及它们的线程ID和执行时间可以用kill命令终结某个特定的进程但是需要作为管理员登录使用explain语句让MySQL解释它将如何执行一条select语句 一般来说存储过程执行得比一天一天地执行其中各条MySQL语句快。在导入数据时应该关闭自动提交如果要删除索引包括fulltext索引应该在导入完成后再重建它们。使用union语句比一系列复杂得or条件要好的多。索引改善数据检索得性能但是损害数据插入、删除和更新的性能。如果你的表只是要收集数据则在有必要之前不要索引它们。like很慢最好使用fulltext而不是like
题解
第三次题组 [Cloned] - Virtual Judge (vjudge.net)
1.这道题其实就是需要求出 a^c1c2*b 是否存在这个c2让剩下的数字整除a
2.但是a1的时候需要特判一下
#includestdio.h
int slove(long long n,long long a,long long b)
{if(a1){if((n-1)%b0) return 1;else return 0;}long long num1;int flag0;while(numn){if((n-num)%b0){flag1;break;}num*a;}return flag;
}
int main()
{//倍数、加起来相等long long t,i,j,n,a,b;scanf(%lld,t);for(i0;it;i){scanf(%lld%lld%lld,n,a,b);if(slove(n,a,b)1){puts(Yes);}else puts(No);}return 0;
}
第三次题组 [Cloned] - Virtual Judge (vjudge.net)
1.这一题是算出区间每次贪心取一个区间保留下来然后对比顾客的适宜温度。
2最高值的区间需要取到当前和之前的最小后面好变化一点。最低值相反。
#includestdio.h
#define Maxsize 510
int t[Maxsize],l[Maxsize],h[Maxsize];
int q,n,m;
int MAX(int a,int b)
{if(ab) return a;return b;
}
int MIN(int a,int b)
{if(ab) return a;return b;
}
int slove()
{int i,j,pret0,prelm,prehm;int maxt,mint;for(i1;in;i){maxtpreh(t[i]-pret);mintprel-(t[i]-pret);if(l[i]maxt||h[i]mint) return 0;prett[i];prelMAX(mint,l[i]);prehMIN(maxt,h[i]);}return 1;
}
int main()
{int i,j;scanf(%d,q);for(i0;iq;i){scanf(%d%d,n,m);for(j1;jn;j){scanf(%d%d%d,t[j],l[j],h[j]);}if(slove()) puts(YES);else puts(NO);}
}
第三次题组 [Cloned] - Virtual Judge (vjudge.net)
1.这道题目很简单就是求出对于长宽多出来也不要少的a的倍数相乘即可。 #includestdio.h
int main()
{long long n,m,a,res,i,j;scanf(%lld%lld%lld,n,m,a);in/a;if(n%a!0) i1;jm/a;if(m%a!0) j1;resi*j;printf(%lld\n,res);return 0;
}
第三次题组 [Cloned] - Virtual Judge (vjudge.net)
1.这道题其实是在求 n 到 1的区间内最多有几个 数字既要被n整除又要能把前面整除
2.只要从1开始往后找最小的一个倍数能够满足上面的条件即可。
#includestdio.h
#define Maxsize 1000010
int a[Maxsize];
int main()
{//找公因子int n,num1,j0,cur,k0;scanf(%d,n);while(numn){curnum;a[k]num;for(j2;j*curn;j){if(n%(j*cur)0((j*cur)%a[k-1]0)){break;}}if(j*curn) numj*cur;else break;}printf(%d ,n);for(jk-1;j0;j--){printf(%d ,a[j]);}
}
第三次题组 [Cloned] - Virtual Judge (vjudge.net)
1. 暴力即可
#includestdio.h
#define Maxsize 100010
int a[Maxsize];
int main()
{long long n,i,j,sum10,sum20;scanf(%lld,n);for(i0;in;i){scanf(%d,a[i]);}for(i0,jn-1;ijinj0;){if(sum1sum2){sum2a[j];j--;}else if(sum2sum1){sum1a[i];i;}else {sum1a[i];sum2a[j];i;j--;}}if(ijsum1sum2){i;}else if(ijsum1sum2){i;}printf(%lld %lld\n,i,n-i);return 0;
}
第三次题组 [Cloned] - Virtual Judge (vjudge.net)
1.这个题目搞了很久才懂得题目意思是因为没有认真看
2.题目很简单就是说给出的直线必须满足是俩条平行于x轴和y轴的直线不算是直线是线段线段的端点必须要被俩条直线都包含是包含更严格一点是端点必须在这些坐标中出现俩次。下面这样就不算必须规规矩矩是一个矩形。 #includestdio.h
typedef struct node
{int x1,y1,x2,y2;
}NODE;
int main()
{int i,j,m0,n0,f0,k0;int a[8][2]{0},count[8]{0};NODE p[4];for(i0;i4;i){scanf(%d%d%d%d,p[i].x1,p[i].y1,p[i].x2,p[i].y2);if(p[i].x1p[i].x2p[i].y1p[i].y2) f1;else if(p[i].x1p[i].x2){m;//与y轴平行}else if(p[i].y1p[i].y2){n;//与x轴平行}else f1;for(j0;jk;j){if(p[i].x1a[j][0]p[i].y1a[j][1]) {count[j];break;}}if(jk) {a[j][0]p[i].x1;a[j][1]p[i].y1;count[j];k;}for(j0;jk;j){if(p[i].x2a[j][0]p[i].y2a[j][1]) {count[j];break;}}if(jk) {a[j][0]p[i].x2;a[j][1]p[i].y2;count[j];k;}}if(f||k!4) {puts(NO);return 0;}if(m!2n!2){puts(NO);return 0;}for(i0;i4;i){if(count[i]!2){puts(NO);return 0;}}puts(YES);return 0;
}
第三次题组 [Cloned] - Virtual Judge (vjudge.net)
1.这是求负数在m内个数字能取得最大的和
2.排序计算即可。
#includestdio.h
#includealgorithm
#define Maxsize 110using namespace std;int main()
{int n,m,i,x,j0,res0;int a[Maxsize];scanf(%d%d,n,m);//n是电视的数量m是bob能拿的数量for(i0;in;i){scanf(%d,a[i]);}sort(a,an);for(i0;im;i)if(a[i]0){res-a[i];}printf(%d\n,res);return 0;
}
第三次题组 [Cloned] - Virtual Judge (vjudge.net)
1.这道题也是排序然后看对应b的数组是不是递增的就行
#includestdio.h
#includealgorithm
#define Maxsize 100010using namespace std;typedef struct node
{int a,b;
}NODE;
bool cmp(NODE x,NODE y)
{if(x.ay.a) return true;return false;
}
int main()
{int n,i;NODE p[Maxsize];scanf(%d,n);for(i0;in;i){scanf(%d%d,p[i].a,p[i].b);}sort(p,pn,cmp);//找到一对根据价格排序吧
// for(i0;in;i)
// {
// printf(%d ,p[i].a);
// }
// puts();
// for(i0;in;i)
// {
// printf(%d ,p[i].b);
// }for(i1;in;i){if(p[i].bp[i-1].b){puts(Happy Alex);return 0;}}puts(Poor Alex);return 0;
}
第三次题组 [Cloned] - Virtual Judge (vjudge.net)
1.注意这道题说的是至少有几个说谎的人而不是一定有几个人。
2.所有我们计数再计算和判断减去这些说真话剩下就是说谎话的。
#includestdio.h
#define Maxsize 110
int main()
{int t,n,i,j,k;int a[Maxsize];scanf(%d,t);while(t--){int flag-1;int count[Maxsize]{0};scanf(%d,n);for(i0;in;i){scanf(%d,a[i]);count[a[i]];}//i个人说有a[i]个骗子判断他是不是骗子//说真话的说的是重复的数字除去说真话的说的个数//其他人的个数是说谎话的人for(i0,k0;in;i){//当前的kcount[i];if(in-k) flagi; }printf(%d\n,flag);}return 0;
}