数据库建表、建库、操作数据、安全性
都为自己总结,把难懂的语句具体化,如有错误,请不吝指正,感谢。
库操作
create database wxdst; //建立名为wxdst的数据库
drop database wxdst; //删除名为wxdst的数据库
表操作
create table student; //建立名为student的表
格式:
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
…
)
drop table student; //删除名为student的表
show create table student\g; //显示建表时语句
注:
1、一般在哪个库里建先得引用出库,例如:use wxdst;
2、创建表时每一列名不需要加引号;
数据操作
source命令
执行sql脚本文件(存放有sql命令的文件,包括对库、表、数据的曹操作)。一般格式:source d://db.txt //执行d盘下的名为db的txt脚本文件。
注
1、归为数据操作,但也可在脚本文件中包含库和表的操作
2、文件路径不得用引号,结尾不加分号
修改数据
插入(insert)
insert into course(cno,cname,cpno,ccredit) values(“5”,“数据结构”,“7”,4); //在course表中按第一个括号中顺序插入数据
insert into course values(“4”,“操作系统”,“6”,3); //也可不写第一个括号,这样就必须按照建表字段顺序写了
insert into course values(“4”,“操作系统”,“6”,3),(“5”,“安卓开发”,“7”,4);//插入多个数据时直接写
更新(update)
待更
删除(delete)
待更
注:
1.插入数据时如果外键参照的主键不存在,则不允许插入。
2.insert 、delete、update对数据的操作都不需要加table这个单词,例如创建和删除表时候都得加,例如:create table sc…;
3.delete和insert后需要分别加介词from和into,再加表名和操作,而update后是先跟表名再跟set和操作。
查询数据
单表
固定查询格式,distinct紧跟select,去重作用。
常用查询条件和谓词
1、查询学生所有信息,用*号
2、查询有学生的系,用distinct去重
3、between prar1 and prar2 相当于>=prar1 and <=prar2;可用between and 替换由and连接的两个条件(目前发现一般适用于确定范围上才可替换)
4、每一列不仅可以是表内信息,还可以是运算后的结果。用as可以给表起别名(少用空格)。
多表
形式:from后有多个表,可以是逗号分开的多个表,也可是join连接的表。
1 、直接用逗号连接多个表是多个表的笛卡尔积
2、用join链接在on后写连接条件
左外连接(left join):求两个表的交集外加左表剩下的数据
右外连接(right join):求两个表的交集外加右表剩下的数据
有公用属性才能用join,下图中student不能和course链接,没有公共属性,必须分步链接。
3、查询李勇数据库成绩
join连接后的表在where后写条件。
用逗号连接的就和连接条件写在一起,用and。
注:
1、每一列不仅可以是表内信息,还可以是运算后的结果。
2、有公用属性才能用join链接多个表。
3、直接用逗号连接多个表是多个表的笛卡尔积
嵌套中的查询
一、不相关子查询(where中的嵌套)
子查询与外层查询没有关联,可以单独执行
1、2号课最高分的学生学号(子查询返回的是一行一列,即标量)
2、查询既选修1号课,又选修2号课的人(子查询返回的是多行一列,即标量集合)
3、查询200215103选修的课程信息(子查询返回一行多列,即元组)
4、查询201215103选修的课程信息(子查询返回多行多列,即表)
二、相关子查询(where中的嵌套)
子查询与外层查询有关联,相当于for循环两层嵌套
1、查询选修了2号课的人
三、导出表(from中的嵌套)
嵌套在from中的select查询块,必须给它起一个别名,不然报错。
1、查询计科系学生最大年龄
2、查询选修了2号课的学生中最大的年龄是那些学生
3、计科系选修的课有那些
4导出表不能独立运行,错误举例
注
1、导出表必须能独立运行
2、导出表的每一列必须不同,能够区分开来,经常在join后出现相同的列,注意。
四、any、in、all对集合的操作
在any、in、all左面加上>=、<=、=等比较运算符,产生对集合的筛选
1、是不是所有学生年龄都大于21
mysql> select * from t;
| a | b | c |
±–±-----±-----+
| 4 | 22 | 3 |
| 5 | 12 | NULL |
| 6 | 2 | 4 |
| 7 | 2 | 5 |
4 rows in set (0.00 sec)2、与null运算时,只要空值n
ull参与了±*/><=等运算就为null
3、空集合直接进行比较运算也是null
4、空集合前加any后运算则为假,加all运算则为真
注意:
true and null = null
false or null = null
true or null = true
false and null = false
查询中的统计
一、函数
1、聚集函数count
(1)查询行数
(2)查询具体一列中的个数,本例中有一个人的所在系为空
2、聚集函数sum和avg
3、聚集函数min和max
4、函数group_concat
将该列所有值用逗号列成字符串形式的
注
1、上述聚集函数在括号里均可加distinct去重,表示重复的不被选中
2、sum和avg值只能为数值型
二、分组
1、查询计科系按性别分组后的成绩信息
2、查询学生(大于80给学分)学分情况
分组时加上name是为了select后能加name
3、having筛选分组后数据
注
1、分组后select后面只能有分组表达式和统计表达式。也就是只能与分组时关心的数据和统计后的数据有关,如例1中不能有select sage。
安全性
用户
创建用户
1、普通创建
2、使用掩码和通配符
注:
1、用户名右边不加‘@…’表示所有主机地址均可使用此用户名连接,地址时通配符‘%’
2、具体的主机地址,优先于含有%通配符地址,用户名和密码相同时,优先使用具体地址登录
用户登录
1、可以使用-h设定将要连接的主机的ip
查询用户
1、可以看到我们创建了主机地址为通配的%和localhost的用户rtt,但连接优先使用localhost,这个是查询有哪些用户能连接
2、当前连接用户
注
1、current_user()返回服务器用来认证当前客户端的MySQL帐户的用户名和主机名组合。该帐户确定您的访问权限。
2、user()客户端提供的用户名和主机名,指示在连接到服务器时指定的用户名以及从中连接的客户端主机。
权限
权限概述
1、全局级别权限:适用于服务器上所有数据库,使用on*.*语法。
2、数据库级别权限:适用于该数据库中所有对象,使用on db_name.*语法
3、表级权限:适用于给定表中所有列,使用on db_name.tbl_name语法
4、列级权限:适用于某个表中的固定列,在每个权限后的括号中加上一个或多个列设置。
授予权限
1、授予全局级别的所有权限
2、授予数据库级别的所有权限
3、授予表级别的所有权限
(1)所有权限
(2)查询权限
3、授予列级权限
1、授予地址为localhost的rtt用户查询权限
回收权限
1、收回全局级别所有权限
查询权限
1、查询当前登录用户rtt有哪些权限
2、在root上查询某个用户的权限