数据库入门 名词 DB,Database,数据库,用于存储和管理数据 DBMS,DataBase Management System,数据库管理系统,管理数据库 网状型数据库 层次型数据库 关系型数据库RDBMS,Relationship DataBase Management System 关系型数据库:基于关系模型所创建的数据库,关系模型是基于二维表的模型 数据库用表来存放具有相同属性的实体.表分为行和列,一行(一条记录)表示一个实体,一列表示实体的一个属性. 实体相当于java中的对象,每一列相当于java对象中的属性. 关系:就是表.表和表之间的关系就是实体和实体之间的关系 记录:就是一行,表示一个实体.(又称元组) 字段:就是一列,表示实体的一个属性.(又称域) 表的注意事项 列具有固定的数据类型 每行是唯一的 列没有顺序 行没有顺序 列有一个唯一的名称 关系型数据库的种类 DB2,IBM oracle ,Oracle公司,收费 ms sql server ,微软 mysql,开源,免费 mysql安装 软件版本 mysql-installer-community-5.6.12.0.msi 安装 ->Install MySQL Products ->I accept the license terms->Next ->Skip the check for updates(not recommended)->Next 跳过检测更新 ->Custom->Installation Path(安装路径)和Data Path(数据库文件存放路径) 建议选成一样->Next ->全选吧 Next ->Execute ->Next ->Next ->Next (默认配置:开发服务器,使用最少内存;开启TCP/IP访问,使程序可以连接到数据库,默认端口3306;) ->密码自己填(要记住)->Next ->去掉Start the MySQL Server at System Startup(去掉开机启动,上面那个是服务名,要记住) ->Next ->Next(稍等会儿才能点) ->Finish (那个启动客户端管理软件,想选就选) 需要手动配置path,可以访问bin目录下的命令,例如:F:\chengxu\mysql\MySQL Server 5.6\bin; mysql目录结构 bin目录,mysql所有命令 data目录,数据库db的目录 my.ini,mysql配置文件 注意: mysql数据库使用UTF-8编码需要写成UTF8 mysql的默认端口:3306 mysql的默认账号:root mysql启动 启动windows服务:cmd > net start mysql56 --mysql56是服务名 手动运行exe文件:cmd > mysqld 手动运行时,当关闭窗口时程序就会停止,而服务可以后台运行. 登录 例如:cmd > mysql -uroot -p1234 格式1:cmd > mysql -u账号 -p密码 [-h主机] 格式2:cmd > mysql --user=账号 --password=密码 [--host=主机] 也可以 cmd > mysql -u账号 -p 回车,则需要再次输入密码(不过会显示*号) 常用的显示命令 show databases; 显示当前数据库服务器中的所有数据库 use 库名; 打开数据库 show tables; 显示当前数据库中的所有表 select database(); 查询当前所使用的数据库名称 status; 查询当前数据库的状态 desc 表名; 查询当前数据库中某表的表结构 show character set; 显示所支持的字符集 注意: 在命令中编写的sql语句,必须使用分号”;“结尾 默认的几个数据库(了解) information_schema 提供了访问数据库元数据的方式.元数据是关于数据的数据,如数据库名或表名,列的数据类型等 mysql mysql核心数据库,用来管理其他数据库的数据库。不能删除 performance_schema 主要用于收集数据库服务器性能参数.提供进程等待的详细信息,保存历史的事件汇总信息等 test 测试数据库,是一个完全空的数据库,可以删除 中文乱码 显示表的创建语句:mysql> show create table users; 显示数据库编码环境变量:mysql> show variables like '%char%'; 原因: character_set_client值为utf-8,但命令行是gbk的. 解决方案: 将character_set_client , character_set_connection , character_set_results 三个值设置为和命令行一样 解决方案:mysql> set names gbk; SQLyog安装 用来管理mysql数据库的图形软件 安装即可,很简单 序列号: name 3ddown code 7c799fe606582b12 刚进入软件,点击New...创建与数据库的连接 Database(s)为需要连接的数据库名称,多个名称用分号隔开,如果没有添加将显示所有数据库 日期函数 常用 当前时间 now() 转换 日期转字符串 date_format(日期,格式) -- date_format('2008-08-08 22:23:01', '%Y%m%d%H%i%s') 字符串转日期 str_to_date(字符串,格式) 转换为天 to_days(日期) 计算 增加 date_add(日期, interval 数值 字段) -- date_add(now(), interval 1 hour) 计算日期间隔 datediff(日期1,日期2) 计算时间间隔 timediff(日期1,日期2) 获取 日期部分 date(日期) 时间部分 time(日期) 年份 year(日期) 月份 month(日期) 天 day(日期) 小时 hour(日期) 分钟 minute(日期) 秒 second(日期) 判断日期范围(2016-08-08 到 2016-08-11 全天) while 日期>='2016-08-08' and 日期<='2016-08-12' while 日期 between '2016-08-08' and '2016-08-12' while date(日期)>='2016-08-08' and date(日期)<='2016-08-11' mysql事务操作 开启事务:start transaction; 提交事务:commit; 回滚事务:rollback; 修改隔离级别:set session transaction isolation level 隔离级别 查询隔离级别: select @@tx_isolation; 数据库锁 下列考虑的都是innoDB引擎 锁类型 行级锁 开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高 页级锁 开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般 表级锁 开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低 行锁类型 共享锁(S):允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。 排他锁(X):允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和排他写锁。 锁和事务 行锁依赖于事务,事务提交或回滚,锁自动释放 锁和语句 查询语句(select),无锁 查询语句手动加锁: 共享锁: select ... LOCK IN SHARE MODE; 排他锁: select ... FOR UPDATE; 更新语句(update,delete,insert),会自动给涉及的数据集加 排它锁 (如果存在子查询,则子查询的表会添加排他锁) 行锁实现方式: 通过给索引上的索引项加锁来实现的 所以,只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁 表锁 事务需要更新大部分或全部数据,表又比较大, 可以考虑使用表锁 可手动使用LOCK TABLES获取表锁,这里暂不讨论 更新语句的set中可以写子查询
mysql
最新推荐文章于 2022-04-22 21:08:46 发布