MySQL基础语法
2015-08-06 10:59
525 查看
8. create database
语法:create {database | schema} [if not exists] db_name
[create_specification] ...
create_specification:
[default] character set [=] charset_name
| [default] collate [=] collation_name
功能:创建一个具有给定名称的数据库
参数及选项:
create_specification选项用于指定数据库属性,数据库属性存储在数据库目录的db.opt文件中
character set:指定数据库默认字符集;
collate:指定数据库默认排序规则;
说明:
① 要使用此语句,你需要具有「create」权限;
② 如果数据库已经存在并且没有指定[if not exists],则会发生错误;
③ 在具有有效的「lock tables」语句的会话中,不允许使用create database;
④ MySQL中的数据库被实现为目录,数据库中的表对应该目录中的文件。因为数据库创建之初没有表,所以create database语句仅在MySQL数据目录中创建了一个目录和db.opt文件。如果数据库名称包含特殊字符,则数据库目录的名称包含这些字符的编码版本;
⑤ 如果你在数据库目录下手动创建一个目录(例如,使用mkdir),则服务器会将其视为一个数据库目录,并显示在show databases的输出中
7. show databases
语法:show databases;
功能:查看账号具有权限的数据库
说明:对于特定账号来说,该命令只打印出该账号在schema中具有某种权限的所有数据库
6. rename table
语法:rename table「old_table」to「new_table」
功能:将表重命名
等价:alter table「old_table」rename「new_table」
说明:
① rename是原子操作,这意味着在rename运行期间,其它会话无法访问这些表中的任何一个
② rename允许同时重命名多张表,例如
rename table「tbl1」to「new_tbl1」,
「tbl2」to「new_tbl2」,
「tbl3」to「new_tbl3」;
过程为从左到右依次进行重命名
③ 在重命名多张表的过程中,如果遇到了问题,rename会将已经重命名的表进行反向重命名,以恢复到rename之前的状态
方法技巧:
◇ 交换两张表
rename table「old_table」to「tmp_table」,
「new_table」to「old_table」,
「tmp_table」to「new_table」;
◇ 重命名数据库
MySQL没有提供重命名数据库的命令,但可以通过将当前数据库中的所有表按如下方式进行重命名来实现:
rename table「current_db.tbl_name」to「other_db.tbl_name」
前提是,两数据库位于同一文件系统上
5. 锁定读
当你在一个事务中,先查询数据,然后插入或修改数据时,普通的select语句不能提供足够的保护,因为其它的事物可能在这两个操作之间的间隙,修改或删除了你刚查询得到的行。InnoDB支持两种类型的锁定读,它们提供了额外的保护:
① select ... lock in share mode
在读到的行上设置共享锁(读锁)。其它的事务可以读取这些行,但是不能修改它们,直至你的事务提交为止。如果这些行中的任意一个已经被其它未提交的事务所修改,那么你的查询将会阻塞,直至该事务提交,然后你就能读取最新的值
② select ... for update
在查询用到的相关行上设置排他锁(写锁)。锁定这些行,及关联的索引,就如同你对这些行发起了update操作。其它的事务,不能更新这些行,不能对这些行使用select ... lock in share mode,在其它事务隔离级别下甚至不能读这些行。一致性读自动忽略加在读视图中的记录上的所有锁
说明:
◇ lock in share mode和for update设置的锁,在事务提交或回滚后,将自动被释放
◇ select ... for update只有在自动提交被禁用时,才能发挥作用,从而对相关行进行锁定。因此,要么通过start transaction手动开始一个事务,要么设置系统变量autocommit为0。如果自动提交开启,匹配的行,将不会被锁定
4. 特殊字符
减号「-」在MySQL中为特殊字符,需要在其两端添加「`」
3. 查看列信息
命令:show columns from 「Database」.「TableName」like 「ColumnName」
功能:查看列信息
示例:
2. 查看表信息
命令:show create table 「TableName」
功能:查看表的创建信息
1. truncate
命令:truncate 「name」
功能:截断表,删除所有记录,自增id重置为0
说明:效果与delete from table_name相同,但由于不写日志,故更快。关于外键对truncate和truncate对触发器的影响等内容,需查看MySQL Document
语法:create {database | schema} [if not exists] db_name
[create_specification] ...
create_specification:
[default] character set [=] charset_name
| [default] collate [=] collation_name
功能:创建一个具有给定名称的数据库
参数及选项:
create_specification选项用于指定数据库属性,数据库属性存储在数据库目录的db.opt文件中
character set:指定数据库默认字符集;
collate:指定数据库默认排序规则;
说明:
① 要使用此语句,你需要具有「create」权限;
② 如果数据库已经存在并且没有指定[if not exists],则会发生错误;
③ 在具有有效的「lock tables」语句的会话中,不允许使用create database;
④ MySQL中的数据库被实现为目录,数据库中的表对应该目录中的文件。因为数据库创建之初没有表,所以create database语句仅在MySQL数据目录中创建了一个目录和db.opt文件。如果数据库名称包含特殊字符,则数据库目录的名称包含这些字符的编码版本;
⑤ 如果你在数据库目录下手动创建一个目录(例如,使用mkdir),则服务器会将其视为一个数据库目录,并显示在show databases的输出中
7. show databases
语法:show databases;
功能:查看账号具有权限的数据库
说明:对于特定账号来说,该命令只打印出该账号在schema中具有某种权限的所有数据库
6. rename table
语法:rename table「old_table」to「new_table」
功能:将表重命名
等价:alter table「old_table」rename「new_table」
说明:
① rename是原子操作,这意味着在rename运行期间,其它会话无法访问这些表中的任何一个
② rename允许同时重命名多张表,例如
rename table「tbl1」to「new_tbl1」,
「tbl2」to「new_tbl2」,
「tbl3」to「new_tbl3」;
过程为从左到右依次进行重命名
③ 在重命名多张表的过程中,如果遇到了问题,rename会将已经重命名的表进行反向重命名,以恢复到rename之前的状态
方法技巧:
◇ 交换两张表
rename table「old_table」to「tmp_table」,
「new_table」to「old_table」,
「tmp_table」to「new_table」;
◇ 重命名数据库
MySQL没有提供重命名数据库的命令,但可以通过将当前数据库中的所有表按如下方式进行重命名来实现:
rename table「current_db.tbl_name」to「other_db.tbl_name」
前提是,两数据库位于同一文件系统上
5. 锁定读
当你在一个事务中,先查询数据,然后插入或修改数据时,普通的select语句不能提供足够的保护,因为其它的事物可能在这两个操作之间的间隙,修改或删除了你刚查询得到的行。InnoDB支持两种类型的锁定读,它们提供了额外的保护:
① select ... lock in share mode
在读到的行上设置共享锁(读锁)。其它的事务可以读取这些行,但是不能修改它们,直至你的事务提交为止。如果这些行中的任意一个已经被其它未提交的事务所修改,那么你的查询将会阻塞,直至该事务提交,然后你就能读取最新的值
② select ... for update
在查询用到的相关行上设置排他锁(写锁)。锁定这些行,及关联的索引,就如同你对这些行发起了update操作。其它的事务,不能更新这些行,不能对这些行使用select ... lock in share mode,在其它事务隔离级别下甚至不能读这些行。一致性读自动忽略加在读视图中的记录上的所有锁
说明:
◇ lock in share mode和for update设置的锁,在事务提交或回滚后,将自动被释放
◇ select ... for update只有在自动提交被禁用时,才能发挥作用,从而对相关行进行锁定。因此,要么通过start transaction手动开始一个事务,要么设置系统变量autocommit为0。如果自动提交开启,匹配的行,将不会被锁定
4. 特殊字符
减号「-」在MySQL中为特殊字符,需要在其两端添加「`」
3. 查看列信息
命令:show columns from 「Database」.「TableName」like 「ColumnName」
功能:查看列信息
示例:
2. 查看表信息
命令:show create table 「TableName」
功能:查看表的创建信息
1. truncate
命令:truncate 「name」
功能:截断表,删除所有记录,自增id重置为0
说明:效果与delete from table_name相同,但由于不写日志,故更快。关于外键对truncate和truncate对触发器的影响等内容,需查看MySQL Document
相关文章推荐
- MySQL语法
- MySQL基础语句
- 局域网其他电脑连接测试机MySQL数据库
- mysql关联查询
- MySQL性能剖析
- MySQL性能剖析
- MySQL性能剖析
- MySQL--用户管理和权限
- MySQL 加锁处理分析
- 使用MySQL命令行修改密码
- MySQL出现同步延迟有哪些原因?如何解决?
- MySQL出现同步延迟有哪些原因?如何解决?
- MySql存储过程与函数详解
- 修改mysql用户密码及资源限制
- MySQL模糊查询中通配符的转义
- mysql中select distinct的用法
- 启动mysql的主主备份出现Slave_SQL_Running: No 解决办法
- 记录下:Mysql导出表结构及表数据 mysqldump用法 - T00ls
- MYSQL 浅谈MyISAM 存储引擎
- mysql中单双引号的特殊使用 以及mysql常见的转移字符