Grant insert into update,delete,update on table SC,S,C to User1

[切换科目]
以下试题来自:
单项选择题“学生―选课―课程”数据库中的三个关系:
S(S#, SNAME, SEX, AGE)
SC(S#, C#, GRADE)
C(C#, CNAME, TEACHER)
它们的主码分别是S#, (S#, C#), C#。如果成功执行SQL语句:
GRANT INSERT ON TABLE S TO USER1 WITH GRANT OPTION;
则用户USER1A.只拥有了对表S的INSERT权限B.只可以转授INSERT权限给其他用户C.不仅拥有了对表S的INSERT权限,还可以转授此权限给其他用户D.可以将任何权限转授给其他用户
为您推荐的考试题库
你可能感兴趣的试题
1A.结点WB.结点XC.结点YD.结点S2.填空题 参考答案[*]tu/1212/j/dj/3s77.jpg3.填空题 参考答案地址4A.交(∩)和选择(σ)操作B.选择(σ)和投影(π)操作C.并(∪)和投影(π)操作D.选择(σ)和笛卡儿积(×)操作5.填空题 参考答案协议
热门相关试卷
最新相关试卷SQL学习以及面试经典题目
&一、MySQL基本操作:
1、启动mysql,有如下方法:
方法一:使用winmysqladmin
1)、进入d::\mysql\bin&目录,运行winmysqladmin.exe,在屏幕右下角的任务栏内会有一个带红色的图符。
2)、鼠标左键点击该图符,选择“show&me”,出现“WinMySQLAdmin”操作界面;首次运行时会中间会出现一个对话框需求输入并设置你的用户名和口令。
3)、选择“My.INI&setup”
4)、在“mysqld&file”中选择“mysqld-opt”(win9x)或“mysqld-nt”(winNT)
5)、选择“Pick-up&or&Edit&my.ini&values”能在右边窗口内对你的my.ini&文件进行编辑
6)、选择“Save&Modification”保存你的my.ini&文件
7)、如果你想快速使用winmysqladmin(开机时自动运行),选择“Create&ShortCut&on&Start
8)、测试:进入DOS&界面;在d:\mysql\bin&目录下运行mysql,进入mysql&交互操作界面,输入show&databases&并回车,屏幕显示出当前已有的两个数据库mysql&和test
方法二:不使用winmysqladmin
1)、在DOS&窗口下,进入d:/mysql/bin&目录
2)、win9X&下)运行:mysqld
在NT&下运行:mysqld-nt&--standalone
3)、此后,mysql&在后台运行
4)、测试mysql:(在d:/mysql/bin&目录下)
a)、mysqlshow正常时显示已有的两个数据库mysql&和test
b)、mysqlshow&-u&root&mysql正常时显示数据库mysql&里的五个表:columns_priv、db、host、tables_priv、user
c)、mysqladmin&version&status&proc显示版本号、状态、进程信息等
d)、mysql&test进入mysql&操作界面,当前数据库为test
5)、mysql&关闭方法:mysqladmin&-u&root&shutdown
2、进入mysql&交互操作界面
在DOS&方式下,运行:d:mysqlbinmysql
出现:mysql的提示符,此时已进入mysql&的交互操作方式。
如果出现&"ERROR&2003:&Can’t&connect&to&MySQL&server&on&’localhost’&(10061)“,
说明你的MySQL&还没有启动。
3、退出MySQL&操作界面
在mysql&提示符下输入quit&能随时退出交互操作界面:
Generated&by&Foxit&PDF&Creator&&&Foxit&Software
&For&evaluation&only.
mysql&&quit
也可以用control-D&退出。
4、MySQL命令
1)mysql&&h192.168.4.28&-uroot&&ppassword
其中,h:当连接MySQL服务器不在同台主机时,填写主机名或IP地址;u:登录MySQL的用户名;p:登录MySQL的密码
注意:密码如果写在命令行的时候一定不能有空格。如果使用的系统为linux并且登陆用户名字与MySQL的用户名相同即可不用输入用户名密码,linux默认是以root登陆,windows默认用户是ODBC
2)更改密码:在MySql安装目录,mysql\bin下输入如下命令:Mysqladmin&&uroot&&p旧密码&password&新密码
注意:结尾无分号
3)新建用户:
Grant&&操作权限&(select,insert,update,delete或者all)&on&数据库名.*&to&用户名@访问地址&identified&by&“密码”;
Flush&&4)删除用户:
Delete&from&user&where&user=“test2”&and&host=“localhost”;
或Drop&USER&用户名;
区别:drop&user&用户名;作用:删除已经存在的用户,例如要删除yan这个用户,(drop&user&)默认删除的是yan@"%"这个用户,如果还有其他用户,例如yan@"localhost",yan@"ip",则不会一起被删除。如果只存在一个用户yan@"localhost",使用语句(drop&user&)会报错,应该用(drop&user&yan@"localhost";)如果不能确定(用户名@机器名)中的机器名,可以在mysql中的user表中进行查找,user列对应的是用户名,host列对应的是机器名。delete也是删除用户的方法,例如要删除yan@"localhost"用户,则delete&from&user&where&user="yan"&and&host="localhost";
5)修改指定用户名密码:
Update&mysql.user&set&password=password(‘新密码‘)&where&user=“test2”&and&host=“localhost”;
6)常用的其他命令
选定默认数据库:use&
显示所有数据库:show&
显示默认数据库中所有表:show&
放弃正在输入的命令:\c
显示命令清单:\h
退出mysql程序:\q
查看MySQL服务器状态信息:\s
7)mysqladmin命令:完成许多系统管理任务,如创建或删除一个数据库、修改密码等。格式:mysqladmin&[option]&admincommand
创建数据库mysqladmin&&u&root&&p&create&newdb
删除数据库mysqladmin&&u&root&&p&drop&newdb
更改密码mysqladmin&&u&root&&p&password&“newpasswd”
8)mysqldump命令:用于为数据库创建备份。
格式:mysqldump&[option]&dbname&&&bak.sql
&&&mysqldump&&u&root&&p&tmpdb&&&backuptmp.sql
备份出来的是一个文本文件,默认为utf-8字符集,如果想使用另外一种字符集,必须使用
&--default-character-set=gbk选项来设置
9)处理存放在文件里的SQL命令
格式:mysql&[option]&dbname&&&file.sql
mysql&&u&root&&p&--default-character-set=latin1&dbname&&&backup.sql
注:latin1是MySQL4.0的默认字符集或者utf-8是MySQL5.0的默认字符集,如果不知道使用什么字符集的时候,可以选用这两个其中一个
二、数据库基础知识
1、数据库概念
2、数据的完整性包含数据的正确性和数据的准确性。它是应防止中存在不符合语义规定的数据和防止因的输入输出造成无效操作或错误信息而提出的。数据完整性分为:1)实体完整性,约束方法:唯一约束、主键约束、标识列;2)字段完整性,约束方法:限制数据类型、检查约束、外键约束、默认值、非空约束;3)引用完整性,约束方法:外键约束;4)自定义完整性,约束方法:规则、存储过程、触发器。
3、SQL是Structured&Query&Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。SQL语法组成:
1)DML(&Data&Manipulation&Language数据操作语言)
——查询、插入、删除和修改数据库中的数据;
——SELECT、INSERT、&UPDATE&、DELETE等;
2)DCL(&Data&Control&Language数据控制语言)
——用来控制存取许可、存取权限等;
——GRANT、REVOKE&等;
3)DDL(&Data&Definition&Language数据定义语言)
——用来建立数据库、数据库对象和定义其列
——CREATE&TABLE&、DROP&TABLE、ALTER&TABLE&等
4)功能函数
——日期函数、数学函数、字符函数、系统函数等
4、MySQL数据类型:
&&&1)数据类型种类:a)数值型分为整型、浮点型和字符串;b)日期和时间;c)NULL;
&&&2)数值列类型:列类型是一种手段,通过这种手段描述表的列可以包含什么样类型的值。
图&数值列类型
图&数值列类型的存储需求
如:INT(4)意思是指定了一个具有4个字符显示宽度的INT列。如果定义了一个没有明确宽度的整数列,则会分配缺省的宽度,缺省值为每种类型的最长值的长度。
数值列类型的完整性约束:1)AUTO_INCREMENT自动标识列,在需要产生唯一标志符号或者顺序值时候,可用此属性。值一般从1开始,每行增加1,在插入NULL到一个AUTO_INCREMENT列时,MySQL会插入一个比该列中当前最大值大1&的值,一个表中最多能有一个有此属性的列。对于想使用此属性的列应该定义为NOT&NULL,并定义为PRIMARY&KEY&或者定义为UNIQUE键。2)UNSIGNED无符号,此属性禁用负值,将数值的取值范围从零开始。3)默认为NULL,即插入值时没有在此字段插入值时自动填NULL,如果指定了NOT&NULL,则必须在插入值时在此字段添入值,不允许插入NULL值。4)DEFAULT可以通过此属性来指定一个缺省值,即如果没有在此列添加值,那么默认添加DEFAULT后指定值。5)ZEROFILL前导零填充数值类型值以达到列的显示宽度。
&&&3)字符串列类型
图&字符串列类型1
图&字符串列类型2
注意1:CHAR类型和VARCHAR类型长度范围都是0~255之间的大小。他们之间的差别在于MySQL处理存储的方式:CHAR把这个大小视为值的准确大小(用空格填补比较短的值)。VARCHAR类型把它视为最大值并且只使用了存储字符串实际上需要的字节数(增加了一个额外的字节记录长度)。因而,较短的值当被插入一个语句为VARCHAR类型的字段时,将不会用空格填补(然而,较长的值仍然被截短&)。
注意2:BLOB是二进制大对象,如果想存储二进制数BLOB将是最佳选择,而TEXT与之相同,只是BLOB按照二进制编码排序(区分大小写),TEXT按照字符文本模式排序(不区分大小写)。
注意3:ENUM&和SET类型是特殊的串类型,其列值必须从固定的串集中选择,二者差别为前者必须是只能选择其中的一个值,而后者可以多选。(不推荐使用)
&&&&字符串列类型的可选属性:1)BINARY使用此属性可以使列值作为二进制串处理,即看成BLOB类型;2)NULL&和NOT&NULL;3)DEFAULT。
&&&4)日期和时间列类型
图&&日期和时间列类型
图&&日期和时间列类型
图&&日期和时间列类型存储需求
5、数据库操作
1)创建数据库&&语法:create&&database&&&数据库名
例:建立一个student库。
&mysql&&create&database&
2)还原一个数据库:
mysql&-h&localhost&-u&root&-p123456&数据库名&数据库所在路径(c:\数据库名.sql)
3)备份一个数据库:
mysqldump&-h&localhost&-u&root&-p123456&数据库名&&数据库所在路径(d:\数据库.sql)
备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。mysqldump&-&add-drop-table&-u&username&-p&password&databasename&&&backupfile.sql
4)直接将MySQL数据库压缩备份
mysqldump&-h&hostname&-u&username&-p&password&databasename&|&gzip&&&backupfile.sql.gz
5)备份MySQL数据库某个(些)表
mysqldump&-h&hostname&-u&username&-p&password&databasename&specific_table1&specific_table2&&&backupfile.sql
6)同时备份多个MySQL数据库
mysqldump&-h&hostname&-u&username&-p&password&&databases&databasename1&databasename2&databasename3&&&multibackupfile.sql
7)仅仅备份数据库结构
mysqldump&&no-data&&databases&databasename1&databasename2&databasename3&&&structurebackupfile.sql
8)备份服务器上所有数据库
mysqldump&&all-databases&&&allbackupfile.sql
9)还原MySQL数据库的命令
mysql&-h&hostname&-u&username&-p&password&databasename&&&backupfile.sql
10)还原压缩的MySQL数据库
gunzip&&&backupfile.sql.gz&|&mysql&-u&username&-p&password&databasename
11)将数据库转移到新服务器
mysqldump&-u&username&-p&password&databasename&|&mysql&&host=*.*.*.*&-C&databasename
6)数据表操作
建立表操作:
语法:create&table&表名(
列名1&&列类型&&[&列的完整性约束&],
列名2&&列类型&&[&列的完整性约束&],&
&&&&&&&&……&&);
如建立一个表school,其由两列组成,第一列属性为非空,并做为主键,并自增
create&table&school(
&&school_id&&int(10)&not&null&auto_increment&primary&key,
&&school_name&varchar(20)&&&&&
*&*&*&*&*&常见完整性约束&*&*&*&*&*&
PRIMARY&&KEY&&&&&主码约束(主键)
UNIQUE&&唯一性约束
NOT&&NULL&&非空值约束&&&
AUTO_INCREMENT&用于整数列默认自增1
UNSIGNED&&&&无符号整数
DEFAULT&default_value&默认值约束
DEFAULT&cur_timestamp&创建新记录时默认保存当前时间(仅适用timestamp数据列)
ON&UPDATE&cur_timestamp&修改记录时默认保存当前时间(仅适用timestamp数据列)
CHARACTER&SET&name&指定字符集(仅适用字符串)
*&*&*&*&*&数据表类型&*&*&*&*&*&
在创建一个新的MySQL数据表时,可以为它设置一个类型,其中最重要的3种类型:
MyISAM:成熟、稳定和易于管理
InnoDB:加入事物、数据行级锁定机制、外键约束条件、崩溃恢复等新功能
HEAP:只存在于内存中,可做临时表
*&*&*&*&*&数据表之间的关联/引用关系是依靠具体的主键(primary&key)和外键(foreign&key)建立起来的。*&*&*&*&*
主表与从表的关系:
1、当主表中没有对应的记录时,不能将记录添加到子表
2、不能更改主表中的值而导致子表中的记录孤立
3、子表存在与主表对应的记录,不能从主表中删除该行
4、删除主表前,先删子表
7、显示表结构操作
语法:describe&&表名;或desc&&&&表名;
删除表操作
语法:drop&&table&&[if&exists]&&tab_name&[,tab_name]...
叙述:从数据库中删除给定的表。如果给出if&exists&子句,则删除不存在的表不会出错。
删除数据库操作
语法:drop&&database&[if&exists]&db_name
叙述:删除给定的数据库。在删除一个数据库后,它就永远没有了,因此要特别小心。如果给出if&exists&子句,则删除不存在的数据库不会出错。
9、更改表结构操作
语法:alter&table&表名&&
action&可以是如下语句:
1)add&列名&建表语句&[first&|&after&列名]&&可以为表添加一列,如果没指定first或者after,则在列尾添加一列,否则在指定列添加新列
2)add&primary&key&(列名)&&为表添加一个主键,如果主键已经存在,则出现错误
3)add&foreign&key(列名)&references&表名(列名)&&为表添加一个外键
4)alter&列名&set&default&默认值&&可以更改指定列默认值
常用到的命令:
1)change&旧列名&新列名&&建表语句&&[first&|&after&列名]&&&可以更改列类型和列名称,如果原列的名字和新列的名字相同
2)modify&列名&&建表语句&&[first&|&after&列名]&&和change的作用相同
3)drop&列名&&&&&//可以删除一列
4)drop&primary&key&&&&&&//可以删除主键
5)engine&类型名&&&&&&&//可以改变表类型
6)rename&as&新表名&&&&&//可以将表名更改
10、MySQL运算符
算术运算符:
注意:字符串自动转换数字:用字符串表示的数字在任何可能便于计算的地方都被自动地转换为数字。当执行转换时,MySQL遵循两个基本规则:1)如果第一位是数字的字符串被用于一个算数运算中,那么它被转换为这个数字的值。2)如果一个包含字符和数字混合的字符串不能被正确的转换为数字,那么它被转换成0。
比较运算符:对表达式的左边和右边进行比较。一个比较运算符的结果总是1(真),0(假),或是为NULL(不能确定)。
注意:1)“%”&(百分号)&&代表任意长度(长度可以为0)的字符串。举例:a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab&等都满足该匹配串。2)“_&”(下横线)&代表任意单个字符。举例:a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等都满足该匹配串
SQL模式匹配中需要注意:
逻辑运算符:
“~”表示按位取反&&&&&&&&&&&&&“^”表示异或
11、插入记录操作
语法:INSERT&&[INTO]&&表名&&[列名]&VALUES&&值列表&
12、更改操作记录
语法:UPDATE&&表名&&SET&&列名&=&更新值&&[WHERE&&更新条件&]
13、删除操作记录
语法:DELETE&FROM&&表名&&[WHERE&&删除条件&]
14、数据查询
语法:SELECT&[DISTINCT&|&DISTINCTROW&|&ALL]&select_expression,...&
[FROM&table_references&
&[WHERE&where_definition]&
&[GROUP&BY&col_name,...]&
&[HAVING&where_definition]&
&[ORDER&BY&{unsigned_integer&|&col_name&|&&&&formula}&[ASC&|&DESC]&,...]&
&[LIMIT&[offset,]&rows]&
&[PROCEDURE&procedure_name]
from子句:指定查询数据的表
where子句:查询数据的过滤条件
group&by子句:对匹配where子句的查询结果进行分组
having子句:对分组后的结果进行条件限制
order&by子句:对查询结果结果进行排序,后面跟desc降序或asc升序(默认)。 &&&
limit子句:对查询的显示结果限制数目
procedure子句:查询存储过程返回的结果集数据
15、SQL提供的统计函数称为集函数.主要的集函数:
记数函数:&count(列名)&计算元素的个数
求和函数:&sum(列名)&对某一列的值求和,但属性必须是整型
计算平均值:avg(列名)对某一列的值计算平均值
求最大值:&max(列名)&找出某一列的最大值
求最小值:&min(列名)&找出某一列的最小值
16、在WHERE子句中使用谓词&:
BETWEEN&AND:在两数之间
NOT&BETWEEN&AND:不在两数之间
face=宋体&值表&:是否在特定的集合里(枚举)
NOT&IN&&&FONT
face=宋体&值表&:与上面相反
LIKE:是否匹配于一个模式
IS&NULL(为空的)或&IS&NOT&NULL(不为空的)REGEXP&:&检查一个值是否匹配一个常规表达式。
实例:创建一张学生信息表
create&table&students(
&scode&int&not&null&auto_increment,
&sname&varchar(20)&not&null,
&saddress&varchar(20)&default‘未知’,
&sgrade&int,
&semail&varchar(20),
&ssex&bit,
&primary&key(scode)
1)插入一个数据:
INSERT&INTO&Students&(SName,SAddress,SGrade,SEmail,SSEX)&
VALUES&('张青裁',DEFAULT,6,'',0)
注意:具有缺省值的列,可以使用DEFAULT(缺省)关键字来代替插入的数值
2)插入多个数据:
A、语法:INSERT&INTO&&表名&(列名)&VALUES(&列名值&),&(&列名值&),&(&列名值&)……
实例:INSERT&&STUDENTS&(SName,SGrade,SSex)
VALUES('测试女生1',75,0),&
('测试女生2',77,0),
('测试女生3',83,0),
(‘测试男生3',53,1);
INSERT&INTO&&&FONT
face=宋体&表名&(列名)
SELECT&&&FONT
face=宋体&列名&
FROM&&&FONT
face=宋体&源表名&
实例:INSERT&INTO&&TongXunLu&('姓名','地址','电子邮件')&
SELECT&&SName,SAddress,SEmail
FROM&&&Students
3)将student表中的所有学生名称为"Alex"的改为"Tom":
update&student&set&sname="Tom"&where&sname="Alex";
4)删除student表中的所有年龄小于18岁的记录:delete&from&student&where&sage&18;
5)删除学生编号为'95005'的学生信息包括成绩信息
delete&from&student,sc&
using&student,sc&
where&student.sno&=&sc.studentid&
and&student.sno='95005';
注意:表和字段的引用方式有两种:绝对引用和相对引用
绝对引用:数据库名.表名(.字段名)
相对引用:表名.(字段名)
6)查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名。
&select&sname,'year&of&birth:&',2008-sage,&islower(sdept)&from&
7)查询选修了课程的学生学号(去掉重复的记录):select&&distinct&&studentid&&from&
8)查询全体学生的学号与姓名,用中文显示列名:
select&sno&as&'编号',sname&as&'姓名'&from&
9)&给表设置别名:select&&s.sno,s.sname&&from&student&as&s;&
10)查询年龄在20以下的学生的姓名:select&sname&from&student&where&sage&20;&
11)查询全体学生的姓名、年龄,要求按照年龄降序排序。
select&sname,sage&from&student&order&by&sage&
12)查询年龄最大的前3个学生的姓名和年龄,或第4、5个学生
select&sname,sage&from&student&order&by&sage&desc&limit&3;或(limit&3,2)
13)查询学生总数:&select&count(*)&from&
14)查询选修了课程的学生人数:select&count(distinct&studentid)&from&
15)查询1号课程的学生平均成绩:select&avg(grade)&from&sc&where&courseid=1;
16)查询1号课程的学生最高分和最低分。
select&max(grade)&as&‘最高分’,min(grade)&as&‘最低分’&from&sc&where&courseid=1;
17)查询每个学生的平均成绩。
select&studentid,avg(grade)&as&‘平均成绩’&from&sc&group&by&
18)查询学生的平均成绩在70分以上的。
select&studentid,avg(grade)&as&‘平均成绩’&from&sc&group&by&studentid&having&avg(grade)&70;
19)查询年龄不在20~23岁之间的学生姓名、系别和年龄。
&&select&sname,sdept,sage&from&student&where&sage&not&between&20&and&23;
20)查询'信息系'、'美术系'和'计算机系'学生的姓名和性别。
&&select&sname,ssex&from&student&where&sdept&&in&(‘信息系',‘美术系',‘计算机系');
21)查询所有姓刘学生的姓名、学号和性别。
select&sname,sno,ssex&from&student&where&sname&like&‘刘%';
22)查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。
select&studentid,grade&from&sc&where&courseid=3&orber&by&grade&
23)查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列:select&*&from&student&order&by&sdept,sage&&
17、多表查询:同时涉及多个表的查询称为连接查询;用来连接两个表的条件称为连接条件。
1)内连接(INNER&JOIN);2)外连接:左外联结(LEFT&JOIN)和右外联结(RIGHT&JOIN)
外连接与普通连接的区别:
普通连接操作只输出满足连接条件的元组
外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出。
内连接实例1:
SELECT&Students.SName,&Sc.CourseID,&Sc.Grade
FROM&&Students,Sc
WHERE&&Students.SNo&=&Sc.StudentID
内连接实例2:
SELECT&&S.SName,C.CourseID,C.Grade&
From&&&Sc&AS&C
INNER&JOIN&&Students&AS&S
ON&&&C.StudentID&=&S.SNo
左外连接实例:
SELECT&&S.SName,C.CourseID,C.Grade&
From&&&Students&AS&S
LEFT&JOIN&&Sc&AS&C
ON&&&C.StudentID&=&S.SNo
右外连接实例:
SELECT&Titles.Title_id,&Titles.Title,&Publishers.Pub_name
FROM&titles&
RIGHT&OUTER&JOIN&Publishers&
ON&Titles.Pub_id&=&Publishers.Pub_id
18、子查询:将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为子查询。一个SELECT-FROM-WHERE语句称为一个查询块。
实例:查询选修了课程名为“Java”的学生学号和姓名
select&&sno,sname&from&student
&where&sno&in
&&&(select&studentid&&from&sc&
&&where&&cno&=
&&&&&(select&cno&from&course&
&&&&where&cname=‘Java’)
19、触发器的作用?
&答:触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。
20、什么是存储过程?用什么来调用?
答:存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一个命令对象来调用存储过程
21、索引的作用?和它的优点缺点是什么?
答:索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。
22、什么是内存泄漏?
答:一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。当应用程序用关键字new等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free或者delete释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。
23、维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么?
答:我是这样做的,尽可能使用约束,如check,主键,外键,非空字段等来约束,这样做效率最高,也最方便。其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性。最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。
24、什么是事务?什么是锁?
答:事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。锁:在所以的DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。
25、什么叫视图?游标是什么?
答:视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。
26、如何提高MySql的安全性?
1.如果MYSQL客户端和服务器端的连接需要跨越并通过不可信任的网络,那么需要使用ssh隧道来加密该连接的通信。
2.使用set&password语句来修改用户的密码,先“mysql&-u&root”登陆数据库系统,然后“mysql&&update&mysql.user&set&password=password(’newpwd’)”,最后执行“flush&privileges”就可以。
3.Mysql需要提防的攻击有,防偷听、篡改、回放、拒绝服务等,不涉及可用性和容错方面。对所有的连接、查询、其他操作使用基于acl即访问控制列表的安全措施来完成。也有一些对ssl连接的支持。
4.设置除了root用户外的其他任何用户不允许访问mysql主数据库中的user表;
加密后存放在user表中的加密后的用户密码一旦泄露,其他人可以随意用该用户名/密码相应的数据库;
5.使用grant和revoke语句来进行用户访问控制的工作;
6.不要使用明文密码,而是使用md5()和sha1()等单向的哈系函数来设置密码;
7.不要选用字典中的字来做密码;
8.采用防火墙可以去掉50%的外部危险,让数据库系统躲在防火墙后面工作,或放置在dmz区域中;
9.从因特网上用nmap来扫描3306端口,也可用telnet&server_host&3306的方法测试,不允许从非信任网络中访问数据库服务器的3306号tcp端口,需要在防火墙或路由器上做设定;
10.为了防止被恶意传入非法参数,例如where&id=234,别人却输入where&id=234&or&1=1导致全部显示,所以在web的表单中使用”或”"来用字符串,在动态url中加入"代表双引号、#代表井号、'代表单引号;传递未检查过的值给mysql数据库是非常危险的;
11.在传递数据给mysql时检查一下大小;
12.应用程序需要连接到数据库应该使用一般的用户帐号,开放少数必要的权限给该用户;
13.在各编程接口(c&c++&php&perl&java&jdbc等)中使用特定‘逃脱字符’函数;
在因特网上使用mysql数据库时一定少用传输明文的数据,而用ssl和ssh的加密方式数据来传输;
14.学会使用tcpdump和strings工具来查看传输数据的安全性,例如tcpdump&-l&-i&eth0&-w&-src&or&dst&port&3306&strings。以普通用户来启动mysql数据库服务;
15.不使用到表的联结符号,选用的参数&&skip-symbolic-
16.确信在mysql目录中只有启动数据库服务的用户才可以对文件有读和写的权限;
17.不许将process或super权限付给非管理用户,该mysqladmin&processlist可以列举出当前执行的查询文本;super权限可用于切断客户端连接、改变服务器运行参数状态、控制拷贝复制数据库的服务器;
18.file权限不付给管理员以外的用户,防止出现load&data&‘/etc/passwd’到表中再用select&显示出来的问题;
19.如果不相信dns服务公司的服务,可以在主机名称允许表中只设置ip数字地址;
20.使用max_user_connections变量来使mysqld服务进程,对一个指定帐户限定连接数;
21.grant语句也支持资源控制选项;
22.启动mysqld服务进程的安全选项开关,&local-infile=0或1&若是0则客户端程序就无法使用local&load&data了,赋权的一个例子grant&insert(user)&on&mysql.user&to&‘user_name’@'host_name’;若使用&skip-grant-tables系统将对任何用户的访问不做任何访问控制,但可以用&mysqladmin&flush-privileges或mysqladmin&reload来开启访问控制;默认情况是show&databases语句对所有用户开放,可以用&skip-show-databases来关闭掉。
23.碰到error&)&access&denied&for&user&‘root’@'localhost’&(using&password:no)错误时,你需要重新设置密码,具体方法是:先用&skip-grant-tables参数启动mysqld,然后执行&mysql&-u&root&mysql,mysql&update&user&set&password=password(’newpassword’)&where&user=’root’;mysql&flush&,最后重新启动mysql就可以了。
MYSQL相比于其他数据库有哪些特点?
如何解决MYSQL数据库中文乱码问题?
在数据库安的时候指定字符集
如果在安完了以后可以更改以下文件:
里的所有的&default-character-set=gbk
建立数据库时候:指定字符集类型
2.建表的时候&也指定字符集
3.设置URL的时候&&&&&&&
jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=UTF-8
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 insert into update 的文章

 

随机推荐