关系型数据库简介与mysql基本操作
1、关系型数据库简介、2、mysql简介及常用的快捷操作、3、mysql的安装与配置、4、mysql支持的基本数据类型数据类型属性关键字、5、mysql数据库的用户及其权限管理、6、root用户忘记密码解决步骤、7、mysql数据库级别的常用操作、8、mysql数据表级别的常用操作、9、mysql数据级别的常用操作、10、事务与索引的常用操作
参考地址,https://www.cnblogs.com/clschao/articles/10065275.html
- mysql简介
- mysql服务器的操作:
- 方式一:在windows系统下,搜索 ‘服务’ ,在系统服务中找到mysql,直接执行启动、停止,并且可以把启动选项改为自动启动或手动
- 方式二:
- 先确认mysql是否已经注册在windows下完成了注册,方法是在windows服务窗口查看。如果未注册,则在cmd命令窗口中,把运行的地址改到mysql安装目录的bin目录下,执行“mysqld --install”,提示“Service successfully installed”完成注册,在回到cmd执行mysql服务器的启动关闭。
- cmd 启动mysql服务器 net start mysql
- cmd 关闭mysql服务器 net stop mysql
- mysql常用执行语句及关键字:
- 登录
- mysql -u “用户名” -h “登录主机” -p
- 退出
- exit
- 执行语句结束标志
- ;
- 增加类语句及关键字
- create grant insert add
- 删除操作常用的语句及关键字
- drop delete revoke
- 修改信息常用的语句及关键字
- update rename set alter modify
- 查看类语句及关键字
- show select
- 登录
- mysql 中常用的快捷操作
mysql安装与配置(系统数据的基础,运行稳定 > 功能新颖)
windows安装过程:
installer安装版本
- 官网下载:www.mysql.com ,在window标签下,下载installer
- 运行 mysql 安装文件;
- 选择安装方式,有 "Typical(默认)"、"Complete(完全)"、"Custom(用户自定义)",选择 "Custom",包括功能模块及安装路径等都可以自定义。
- 下一步, MySQL Server (mysql服务器), Developer Components (开发者部分), Debug Symbols (调试符号), Server data files (服务器数据文件) 默认;
- 改变安装路径,根据需要改变核实安装路径。
- 下一步,安装,会弹出窗口,下一步,下一步,选择"Launch the MySql instance Configuration Wizard",意思是启动MySQL实例配置向导,再点击Finish,再点下一步,Detailed Configuration(详细配置)和Standard Configuration(标准配置),选择详细配置,下一步;
- 选择服务器类型,"Developer Machine(开发测试类,mysql占用很少资源)"、"Server Machine(服务器类型,mysql占用较多资源)"、"DedicatedMySQL Server Machine(专门的数据库服务器,mysql占用所有可用资源)",根据自己的类型选择,测试软件选"Developer Machine",服务器选"Server Machine",下一步;
- 选择创建 MySQL表时使用的表处理器,"Multifunctional Database"(通用多功能型,好,同时使用InnoDB和 MyISAM 储存引擎)、"Transactional Database Only"(服务器类型,专注于事务处理,主要使用 InnoDB 只偶尔使用 MyISAM,一般)、"Non-Transactional DatabaseOnly"(非事务处理型,较简单,完全禁用 InnoDB 储存引擎,将所有服务器资源指派给 MyISAM 储存引擎),根据实际需要选择。
community社区版本
- 官网下载:www.mysql.com,community标签下下载 https://dev.mysql.com/downloads/mysql/,
- 下载完在指定目录,解压缩至程序目录,例如,g:/Program Files/Mysql
- 在解压的程序目录下,新建一个my.ini文件,
- 新建一个my.txt,录入内容之后,在修改文件类型为ini
-
my.ini内容,核实dir[mysqld] # 设置3306端口 port=3306 # 设置mysql的安装目录 basedir=g:\\Program Files\\Mysql\\mysql-8.0.28-winx64 # 切记此处一定要用双斜杠\\,单斜杠我这里会出错,不过看别人的教程,有的是单斜杠。自己尝试吧 # 设置mysql数据库的数据的存放目录 datadir=g:\\ProgramData\\mysql\\mysql-8.0.28-winx64\\Data # 此处同上 # 允许最大连接数 max_connections=200 # 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统 max_connect_errors=10 # 服务端使用的字符集默认为UTF8 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB # 默认使用“mysql_native_password”插件认证 default_authentication_plugin=mysql_native_password [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [client] # 设置mysql客户端连接服务端时默认使用的端口 port=3306 default-character-set=utf8
- 新建一个my.txt,录入内容之后,在修改文件类型为ini
- 设置系统环境变量,把mysqld的bin目录拷贝到环境变量path下
- 在ProgramData下的Mysql文件下,创建一个data目录,存放的是mysql的数据,具体路径和my.ini文件下的datadir一直 在cmd终端中,cd到mysql的bin目录下,mysql的初始化,并创建服务,执行 mysqld -- initialize --console
- 这里执行完初始化,会自动生成一个密码,找个地儿,记下来,初始化完登录会用到,
- 如果上面的密码,没有提前保存,就走下面的忘记密码处理流程,或者,datadir删掉,重新初始化一遍
- 启动,另外cmd中启动mysql即实现数据库启动
- 为了再启动的时候,简化流程,把mysqld制作成系统服务
- 以管理员身份运行cmd
- 执行mysqld --install 【服务名】 一般的,服务名直接用mysql,也可以用mysql5, mysql8 等等
- net start mysql启动MySQL的服务了。通过命令net stop mysql停止服务。通过命令
sc delete MySQL/mysqld -remove卸载 MySQL 服务
- net start mysql启动MySQL的服务了。通过命令net stop mysql停止服务。通过命令
- 到电脑右键,管理中,搜索系统服务设置,在列表中找到mysql,设置服务启动类型(可以设置为随机自动启动)
- 如果设置了mysqld自动启动,或者已经手动启动了mysqld,直接在cmd运行客户端直接执行mysql -uroot -p,输入上面给的随机密码
- 修改登录密码,ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
Linux安装过程:
- centos系统
- 方式一(centos系统高版本):运行 yum -y install mariadb -server mariadb
- 方式二(centos系统低版本):运行 yum -y install mysql -server mariadb
- ubuntu系统
- 安装:
- sudo apt-get update
- sudo apt-get install mysql-server
- 安装完成后,需要重置初始密码
- 查看初始密码
sudo cat /etc/mysql/debian.cnf - 使用默认账户登录
-
mysql -udebian-sys-maint -p Enter password:
-
-
UPDATE mysql.user SET authentication_string=PASSWORD('密码'), PLUGIN='mysql_native_password' WHERE USER='root';
- 查看初始密码
- 重启mysql服务后登录
-
/etc/init.d/mysql stop /etc/init.d/mysql start -
mysql -uroot -p
-
- 安装:
-
- 卸载
- 查看Mysql的依赖项:
dpkg --list|grep mysql - sudo apt-get autoremove --purge mysql-server 确认移除
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P,清空mysql的配置文件-
sudo apt-get update更新软件源,只要是安装或卸载软件,都要执行下此命令。 -
sudo rm /var/lib/mysql/ -R sudo rm /etc/mysql/ -R sudo apt-get remove apparmor
- 查看Mysql的依赖项:
- 卸载
macbook,macos安装
-
- 首先根据系统版本,找到对应的mysql版本。版本不一致,会导致bad cpu,报错。如果出现版本不一致,可以卸载之后,重新选择下载旧版本 。选择DMG版本,可以点点点安装。
- https://downloads.mysql.com/archives/community/
-
macos完整卸载打开终端窗口 使用mysqldump备份你的数据库将文本文件! 停止数据库服务器 sudo rm /usr/local/mysql sudo rm -rf /usr/local/mysql* sudo rm -rf /Library/StartupItems/MySQLCOM sudo rm -rf /Library/PreferencePanes/My* edit /etc/hostconfig and remove the line MYSQLCOM=-YES- rm -rf ~/Library/PreferencePanes/My* sudo rm -rf /Library/Receipts/mysql* sudo rm -rf /Library/Receipts/MySQL* sudo rm -rf /private/var/db/receipts/*mysql*
- https://downloads.mysql.com/archives/community/
- 这里可以选择密码类型。可以选择强密码,或者弱密码。例如,mysqlmysql
![]()
-
配置环境变量
- 终端,cd ~ 到根目录
- ls -all 查看下是否有隐藏文件 .bash_profile
- vim 打开或新建 .bash_profile文件,i插入模式,添加下面内容
-
export PATH=$PATH:/usr/locol/mysql/bin -
export PATH=$PATH:/usr/local/mysql/support-files - 执行,esc, :wq,写入保存并退出
-
- 启用一下.bash_profile文件,source .bash_profile
- 给启动指令mysql设置别名
- 终端,cd ~ 到根目录: vim 打开.bashrc,添加内容,
- alias mysql=/usr/local/mysql/bin/mysql
- 执行,esc ,:wq写入保存并退出
- 重新载入.bashrc, source .bashrc
- 再次启用mysql时,如果遇到 提示,command not found: mysql,可能是环境变量没有设置成功。
- 重新设置环境变量
-
重新添加环境变量&重置用户密码1、打开terminal,输入:sudo su 回车 进入系统管理员管理目录(当然你要输入你的用户密码才能进入) 2、输入命令:vim /etc/profile 接着就进入到vim编辑界面 3、在vim编辑界面,按i进入编辑状态,接着,就可以增加路径名称,输入命令:export PATH=$PATH:/usr/local/mysql/bin 4、按下esc键,退出编辑状态 5、输入命令: :wq! (表示保存并强制退出) 6、接着就调回我之前的那个terminal界面了: 7、在这个界面接着输入命令:source /etc/profile 表示设置立即生效,当然你关闭后重启也是一样的道理 这时可以输入:mysql 回车 进行测试 如果系统还是提示 mysql: command not found怎么办? 1、苹果 -> 系统偏好设置 -> 最下边点mysql 在弹出页面中 关闭mysql服务; 2、进入终端输入:cd /usr/local/mysql/bin 3、回车后 登录管理员权限 sudo su (输入你电脑的密码) 4、回车后输入以下命令来禁止mysql验证功能 ./mysqld_safe --skip-grant-tables & (注意是mysqld) 5、回车后mysql会自动重启(偏好设置中可以看到mysql的状态会变成running) 6、接着输入命令 ./mysql 7、回车后可以看到如下效果: 出现了让人舒心的 mysql> 提示符!!! 8、下面就是修改密码 接着输入:FLUSH PRIVILEGES; 回车后,输入:SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123'); 9、重新打开一个terminal,输入:mysql -uroot -p123 即可进入MySQL数据了:
-
-
如果还是不行。原因可能是,
~/.bash_profile文件被Anaconda-navagator更改了脚本执行-
vim ~/.zshrc -
添加命令source ~/.bash_profile -
保存退出
-
- 重新设置环境变量
- 首先根据系统版本,找到对应的mysql版本。版本不一致,会导致bad cpu,报错。如果出现版本不一致,可以卸载之后,重新选择下载旧版本 。选择DMG版本,可以点点点安装。
mysql管理账户密码重置:
windows系统下
- mysqladmin一般是用于管理mysql基本设置,没有密码的情况下设置用户密码执行mysqladmin -u 用户名 -p password;有密码情况下重置密码,执行mysqladmin -u 用户名 -p 原密码 password 新密码
- 忘记或忘记密码的情况下,基本思路绕过授权列表
- 管理员身份运行cmd,执行net stop mysql 停掉mysql服务
- 手动跳过授权表运行mysqld,执行mysqld --skip-grant-tables
- 启动新的cmd,不用密码,直接运行mysql -uroot -p
- 修改密码 update mysql.user set password=password('新密码') where user='root' and host='localhost';
- 执行刷新 flush privileges
Linux系统下
- centos系统
- 没有密码的情况下设置用户密码执行mysqladmin -u 用户名 -p password;有密码情况下重置密码,执行mysqladmin -u 用户名 -p 原密码 password 新密码
- 忘记或忘记密码的情况下,基本思路绕过授权列表
-
- 停掉mysql服务,执行systemctl stop mariadb
- mysqld_safe --skip-grant-tables
- 启动另外终端,直接登录执行mysql -uroot -p
- 修改密码,刷新
- ubuntu系统
统一字符编码
windows系统
- 文件写入编码和读取编码不一致,导致乱码
- 管理员身份运行cmd,登录mysql,\s 命令可以查看编码是否一致
- 找到my_defalt.ini文件位置,新建my.ini
-
View Code1 [mysqld] 2 default-character-set=utf8 3 [client] 4 default-character-set=utf8 5 [mysql] 6 default-character-set=utf8 7 8 #-----------------------mysql5.5以上:修改方式有所改动,具体如下----- 9 [mysqld] 10 character-set-server=utf8 11 collation-server=utf8_general_ci 12 [client] 13 default-character-set=utf8 14 [mysql] 15 default-character-set=utf8
mysqld 配置的服务端的配置;mysql配置mysql自带客户端的配置;client是一个全局配置,对接入mysql的客户端的配置
-
- 查看修改结果,登录mysql, \s 命令可以查看编码是否一致
Linux系统
- centos系统为例
- 登录mysql ,\s 查看配置的编码是否一致
- vim编辑器,在etc下,创建my.cnf 配置文件, vim/etc/my.cnf
- 在my.cnf 文件中,定制mysqld,mysql,client
mac系统
-
- vim编辑器,在etc下,创建my.cnf 配置文件, vim/etc/my.cnf
- 在my.cnf 文件中,定制mysqld,mysql,client。 最后esc ,:wq
- 重启一下服务
mysql中几个自带的默认数据库:
- |information_schema | :实际上是一个视图,而非数据库,所以在文件系统中,没有与之对应的文件。功能上,用于存储数据库元数据(关于数据的数据),具体地存储着MySql服务器中其他数据库的信息,包括数据库名、表名、列的数据类型、访问权限等。可用于查看指定数据库、数据表的属
-
View Code主要数据表 常用数据表简介 CHARACTER_SETS|(字符集)表 提供了mysql实例可用字符集的信息。是SHOW CHARACTER SET结果集取之此表。 |COLLATIONS| 提供了关于各字符集的对照信息。是SHOW COLLATION;命令调用内容 |COLLATION_CHARACTER_SET_APPLICABILITY| 指明了可用于校对的字符集。这些列等效于SHOW COLLATION的前两个显示字段。 |COLUMNS| 提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname.tablename的结果取之此表。 |COLUMN_PRIVILEGES|(列权限)表 给出了关于列权限的信息。该信息源自mysql.columns_priv授权表。是非标准表。 |ENGINES| |EVENTS| |FILES| |GLOBAL_STATUS| |GLOBAL_VARIABLES| |KEY_COLUMN_USAGE| 描述了具有约束的键列。 |OPTIMIZER_TRACE| |PARAMETERS| |PARTITIONS| |PLUGINS| |PROCESSLIST| |PROFILING| |REFERENTIAL_CONSTRAINTS| |ROUTINES| 提供了关于存储子程序(存储程序和函数)的信息。此时,ROUTINES表不包含自定义函数(UDF)。名为“mysql.proc name”的列指明了对应于INFORMATION_SCHEMA.ROUTINES表的mysql.proc表列。 |SCHEMATA| 提供了当前mysql实例中所有数据库的信息。是show databases的结果取之此表。 |SCHEMA_PRIVILEGES|(方案权限)表 给出了关于方案(数据库)权限的信息。该信息来自mysql.db授权表。是非标准表。 |SESSION_STATUS| |SESSION_VARIABLES| |STATISTICS| 提供了关于表索引的信息。是show index from schemaname.tablename的结果取之此表。 |TABLES| 提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。是show tables from schemaname的结果取之此表。 |TABLESPACES| |TABLE_CONSTRAINTS| 描述了存在约束的表。以及表的约束类型。 |TABLE_PRIVILEGES|(表权限)表 给出了关于表权限的信息。该信息源自mysql.tables_priv授权表。是非标准表。 |TRIGGERS| 提供了关于触发程序的信息。必须有super权限才能查看该表 |USER_PRIVILEGES|(用户权限)表 给出了关于全程权限的信息。该信息源自mysql.user授权表。是非标准表。 |VIEWS| 给出了关于数据库中的视图的信息。需要有show views权限,否则无法查看视图信息。 |INNODB_LOCKS| |INNODB_TRX| |INNODB_SYS_DATAFILES| |INNODB_FT_CONFIG| |INNODB_SYS_VIRTUAL| |INNODB_CMP| |INNODB_FT_BEING_DELETED| |INNODB_CMP_RESET| |INNODB_CMP_PER_INDEX| |INNODB_CMPMEM_RESET| |INNODB_FT_DELETED| |INNODB_BUFFER_PAGE_LRU| |INNODB_LOCK_WAITS| |INNODB_TEMP_TABLE_INFO| |INNODB_SYS_INDEXES| |INNODB_SYS_TABLES| |INNODB_SYS_FIELDS| |INNODB_CMP_PER_INDEX_RESET| |INNODB_BUFFER_PAGE| |INNODB_FT_DEFAULT_STOPWORD| |INNODB_FT_INDEX_TABLE| |INNODB_FT_INDEX_CACHE| |INNODB_SYS_TABLESPACES| |INNODB_METRICS| |INNODB_SYS_FOREIGN_COLS| |INNODB_CMPMEM| |INNODB_BUFFER_POOL_STATS| |INNODB_SYS_COLUMNS| |INNODB_SYS_FOREIGN| |INNODB_SYS_TABLESTATS
-
- | mysql | : 是mysql的核心数据库,类似于sql server中的master表,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息。不能删除,谨慎修改。在用户验证过程中,user表,db表,tables_priv表,columns_priv表,分别用于验证用户对全局数据库,指定数据库,指定数据表,指定的数据字段进行权限验证,如果用户通过当前层级的验证则不再进行下一级别验证。如用户未通过user表的权限验证,则进行db表的权限验证,如果用户在db表的权限中有值为Y的权限,则取得这些权限并不再进行下一级别的验证。
-
View Code数据表 常用数据表功能简介 |columns_priv| 存放列级别的权限,决定了来自哪些主机的哪些用户可以访问此数据库的这个表的这个字段 |db| 存放数据库级别的权限,决定了来自哪些主机的哪些用户可以访问指定的数据库 |engine_cost| |event| |func| |general_log| |gtid_executed| |help_category| |help_keyword| |help_relation| |help_topic| |innodb_index_stats| |innodb_table_stats| |ndb_binlog_index| |plugin| |proc| |procs_priv| 存放存储过程和函数级别的权限 |proxies_priv| |server_cost| |servers| |slave_master_info| |slave_relay_log_info| |slave_worker_info| |slow_log| |tables_priv| 存放表级别的权限,决定了来自哪些主机的哪些用户可以访问指定数据库的指定数据表 |time_zone| |time_zone_leap_second| |time_zone_name| |time_zone_transition| |time_zone_transition_type| |user 存放用户账户信息以及全局级别(所有数据库)权限,决定了来自哪些主机的哪些用户可以访问数据库实例,如果有全局权限则意味着对所有数据库都有此权限
- | performance_schema | : 使用performance schema (中间没有下划线表示数据性能方案,有下划线时是代指数据库,全部大写代指数据存储引擎),通过事件机制将mysql服务的运行时状态采集并存储在performace_schema数据库。Performance Schema 主要用于监视MySQL服务器,且运行时消耗很少的性能。表的存储引擎均为PERFORMANCE_SCHEMA,而用户不能创建存储引擎为PERFORMANCE_SCHEMA的表。(主要可分为setup配置表,事件表,统计信息表等几大类)
-
View Code数据表 常用表功能简介 |accounts| 链接记录:记录了用户主机连接数信息 |cond_instances| 实例记录:条件等待对象实例,表中记录了系统中使用的条件变量的对象,OBJECT_INSTANCE_BEGIN为对象的内存地址。 |events_stages_current| 事件执行阶段记录(当前):记录了当前线程所处的执行阶段 |events_stages_history| 事件执行阶段记录(历史记录):记录了当前线程所处的执行阶段10条历史记录 |events_stages_history_long| 事件执行阶段记录(长历史):记录了当前线程所处的执行阶段10000条历史记录 |events_stages_summary_by_account_by_event_name| |events_stages_summary_by_host_by_event_name| |events_stages_summary_by_thread_by_event_name| 统计信息:按每个线程和事件来阶段统计,表结构同上。 |events_stages_summary_by_user_by_event_name| |events_stages_summary_global_by_event_name| 统计信息:按事件阶段类型聚合,每个事件一条记录,表结构同上。 |events_statements_current| 事件顶层请求记录(当前):Statments表只记录最顶层的请求 |events_statements_history| 事件顶层请求记录(历史) |events_statements_history_long| 事件顶层请求记录(长历史) |events_statements_summary_by_account_by_event_name| |events_statements_summary_by_digest| 统计信息:按照事件的语句进行聚合。 关于SQL维度的统计信息主要集中在events_statements_summary_by_digest表中,通过将SQL语句抽象出digest,可以统计某类SQL语句在各个维度的统计信息 |events_statements_summary_by_host_by_event_name| |events_statements_summary_by_program| |events_statements_summary_by_thread_by_event_name| 统计信息:按照线程和事件的语句进行聚合,表结构同上。 |events_statements_summary_by_user_by_event_name| |events_statements_summary_global_by_event_name| 统计信息:按照事件的语句进行聚合。表结构同上。 |events_transactions_current| |events_transactions_history| |events_transactions_history_long| |events_transactions_summary_by_account_by_event_name| |events_transactions_summary_by_host_by_event_name| |events_transactions_summary_by_thread_by_event_name| |events_transactions_summary_by_user_by_event_name| |events_transactions_summary_global_by_event_name| |events_waits_current| 等待事件记录(当前):记录了当前线程等待的事件 |events_waits_history| 等待事件记录(历史记录):记录了每个线程最近等待的10个事件 |events_waits_history_long| 等待事件记录(长历史):记录了最近所有线程产生的10000个事件 |events_waits_summary_by_account_by_event_name| |events_waits_summary_by_host_by_event_name| |events_waits_summary_by_instance| 统计信息:按等待事件对象聚合,同一种等待事件,可能有多个实例,每个实例有不同的内存地址,因此event_name+object_instance_begin唯一确定一条记录。 |events_waits_summary_by_thread_by_event_name| 统计信息:按每个线程和事件来统计,thread_id+event_name唯一确定一条记录。 |events_waits_summary_by_user_by_event_name| |events_waits_summary_global_by_event_name| 统计信息:按等待事件类型聚合,每个事件一条记录 |file_instances| 实例记录:文件对象实例,表中记录了系统中打开了文件的对象,包括ibdata文件,redo文件,binlog文件,用户的表文件等,open_count显示当前文件打开的数目,如果重来没有打开过,不会出现在表中。 |file_summary_by_event_name| 统计信息:具体文件统计(物理IO维度) |file_summary_by_instance| 统计信息:按事件类型统计(物理IO维度) |global_status| |global_variables| |host_cache| |hosts| 链接记录:记录了主机连接数信息 |memory_summary_by_account_by_event_name| |memory_summary_by_host_by_event_name| |memory_summary_by_thread_by_event_name| |memory_summary_by_user_by_event_name| |memory_summary_global_by_event_name| |metadata_locks| |mutex_instances| 实例记录:互斥同步对象实例,表中记录了系统中使用互斥量对象的所有记录,其中name为:wait/synch/mutex/*。LOCKED_BY_THREAD_ID显示哪个线程正持有mutex,若没有线程持有,则为NULL。 |objects_summary_global_by_type| |performance_timers| |prepared_statements_instances| |replication_applier_configuration| |replication_applier_status| |replication_applier_status_by_coordinator| |replication_applier_status_by_worker| |replication_connection_configuration| |replication_connection_status| |replication_group_member_stats| |replication_group_members| |rwlock_instances| 实例记录:读写同步锁对象实例,表中记录了系统中使用读写锁对象的所有记录,其中name为 wait/synch/rwlock/*。WRITE_LOCKED_BY_THREAD_ID为正在持有该对象的thread_id,若没有线程持有,则为NULL。READ_LOCKED_BY_COUNT为记录了同时有多少个读者持有读锁。(通过 events_waits_current 表可以知道,哪个线程在等待锁;通过rwlock_instances知道哪个线程持有锁。rwlock_instances的缺陷是,只能记录持有写锁的线程,对于读锁则无能为力)。 |session_account_connect_attrs| |session_connect_attrs| |session_status| |session_variables| |setup_actors| 配置用户纬度的监控,默认监控所有用户。 |setup_consumers| 配置events的消费者类型,即收集的events写入到哪些统计表中。 |setup_instruments| 配置具体的instrument,主要包含4大类:idle、stage/xxx、statement/xxx、wait/xxx |setup_objects| 配置监控对象,默认对mysql,performance_schema和information_schema中的表都不监控,而其它DB的所有表都监控。 |setup_timers| 配置每种类型指令的统计时间单位。MICROSECOND表示统计单位是微妙,CYCLE表示统计单位是时钟周期,时间度量与CPU的主频有关,NANOSECOND表示统计单位是纳秒。但无论采用哪种度量单位,最终统计表中统计的时间都会装换到皮秒。(1秒=1000000000000皮秒) |socket_instances| 实例记录:活跃会话对象实例 表中记录了thread_id,socket_id,ip和port,其它表可以通过thread_id与socket_instance进行关联,获取IP-PORT信息,能够与应用对接起来。 event_name主要包含3类: wait/io/socket/sql/server_unix_socket,服务端unix监听socket wait/io/socket/sql/server_tcpip_socket,服务端tcp监听socket wait/io/socket/sql/client_connection,客户端socket |socket_summary_by_event_name| |socket_summary_by_instance| |status_by_account| |status_by_host| |status_by_thread| |status_by_user| |table_handles| |table_io_waits_summary_by_index_usage| 与table_io_waits_summary_by_table类似 |table_io_waits_summary_by_table| 统计信息:根据wait/io/table/sql/handler,聚合每个表的I/O操作(逻辑IO纬度) |table_lock_waits_summary_by_table| 统计信息:聚合了表锁等待事件,包括internal lock 和 external lock |threads| |user_variables_by_thread| |users| 链接记录:记录用户连接数信息 |variables_by_thread
-
- | sakila | :示例数据库,Sakila样本数据库是MySQL官方提供的一个模拟DVD租赁信息管理的数据库,提供了一个标准模式,可作为书中例子,教程、文章、样品,等等,对学习测试来说是个不错的选择。(更新ing)
- | sys | :sys库里面的表、视图、函数、存储过程可以使我们更方便、快捷的了解到MySQL的一些信息,比如哪些语句使用了临时表、哪个SQL没有使用索引、哪个schema中有冗余索引、查找使用全表扫描的SQL、查找用户占用的IO等。sys库里这些视图中的数据,都是从information_schema里面获得的,目标是把performance_schema的把复杂度降低,让DBA能更好的阅读这个库里的内容。让DBA更快的了解DB的运行情况。数据表可分为两大类(字母开头:显示是格式化的数,容易阅读。 x$开头 : 原始类数据适合工具采集数据,)
-
View Code数据表 主要信息分类简介 |host_summary| host : 以IP分组相关的统计信息 |host_summary_by_file_io| |host_summary_by_file_io_type| |host_summary_by_stages| |host_summary_by_statement_latency| |host_summary_by_statement_type| |innodb_buffer_stats_by_schema| innodb buffer 相关信息 |innodb_buffer_stats_by_table| |innodb_lock_waits| |io_by_thread_by_latency| 数据内不同维度展的IO相关的信息 |io_global_by_file_by_bytes| |io_global_by_file_by_latency| |io_global_by_wait_by_bytes| |io_global_by_wait_by_latency| |latest_file_io| |memory_by_host_by_current_bytes| 以IP,连接,用户,分配的类型分组及总的占用显示内存的使用 |memory_by_thread_by_current_bytes| |memory_by_user_by_current_bytes| |memory_global_by_current_bytes| |memory_global_total| |metrics| DB的内部的统计值 |processlist| 线程相关的信息(包含内部线程及用户连接) |ps_check_lost_instrumentation| 没有工具统计的一些变量(没看出来存在的价值) |schema_auto_increment_columns| 表结构相关的信息,例如: 自增,索引, 表里的每个字段类型,等待的锁等等 |schema_index_statistics| |schema_object_overview| |schema_redundant_indexes| |schema_table_lock_waits| |schema_table_statistics| |schema_table_statistics_with_buffer| |schema_tables_with_full_table_scans| |schema_unused_indexes| |session| 用户连接相关的信息 |session_ssl_status| |statement_analysis| 基于语句的统计信息(重点) |statements_with_errors_or_warnings| 出错的语句,进行全表扫描, 运行时间超长,排序相等(重点) |statements_with_full_table_scans| |statements_with_runtimes_in_95th_percentile| |statements_with_sorting| |statements_with_temp_tables| |sys_config| |user_summary| 只是以用户分组统计 |user_summary_by_file_io| |user_summary_by_file_io_type| |user_summary_by_stages| |user_summary_by_statement_latency| |user_summary_by_statement_type| |version| |wait_classes_global_by_avg_latency| 等待事件 |wait_classes_global_by_latency| 以IP,用户分组统计出来的一些延迟事件 |waits_by_host_by_latency| |waits_by_user_by_latency| |waits_global_by_latency
-
- | world| : 示例数据库(更新ing)
mysql支持的数据类型可分为三类:数值类型、字符串类型、日期和时间类型
- 数值类型:
-
具体类型
存储大小 存储范围(有符号) 存储范围(无符号) 用途 应用 TINYINT 1 字节 (-128,127) (0,255) 整型:小整数值 tinyint(m) SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 整型:大整数值 smallint(m) MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 777 215) 整型:大整数值 mediumint(m) INT或INTEGER 4 字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 整型:大整数值 int(m) BIGINT 8 字节 (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 整型:极大整数值 bigint(m) FLOAT 4 字节 (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度
浮点数值float(m,d)
8位精度(4字节)
m总个数,d小数位
DOUBLE 8 字节 (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度
浮点数值double(m,d)
16位精度(8字节)
m总个数,d小数位
DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值
浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。
decimal(m,d) 参数 m<65 是总个数,d<30 且 d<m 是小数位。
-
- 日期和时间数据类型
-
类型 大小
(字节)范围 格式 用途 DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值 TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 时间值或持续时间 YEAR 1 1901/2155 YYYY 年份值 DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值 TIMESTAMP 4 1970-01-01 00:00:00/2038
结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07
YYYYMMDD HHMMSS 混合日期和时间值,时间戳
- 字符串数据类型
-
类型 大小 用途 应用 CHAR 0-255字节 定长字符串
.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。
所以 char 类型存储的字符串末尾不能有空格,varchar 不限于此。
char(n) 固定长度,char(4) 不管是存入几个字符,都将占用 4 个字节,varchar
是存入的实际字符数 +1 个字节(n<=255)或2个字节(n>255),
所以 varchar(4),存入 3 个字符将占用 4 个字节。
char 类型的字符串检索速度要比 varchar 类型的快。
char(n) VARCHAR 0-65535 字节 变长字符串
varchar 可指定 n,text 不能指定,内部存储 varchar 是存入的实际字符数 +1 个字节(n<=255)
或 2 个字节(n>255),text 是实际字符数 +2 个字节。
varchar 可直接创建索引,text 创建索引要指定前多少个字符。
varchar 查询速度快于 text, 在都创建索引的情况下,text 的索引似乎不起作用。
varchar(n) TINYBLOB 0-255字节 不超过 255 个字符的二进制字符串 TINYTEXT 0-255字节 短文本字符串 BLOB 0-65 535字节 二进制形式的长文本数据
_BLOB和_text存储方式不同,_TEXT以文本方式存储,英文存储区分大小写,而_Blob是以二进制方式存储,
不分大小写。
_BLOB存储的数据只能整体读出。
_TEXT可以指定字符集,_BLO不用指定字符集。
TEXT 0-65 535字节 长文本数据
text 类型不能有默认值。
MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据 MEDIUMTEXT 0-16 777 215字节 中等长度文本数据 LONGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据 LONGTEXT 0-4 294 967 295字节 极大文本数据
-
- 枚举类型与集合
- 实现对输入内容进行有效性限制。枚举实现单选,集合实现多选。输入的内容如果不在有效范围内,以保存为空
- 枚举类型, enum('可选项1',‘可选项2’,……)
- 集合类型, set(‘可选项1’,‘可选项2’,……)
- 数据类型属性特殊关键字
-
MySQL关键字 含义 NULL 数据列可包含NULL值 NOT NULL 数据列不允许包含NULL值 DEFAULT 默认值 PRIMARY KEY 主键 FORRIGN KEY 标注外键 UNIQUE KEY 标注本字段的值必须是唯一的 AUTO_INCREMENT 自动递增,适用于整数类型 UNSIGNED 无符号 CHARACTER SET name 指定一个字符集 ZIROFILL 使用0进行填充 - 数据类型限制条件使用:
- 一般NOT NULL 会和DEFAULT进行组合使用,达到设置字段不为空并且给与默认值的效果。
- UNIQUE KEY 设置可以是单列唯一,也可以联合唯一
-
- mysql数据库登录执行语句: mysql -u 用户名 -p // 在mysql5.7 (当前最新版本)中h: 指定数据库IP地址;-P: 指定端口,默认的3306时,可以忽略;-u: 指定登陆用户名;-p: 指定登陆密码
- 输入用户密码
- use 数据库名;
- mysql数据库用户管理
- 完成root用户登录后可以完成新用户的增加,删除,修改等操作。实际上是对MySql 默认自带的mysql数据库进行相应操作。
- 用户的管理操作
-
-
功能
执行语句
执行效果
备注
增加用户1
create user 'guest01' @'localhost' identified by "password01";
完成用户名guest01,指定登录地址为localhost,登录密码为password01的用户创建,dentified by 会将纯文本密码加密作为散列值存储修改
1.登录主机地址可以不指定,或“%”默认,表示所有主机。
2.另外localhost不会被解析成IP地址,直接通过UNIXsocket连接;
127.0.0.1会通过TCP/IP协议连接,并且只能在本机访问增加用户同时授权1
grant all privileges on *.* to 'guest04' @'localhost' identified by 'password04';
创建超级用户guest04,指定登录地址为localhost,密码……
灵活运用通配符,对数据库,数据表进行权限设置
增加用户同时授权2
grant all privileges on testdb.* to 'guest04' @'127.0.0.1' identified by 'password04';
针对数据库testdb,创建完全权限的guest04,指定登录地址为回环地址“127.0.0.1”,密码……
增加用户同时授权3
grant select,INSERT,UPDATE on testdb.tb1 to 'guest04' @'192.168.250.250' identified by 'password04';
针对数据库testdb下的数据表tb1,创建只有查询、新增、更新权限的guest04,指定登录地址为‘192.168.250.250’,密码……
删除用户1
drop user 'guest01' @'localhost'
删除指定登录地址为localhost,登录名为guset01的用户
当定义的用户未指定主机时,可省略 @……
删除用户2
delete from mysql.user where user = 'guest03' and host ='localhost';
删除指定登录地址为localhost,登录名为guest03的用户
修改用户名
rename user 'guest02' @'localhost' to 'c_guest02' @ 'localhost'
将定义在指定主机名为localhost下的用户guest02修改为指定主机为localhost的用户c_guest02
1.在mysql5.x 之前的版本,修改user表信息,用update
2.当定义的用户未指定主机时,可省略 @……修改用户绑定的登录主机
更新ing
修改用户登录密码1
set password for 'guest02'@'localhost' =password('pwd02');
将guest02的密码改为pwd02
1.mysql5.7以后mysql.user表中没有了password字段,而是使用authentication_string来代替
2.在筛选用户时,用户名和绑定的登录主机看成一个整体修改用户登录密码2
update user set password = password('pwd02') where user = 'guest02' and host = 'localhost';
将guest02的密码改为pwd02
修改用户登录密码3
update user set authentication_string = password('pwd02') where user = 'guest02' and host = 'localhost';
将guest02的密码改为pwd02
修改用户登录密码4
alter user 'guest02'@'%' identified by 'pwd02'
将guest02的密码改为pwd02
修改用户登录密码5(普通用户自己修改)
set password = password('pwd02');
普通用户guest02登陆后自己修改
查看用户信息1
select user();
查看当前用户的信息
查看用户信息1
select host,user,password from user;
从user列表中搜索查看host,user,password字段
查看用户信息2
select host,user,authentication_string from user;
-
- mysql数据库用户用户权限的管理操作
- 完成root用户登录
- 用户权限管理操作
- 用户授权基本语法: grant 权限1,权限2,...权限n on 数据库名称 . 表名称 to “用户名”@"用户登录地址" ';
- 查看用户授权基本语法:show grants for "用户名"@“用户登录地址”; (查看当前用户权限 show grants;)
- 移除用户的授权基本语法:revoke 权限1,权限2,...权限n on 数据库名称 . 表名称 from “用户名”@"用户登录地址";
-
事务动作
执行语句(grant)
事务动作2
执行语句(revoke)
对用户进行数据库全局级别的单一授权
grant select on *.* to guest04@localhost;
对用户进行数据库全局级别的单一取消授权
revoke select on *.* from guest04@localhost;
对用户进行数据库全局级别的全权授权并允许对其他用户进行权限管理
grant all privileges on *.* to 'guest04'@'localhost' with grant option; //关键字privileges可以省略
取消对用户进行数据库全局级别的全权授权并停止其二次授权
revoke all on *.* from 'guest04'@'localhost' with grant option;
对用户进行指定数据库全权授权
grant all on testdb.* to guest04@localhost;
对用户进行指定数据库全权取消授权
revoke all on testdb.* from guest04@localhost;
对指定用户进行指定数据库下指定数据表进行多授权
grant insert,update,select on testdb.tb1 to guest04@localhost;
对指定用户进行指定数据库下指定数据表进行取消多授权
revoke insert,update,select on testdb.tb1 from guest04@localhost;
对用户进行指定数据库下的指定数据表中的指定列进行单一授权
grant select (id, se, rank) on testdb.apache_log to guest04@localhost ;
对用户进行指定数据库下的指定数据表中的指定列进行单一取消授权
revoke select (id, se, rank) on testdb.apache_log from guest04@localhost ;
对程序存储过程的执行授权
grant execute on procedure testdb.pr_add to 'guest04'@'localhost'
取消对程序的存储过程执行授权
revoke execute on procedure testdb.pr_add from 'guest04'@'localhost'
对函数的执行授权
grant execute on function testdb.fn_add to 'guest04'@'localhost'
取消对函数的执行授权
revoke execute on function testdb.fn_add from 'guest04'@'localhost'
对函数或存储过程的创建进行授权
grant create routine on testdb.* to 'guest04'@'localhost' ;
对函数或存储过程的创建取消授权
revoke create routine on testdb.* from 'guest04'@'localhost' ;
对函数或存储过程的修改或删除进行授权
grant alter routine on testdb.* to 'guest04'@'localhost' ;
对函数或存储过程的修改或删除进行取消授权
revoke alter routine on testdb.* from 'guest04'@'localhost' ;
函数或过程的执行权限(call)的授权
grant execute on testdb.* to 'guest04'@'localhost' ;
函数或过程的执行权限(call)取消授权
revoke execute on testdb.* from 'guest04'@'localhost' ;
- 用户授权基本语法: grant 权限1,权限2,...权限n on 数据库名称 . 表名称 to “用户名”@"用户登录地址" ';
- 用户权限privileges等级简介
- all privileges: 所有权限(如果不指定数据库、数据表,则创建的是超级用户);
- select: 查询;
- insert: 新增记录;
- update: 更新记录;
- delete: 删除记录;
- create: 创建表;
- drop: 删除表;
- alter: 修改表结构;
- index: 索引相关权限;
- execute: 执行存储过程与call函数
- references: 外键相关;
- create temporary tables:创建临时表;
- lock tables 锁表;
- create view 创建视图;
- show view 查看视图结构;
- create routine 创建函数或存储过程的权限
- alter routine: 更改或者删除存储函数或者存储过程的权限
- event: 创建,修改,执行和删除事件(event)的权限。
- trigger: 触发器相关;
- windows 系统下:
-
- (1)停止mysql服务,window下:输入net stop mysql ;
- (2) 输入命令,window下: mysqld --skip-grant-tables ;
- (3)新打开一个窗口,用root用户进入,不需要密码:mysql -u root。
- (4)新窗口输入命令:update mysql.user set Password=password('password') where User='user';
- (5)新窗口输入命令: flush privileges。 用于刷新加载权限表。
- (6)退出
- (7)重启mysql服务。window下:net start mysql 。
- Linux系统下:
- (1)停止mysql服务, linux下输入service mysql stop。
- (2) 输入命令, linux下:mysqld_safe --skip-grant-tables user=mysql
- (3)新打开一个窗口,用root用户进入,不需要密码:mysql -u root。
- (4)新窗口输入命令:update mysql.user set Password=password('password') where User='user';
- (5)新窗口输入命令: flush privileges。 用于刷新加载权限表。
- (6)退出
- (7)重启mysql服务。 linux下:输入service mysql start。
- 用root用户登录,或者其他取得数据库级别对应权限的用户登录
- 基本操作执行语句列举
-
事件类型
基本语法
备注
创建数据库1
create database "数据库名称";
创建一个简单的数据库不做任何指定
创建数据库2
create database "数据库名称" DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
创建数据库默认编码utf8,排序规则按utf8_general_ci
创建数据库3
create database "数据库名称" character set utf8;
创建数据库,默认编码utf8
删除数据库
drop database '数据库名称';
变更当前数据库的编码格式
alter database “数据库名称”character set 编码类型;
查看数据库1
show databases;
查看当前可用数据库列表
查看数据库2
select database();
查看当前使用的数据库
使用数据库
use "数据库名称";
-
- 表级别常见字段约束条件
- 默认值 default
- 非空设置 not null
- 自增列(一张表只能有一个自增列,数字,必须是索引) auto_increment
- 主键设置 primary key
- 数据库引擎设置 engine = innodb,
- 查看数据库引擎 show engines (innodb, myisa,memory,blackhoe,mrg_myisa,csv,,archive,performance_schema,federated)
- 基本概念(事务,原子操作,回滚)
- 数据表级别基本操作
-
事务类型
执行基本语法
备注
创建表
create table 数据表名称(字段名 数据类型 约束条件,字段名……);
此处数据库引擎可根据需要更换,默认编码也可以换成需要的类型。在不需要时可以使用默认,省略指定条件
创建表
create table 数据表名称(字段名 数据类型 约束条件,字段名……)engine=innodb,default character set utf8;
创建表2设置数据有效性
在字段的约束条件中利用enum 设定插入数据的取值范围。
例如
create table shirt(name varchar(10),size enum("s","m","l","xl"));创建表3设置数据取值范围
在创建表约束条件中,用set可设置取值范围,并且此时可在范围重复取值多次。
create table myset_1(col set("a","b","c"))
删除数据表
drop table 数据表名;
清空数据表
delete from 数据表名;
清空后自增列不恢复
清空数据表2
truncate table 数据表名;
清空后自增列恢复初始状态
修改列*添加列
alter table 数据表名 add 列名 约束条件;
修改列*删除列
alter table 数据表名 drop column 列名;
修改列*修改列1
alter table 数据表名 modify column 列名 约束条件;
修改列*修改列2
alter table 数据表名 change 原列名 新列名 约束条件;
修改主键*添加主键
alter table 数据表名 add primary key (列名);
修改主键*删除主键1
alter table 数据表名 drop primary key;
修改主键*删除主键2
alter table 数据表名 modify 列名 类型,drop primary key;
修改外键*添加外键1
alter table 从属表名 add constraint 外键关系名 foreign key 从属表(外键字段) references 主表(主键字段);
外键关系可看成不显示的一种对应关系
修改外键*添加外键2
alter table 从属表名 add constraint 外键关系名 foreign key 从属表(外键字段) references 主表(主键字段);
注意用了不必要的引号,会报错
修改外键*添加外键3
在创建数据表的时候,直接在约束条件中,CONSTRAINT 外键关系名 FOREIGN KEY (外键字段) REFERENCES 主表 (主表字段),
查看外键
show create table 数据表名
修改外键*删除外键
alter table 从属表名 drop foreign key 外键关系名;
修改默认值*添加默认值
alter table 数据表名 alter 列名 set default "默认值";
修改默认值*删除默认值
alter table 数据表名 alter 列名 drop default;
查看数据表
show tables;
查看指定数据表的结构
desc 数据表名称;
查看字段内容
select 字段名,字段名 from 数据表名;
-
- 表记录查询限制条件执行顺序与优先级:
- select 字段1,字段2 from 库.表 where 限制条件 group by 分组字段 having 过滤筛选条件 order by 排序条件 limit 限制数量
- 执行查询执行优先级
- from 库.表 :找到并打开具体的表
- where 限制条件 : 根据限制条件,查出记录
- group by 分组字段 : 注意,使用分组字段后,最终的结果,即select的字段 是归类后的结果,一般会和group_concat() 、max、min、count、sum、avg等聚合函数结合使用。默认情况下,如果没有明确给出的分组条件,结果是作为一个大组呈现的。这也就是为什么能在select后使用聚合函数。
- having 过滤条件 : 是在分组完成之后再进行的筛选的。和where 的区别,一,是执行顺序,二,having添加的过滤条件,可以是group_by 的分组聚合函数,而where 不能使用聚合函数。
- select distinct 字段1,字段2: 在select字段中,可能会出现重复记录,select distinct 字段1,字段2 可实现字段的去重操作。另外,显示的字段格式,可以包含聚合函数、四则运算等在内的函数
- order by 排序条件 : 排序条件包括字段、排序方式(默认升序asc ,降序desc)
- limit 限制显示条数 :限制显示条件,包括起始位置、步长两部分。
-
#执行分组查询时,如果没有设置ONLY_FULL_GROUP_BY,于是也可以有结果,默认都是组内的第一条记录,但其实这是没有意义的
如果想分组,则必须要设置全局的sql的模式为ONLY_FULL_GROUP_BY
mysql> set global sql_mode='ONLY_FULL_GROUP_BY';
|
事务类型 |
执行基本语法 |
备注 |
|
插入数据 |
insert into 数据表名 (字段1,字段2……) values (value1,value2……); |
|
|
数据迁移 |
insert into 数据表1名(字段1,字段2,……) select (字段1,字段2,……)from数据表2名 where 筛选条件; |
|
|
删除数据 |
delete from 数据表名 where 筛选条件; |
筛选条件可用and,or组合 |
|
修改数据 |
update 数据表名 set 字段1=value1,字段2=value2,…… where 筛选条件 |
|
|
普通查询数据 |
select 字段1,字段2,…… from 数据表名 where 筛选条件; |
筛选条件可以用精确指定,也可以用范围:>、<、=、>=、<=、!=、between、in、not in(其中in可借助其他表的筛选结果实现动态筛选) |
|
查询数据并按指定顺序排序显示 |
select 字段1,字段2,…… from 数据表名 where 筛选条件 order by 字段n,字段m desc; |
逆序排列,用 asc 。 |
|
查询数据使用通配符1 |
select * from 数据表 where name like "abc%"; |
匹配多个使用abc开头的字符串 |
|
查询数据使用通配符2 |
select * from 数据表 where name like "abc___"; |
匹配使用abc开头后面字符数量为下划线个数的字符 |
|
查询数据使用限制limit1 |
select * from 数据表 limit 5; |
|
|
查询数据使用限制limit2 |
select * from 数据表 limit 开始行号,记录条数; |
|
|
查询数据使用限制limit3 |
select * from 数据表 limit 记录条数 offset 开始行号; |
|
|
查询数据并分组1 |
select nid,num from 数据表 group by num; |
|
|
查询数据并分组2 |
select nid,num from 数据表 group by num,nid; |
分组条件先后 |
|
查询数据并分组3 |
select nid num from 数据表 where nid>10 group by num,nid order nid desc; |
group by 作用于where筛选之后,order之前 |
|
查询数据并分组4 |
select nid num,count(num),sum(score),max(score),min(score) from 数据表 group by num,nid; |
|
|
查询数据利用聚合条件筛选 |
select num from 数据表 group by num having max(id)>20; |
having聚合筛选条件,作用在group by之后 |
|
联表查询 |
表1 left join 表2 on |
left join on |
|
联合查询 |
select
t_score.sid,t_score.student_id,t_score.course_id,t_student.sname,t_course.cname,t_score.number
from t_score |
- 事务
- 开启事务语法: begin;
- 回滚的语法: rollback;
- 数据提交的语法: commit;
- 索引
- mysql的索引查找用的是B+Tree 算法
- mysql索引的建立对mysql的高效运行至关重要,索引可以大大提高检索速度。但是,使用索引后,mysql在更新存储原数据的时候,还要更新存储索引hash数据,如果大量使用索引,会导致磁盘空间紧张,效率反而会降低。
- 索引包括单列索引,组合索引。主键本身就是一种索引。
- 查看索引 基本语法: show index from 数据表名;
- 添加索引,基本语法: create index 索引名称 on 数据表名称(字段名称(字段长度));
- 修改索引,基本语法: alter 数据表名 add index 索引名称 on (字段名称(字段长度));
- 删除索引,基本语法:drop index 索引名称 on 数据表名;
- 创建表时直接指定索引,基本语法: create table 数据表名(id int not null, username varchar(24) not null, index 索引名称 (字段名称(字段长度)));
- 唯一索引,指定索引列的值必须唯一,但允许有空值,如果是组合索引,则列值得组合必须唯一。
- 创建唯一索引基本语法: create unique index 索引名称 on 数据表名(字段名称(字段长度))
- 修改表结构基本语法: alter 数据表名 add unique index 索引名称 on (字段名称(字段长度))
mysql数据库的数据备份和恢复
- 数据备份,mysqldump -uroot -p -B *** > 备份的文件存储路径
- 例如,mysqldump -uroot -p -B crm2>f:\mysql备份.sql
- 数据还原恢复
- mysql -uroot -p < f:\mysql备份.sql
mysql 慢日志
慢日志在日常数据库运维中经常会用到,我们可以通过查看慢日志来获得效率较差的 SQL ,然后可以进行 SQL 优化。
MySQL 并没有开启慢日志,可以通过修改 slow_query_log 参数来打开慢日志。与慢日志相关的参数介绍如下:
- slow_query_log:是否启用慢查询日志,默认为0,可设置为0、1,1表示开启。
- slow_query_log_file:指定慢查询日志位置及名称,默认值为host_name-slow.log,可指定绝对路径。
- long_query_time:慢查询执行时间阈值,超过此时间会记录,默认为10,单位为s。
- log_output:慢查询日志输出目标,默认为file,即输出到文件。
- log_timestamps:主要是控制 error log、slow log、genera log 日志文件中的显示时区,默认使用UTC时区,建议改为 SYSTEM 系统时区。
- log_queries_not_using_indexes:是否记录所有未使用索引的查询语句,默认为off。
- min_examined_row_limit:对于查询扫描行数小于此参数的SQL,将不会记录到慢查询日志中,默认为0。
- log_slow_admin_statements:慢速管理语句是否写入慢日志中,管理语句包含 alter table、create index 等,默认为 off 即不写入。


