1.基本命令
1.1 grant命令
1.1.1 基本格式:
grant 权限 on 数据库对象 to 用户@用户地址 identified by '连接口令(密码)'
例如:
grant 普通数据用户,查询,插入,更新,删除数据库中所有表数据的权利
grant select,insert,update delete on testdb.tc(testdb.*) to common_user@'%'
grant 高级DBA管理mysql中所有数据库的权限
grant all on *.* to dba@'localhost'
撤销权限
grant all on *.* to dba@localhost
revoke all on *.* from dba@localhost
1.2 alter命令
ALTER TABLE 表名 DROP 列名
ALTER TABLE 表名 ADD 列名 [列属性...]
ALTER TABLE 表名 CHANGE 旧列名 新列名 [列属性];
ALTER TABLE 表名 ADD INDEX|PRIMARY KEY|UNIQUE 索引名(列名);
ALTER TABLE 表名 DROP INDEX 索引名(普通索引和唯一索引)
ALTER TABLE 表名 DROP primary key(单独删除主键)
1.3 group by和having命令
例如:
select name,sum(score) from A group by name
先根据name分组,再在每一组的score上调用聚合函数(在此处是sum)
得到类似如下的结果:
name score
Ross 180
Joye 230
1.3.1 having命令
select name,sum(score) from A group by name having score=80;
先根据name分组,再对score进行筛选,只有score等于80的时候sum函数才会作用于score列.
2.MyISAM和InnoDB主要区别
2.1. MyISAM是MySQL的默认存储引擎,基于传统的ISAM类型,支持全文搜索,但不是事务安全的,而且不支持外键。每张MyISAM表存放在三个文件中:frm 文件存放表格定义;数据文件是MYD (MYData);索引文件是MYI (MYIndex)。MyISAM不适合做大量更新操作和查询操作应用,因为MyISAM的读的优先级低于写的优先级,大量的更新操作会造成查询操作很难获得读锁。
- 通过指定启动参数low-priority-updates,使MyISAM引擎默认给予读请求以优先的权利。
- 通过执行命令SET LOW_PRIORITY_UPDATES=1,使该连接发出的更新请求优先级降低。
- 通过指定INSERT、UPDATE、DELETE语句的LOW_PRIORITY属性,降低该语句的优先级
- 虽然上面3种方法都是要么更新优先,要么查询优先的方法,但还是可以用其来解决查询相对重要的应用(如用户登录系统)中,读锁等待严重的问题。另外,MySQL也提供了一种折中的办法来调节读写冲突,即给系统参数max_write_lock_count设置一个合适的值,当一个表的读锁达到这个值后,MySQL就暂时将写请求的优先级降低,给读进程一定获得锁的机会。
2.2. InnoDB是事务型引擎,支持回滚、崩溃恢复能力、多版本并发控制、ACID事务,支持行级锁定(InnoDB表的行锁不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,如like操作时的SQL语句),以及提供与Oracle类型一致的不加锁读取方式。InnoDB存储它的表和索引在一个表空间中,表空间可以包含数个文件。InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的。InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!