操作
插入数据 的语法 :INSERT INTO 表名称 VALUES(值1,值2,......);
修改数据 的语法:UPDATE 表名称 SET 字段名1 = 值1, 字段名2=值2,...... 【WHERE 条件】;
删除数据 的语法:delete from 表名 【[where 条件】;
delete 表1,表2,....... from 表1,表2,...... 【where 条件】;
查询数据 的语法:
SELECT 查询列表
FROM 表名或视图列表
【WHERE 条件表达式】
【GROUP BY 字段名 【HAVING 条件表达式】】
【ORDER BY 字段 【ASC|DESC】】
【LIMIT m,n】;
别名 的语法 : AS 别名;
去重 的语法 :distinct id
着重号 的语法 : 例如:select name from t_stu;
MySQL运算符:
算数运算符 : + - * / %
比较运算符 : = > >= < <= != <=>
逻辑运算符 :&&(and) ||(or) not xor
范围: between....and...(》=...and表达式a<=....)
not between...and...(<...>
集合 :in not in
模糊查询 : like not like %表示0-n个字符 _表示一个字符
位运算符: &(按位与) |(按位或)^(按位异或)~(按位取反)>>(右移)<
NULL值判断: is NULL is not NULL
关联查询 联合查询
内连接 :inner join cross join
外连接 :左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)、全外连接(FULL OUTER JOIN)
自联结 :当table1和table2本质上是同一张表,只是用取别名的方式虚拟成两张表以代表不同的意义
迪卡尔积:
定义:将两(或多)个表的所有行进行组合,连接后的行数为两(或多)个表的乘积数.
关联条件:表连接的约束条件可以有三种方式:WHERE, ON, USING
WHERE:适用于所有关联查询
ON:只能和JOIN一起使用,只能写关联条件。虽然关联条件可以并到WHERE中和其他条件一起写,但分开写可读性更好。
USING:只能和JOIN一起使用,而且要求两个关联字段在关联表中名称一致,而且只能表示关联字段值相等
select 的5个子句:
1 、 where 条件查询;
2 、 group by 分组查询;
3 、 聚合函数
avg()平均值;
countI() 返回非NULL值得数目;
min() 返回最小值;
max() 返回最大值;
sum()返回总和;
4 、 having 筛选;
5 、 order by 排序 默认升序 加 DESC 降序
6 、 limit m,n 分页 #m表示从下标为m的记录开始查询,第一条记录下标为0,n表示取出n条出来,如果从m开始不够n条了,就有几条取几条。m=(page-1)*n
事务
GRANT:授予访问权限
REVOKE:撤销访问权限
COMMIT:提交事务处理
ROLLBACK:事务处理回退
SAVEPOINT:设置保存点
LOCK:对数据库的特定部分进行锁定
特性:
原子性(Atomicity):原子意为最小的粒子,或者说不能再分的事物。数据库事务的不可再分的原则即为原子性。 组成事务的所有SQL必须:要么全部执行,要么全部取消(就像上面的银行例子)。
一致性(Consistency):指数据的规则,在事务前/后应保持一致
隔离性(Isolation):简单点说,某个事务的操作对其他事务不可见的.
持久性(Durability):当事务提交完成后,其影响应该保留下来,不能撤消
用法:
开启事务(start transaction)
执行sql操作(普通sql操作)
提交/回滚(commit/rollback)
数据库得隔离:
Oracle 支持的 2 种事务隔离级别:READ COMMITED, SERIALIZABLE. Oracle 默认的事务隔离级别为: READ COMMITED
Mysql 支持 4 中事务隔离级别. Mysql 默认的事务隔离级别为: REPEATABLE-READ
每启动一个 mysql 程序, 就会获得一个单独的数据库连接. 每个数据库连接都有一个变量 @@tx_isolation, 表示当前的事务隔离级别.
l 查看当前的隔离级别: SELECT @@tx_isolation;
l 查看全局的隔离级别:select @@global.tx_isolation;
l 设置当前 mySQL 连接的隔离级别: set tx_isolation ='repeatable-read';
设置数据库系统的全局的隔离级别: set global tx_isolation ='read-committed';
权限系统的工作原理:
MySQL的权限系统通过下面两个阶段进行认证:
对连接到数据库的用户进行身份认证,以此来判断此用户是否属于合法的用户,合法的用户通过认证,不合法的用户拒绝连接
对通过认证的合法的用户则赋予相应的权限,用户可以在这些权限范围内对数据库做相应的操作
用户表user
user表有39个字段。这些字段可以分为4类:
l 用户列:host,user,password三个字段
l 安全列:ssl_type、ssl_cipher、x509_issuer、x509_subject
n ssl用于加密;x509标准可以用来标识用户。普通的发行版都没有加密功能。可以使用SHOW VARIABLES LIKE 'have_openssl'语句来查看是否具有ssl功能。如果取值为DISABLED,那么则没有ssl加密功能。
l 资源控制列:max_questions(每小时可以允许执行多少次查询)、max_updates(每小时可以允许执行多少次更新)、max_connections(每小时可以建立多少连接)、max_user_connections(单个用户可以同时具有的连接数)
n 默认值为0,表示无限制。
示例:
例1:创建用户admin,权限为可以在所有数据库上执行所有权限,但只能从本地进行连接
GRANT ALL PRIVILEGES ON . TO admin@localhost;
可以发现除了Grant_priv权限外,所有权限在user表里面都是Y.
例2:在例1基础上,增加对admin的grant权限
GRANT ALL PRIVILEGES ON . TO admin@localhost WITH GRANT OPTION;
例3:在例2基础上,设置密码为“123”
GRANT ALL PRIVILEGES ON . TO admin@localhost IDENTIFIED BY '123' WITH GRANT OPTION;
例4:创建新用户chai,可以从任何IP进行连接,权限为对test数据库的所有表进行SELECT、UPDATE、INSERT、DELETE操作,初始密码为“123”
GRANT SELECT,INSERT,UPDATE,DELETE ON test.* TO 'chai'@'%' IDENTIFIED BY '123';
发现此例,user表中权限都是N,db表中增加的记录权限则都是Y
注意:
mysql数据库的user表中user的值为空,表示所有用户都可以连接(此处不能用,表示用户名为*的用户了)
mysql数据库的user表中host的值为*或空,表示所有外部IP都可以连接,但是不包括本地服务器localhost,因此如果要包括本地服务器,必须单独为localhost赋予权限。如果host的值为%,表示所有IP,包括本地服务器localhost。