mysql数据库基础
2018-06-29 10:39:11 1 举报
AI智能生成
mysql数据库基础
作者其他创作
大纲/内容
<span>MySQL</span>数据简介
<div>MySQL的优势</div>
<div>运行速度快</div><div>使用成本低</div><div>可移植性强</div><div>适用用户广</div>
MySQL的存储引擎
<div>MyISAM<br></div>
<div>MyISAM类型表文件</div><div>*.frm:表结构定义文件</div><div>*.MYD:数据文件</div><div>*.MYI:索引文件</div>
InnoDB 支持事务处理
<div>InnoDB类型表文件</div><div>*.frm:表结构定义文件</div><div>ibdata1文件</div>
Memory
CSV
MySQL安装目录
<div>主要文件夹</div><div>bin</div><div>include</div><div>lib</div><div>share</div>
MySQL配置文件
my.ini:记录MySQL配置信息,可修改配置内容,如端口号,字符集等
安装版路径:<span>C:/ProgramData/MySQL/MySQL Server 5.5/Data/</span>
MySQL常用命令
启停数据库
net start mysql
net stop mysql
连接MySQL
mysql –h服务器主机地址 –u 用户名 –p密码
<div>连接本机</div><div>mysql –u root – p</div>
<span>MySQL</span>数据库安装
下载地址https://dev.mysql.com/downloads/mysql/
SQL(Structured Query Language):结构化查询语言
<div>DML<br></div><div>(数据操作语言)<span> </span>用来操作数据库中所包含的数据<span> </span><br>INSERT</div><div>UPDATE</div><div>DELETE</div>
插入INSERT
语法<br>INTO 表名 [(字段名列表)] VALUES (值列表);<br>
<div>INSERT INTO `student`(`loginPwd`,`studentName`,`gradeId`,`phone`,`bornDate`)<br></div><div>VALUES('123','黄小平',1,'13956799999','1996-5-8');</div>
语法<br><div>INSERT INTO 新表(字段名列表)</div><div> VALUES(值列表1),(值列表2),……,(值列表n);</div>
<div>INSERT INTO `subject`(`subjectName`,`classHour`,`gradeID`)<br></div><div>VALUES('Logic Java',220,1),('HTML',160,1),('Java OOP',230,2);</div>
<div>将查询结果插入新表<br></div><div>CREATE TABLE 新表(SELECT 字段1,字段2…… FROM 原表);<br></div>
<div>如新表已存在,不能重复创建</div>
<div>CREATE TABLE `phoneList`(</div><div>SELECT `studentName`,`phone`</div><div>FROM `student`);</div>
更新UPDATE
语法<br><div>UPDATE 表名 </div><div>SET 字段1=值1,字段2=值2,…,字段n=值n </div><div>[WHERE 条件];</div>
<div>UPDATE student SET sex = ‘女’;</div><div>UPDATE student SET address = ‘北京女子职业技术学校家政班’</div><div>WHERE address = ‘北京女子职业技术学校刺绣班’;</div>
删除
语法<br><div>DELETE FROM 表名 [WHERE条件];</div>
<div>DELETE FROM student WHERE studentName = ‘王宝宝’;</div><div>TRUNCATE TABLE student;</div>
语法<br><div>TRUNCATE TABLE 表名;</div>
<div>TRUNCATE语句删除后将重置自增列,表结构及其字段、约束、索引保持不变<br>执行速度比DELETE语句快</div>
<div>DDL</div><div>(数据定义语言)<span> </span>用于创建和删除数据库对象等操作<span> </span><br>CREATE</div><div>DROP</div><div>ALTER</div>
数据库操作
<div>创建数据库</div><div>CREATE DATABASE myschool;<br></div>
<div>查看数据库列表<br></div><div>SHOW databases;</div>
<div>选择数据库<br></div><div>USE myschool;</div>
<div>删除数据库</div><div>DROP DATABASE myschool;</div>
表操作
创建表
<div>CREATE TABLE `student`(</div><div> `studentNo` INT(4) NOT NULL COMMENT '学号' PRIMARY KEY,</div><div><span> </span>`loginPwd` VARCHAR(20) NOT NULL COMMENT '密码', </div><div><span> </span>`studentName` VARCHAR(50) NOT NULL COMMENT '学生姓名',</div><div><span> </span>`sex` CHAR(2) DEFAULT '男' NOT NULL COMMENT '性别', </div><div><span> </span>`gradeId` INT(4) UNSIGNED COMMENT '年级编号', </div><div><span> </span>`phone` VARCHAR(50) COMMENT '联系电话',</div><div><span> </span>`address` VARCHAR(255) DEFAULT '地址不详'COMMENT '地址', <span> </span>`bornDate` DATETIME COMMENT '出生时间',</div><div><span> </span>`email` VARCHAR(50) COMMENT'邮件账号',</div><div><span> </span> ` identityCard` VARCHAR(18) UNIQUE KEY COMMENT '身份证号'</div><div>) COMMENT='学生表';</div><div><br></div>
查看表是否存在
<div>USE myschool;</div><div>SHOW tables;</div>
删除表
<div>USE myschool;</div><div>DROP TABLE IF EXISTS `student`;</div>
修改表
<div>DROP TABLE IF EXISTS `demo01`;</div><div>#创建表</div><div>CREATE TABLE `demo01`(</div><div> `id` INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,</div><div> `name` VARCHAR(8) NOT NULL</div><div>);</div><div>#修改表名</div><div>ALTER TABLE `demo01` RENAME `demo02`;</div><div>#添加字段</div><div>ALTER TABLE ` demo02 ` ADD `password` VARCHAR(32) NOT NULL;</div><div>#修改字段</div><div>ALTER TABLE ` demo02 ` CHANGE `name` `username`CHAR(10) NOT NULL;</div><div>#删除字段</div><div>ALTER TABLE ` demo02 ` DROP `password`;</div>
<div><br></div><div>#修改表名 </div><div>ALTER TABLE 旧表名 RENAME [TO] 新表名;</div>
<div>#添加字段 </div><div>ALTER TABLE 表名 ADD 字段名 数据类型 [属性];</div>
<div>#修改字段<br></div><div> ALTER TABLE 表名 CHANGE 原字段名 新字段名 数据类型 [属性];</div>
<div>#删除字段</div><div>ALTER TABLE 表名 DROP 字段名;</div>
主外键操作
<div>添加主键</div><div>ALTER TABLE 表名 ADD CONSTRAINT 主键名 </div><div> PRIMARY KEY 表名(主键字段);</div>
<div>ALTER TABLE `grade` ADD CONSTRAINT `pk_grade` PRIMARY KEY `grade`(`gradeId`);</div>
<div>添加外键</div><div>ALTER TABLE 表名 ADD CONSTRAINT 外键名 </div><div>FOREIGN KEY(外键字段)</div><div>REFERENCES 关联表名(关联字段);</div>
<div>ALTER TABLE `student` ADD CONSTRAINT fk_student_grade FOREIGN KEY(`gradeId`) </div><div>REFERENCES `grade` (`gradeId`);</div><div><br></div>
<div>DQL</div><div>(数据查询语言)<span> </span>用来对数据库中的数据进行查询<span> </span>SELECT</div>
查询语法<br><div>SELECT <列名|表达式|函数|常量> </div><div>FROM <表名> </div><div>[WHERE <查询条件表达式>] </div><div>[ORDER BY <排序的列名>[ASC或DESC]];</div><div><br></div>
<div>SELECT `studentNo`,`studentName`,`phone`,`address`,`bornDate` </div><div>FROM `student`</div><div>WHERE `gradeId` = 1</div><div>ORDER BY `studentNo`;</div>
数据查询-列别名
<div>SELECT `studentNo` AS 学生编号,`studentName` AS 学生姓名,</div><div> `address `AS 学生地址 </div><div>FROM `student`</div><div>WHERE `address` <> '河南新乡‘;</div>
数据查询-空行、常量列
SELECT `studentName` FROM `student` WHERE `email` IS NULL;
聚合函数
AVG()<span> </span>返回某字段的平均值
COUNT()<span> </span>返回某字段的行数
MAX()<span> </span>返回某字段的最大值
MIN()<span> </span>返回某字段的最小值
SUM()<span> </span>返回某字段的和
字符串函数
CONCAT()<br>
语法
<div>CONCAT(str1, str1...strn)</div>
作用
字符串连接
举例
<div>SELECT CONCAT('My','S','QL');</div><div>返回:MySQL</div>
INSERT()
语法
<div>INSERT(str,pos,len,newstr)</div>
作用
字符串替换
举例
<div>SELECT INSERT('这是SQL Server数据库',3,10,'MySQL');</div><div>返回:这是MySQL数据库</div>
LOWER()
语法
<div>LOWER(str)</div>
作用
将字符串转为小写
举例
<div>SELECT LOWER('MySQL');</div><div>返回:mysql</div>
UPPER()
语法
<div>UPPER(str)</div>
作用
将字符串转为大写
举例
<div>SELECT UPPER('MySQL');</div><div> 返回:MYSQL</div>
SUBSTRING()
语法
<div>SUBSTRING(str,num,len)</div>
作用
字符串截取
举例
<div>SELECT SUBSTRING( 'JavaMySQLOracle',5,5);</div><div>返回:MySQL</div>
<div>时间日期函数</div>
<div>CURDATE()</div>
作用<br><div>获取当前日期</div>
举例<br><div>SELECT CURDATE();</div><div>返回:2016-08-08</div>
<div>CURTIME()</div>
作用<br><div>获取当前时间</div>
举例<br><div>SELECT CURTIME();</div><div>返回:19:19:26</div>
<div>NOW()</div>
作用<br><div>获取当前日期和时间</div>
举例<br><div>SELECT NOW();</div><div>返回:2016-08-08 19:19:26</div>
<div>WEEK(date)</div>
作用<br><div>返回日期date为一年中的第几周</div>
举例<br><div>SELECT WEEK(NOW());</div><div>返回:26</div>
<div>YEAR(date)</div>
作用<br><div>返回日期date的年份</div>
举例<br><div>SELECT YEAR(NOW());</div><div>返回:2016</div>
<div>HOUR(time)</div>
作用<br><div>返回时间time的小时值</div>
举例<br><div>SELECT HOUR(NOW());</div><div>返回:9</div>
<div>MINUTE(time)</div>
作用<br>返回时间time的分钟值<br>
举例<br><div>SELECT MINUTE(NOW());</div><div>返回:43</div>
<div>DATEDIFF(date1,date2)</div>
作用<br><div>返回日期参数date1和date2之间相隔的天数</div>
举例<br><div>SELECT DATEDIFF(NOW(),</div><div> '2008-8-8');</div><div>返回:2881 </div>
<div>ADDDATE(date,n)</div>
作用<br><div><div>计算日期参数date加上n天后的日期</div></div>
举例<br><div><div>SELECT ADDDATE(NOW(),5);</div><div>返回:2016-09-02 09:37:07 </div></div>
数学函数
<div>CEIL(x)</div><div><br></div>
<div>返回大于或等于数值x的最小整数</div>
<div>SELECT CEIL(2.3)</div><div>返回:3</div>
<div>FLOOR(x)</div><div><br></div>
<div>返回小于或等于数值x的最大整数</div>
<div>SELECT FLOOR(2.3)</div><div>返回:2</div>
<div>RAND()</div><div><br></div>
<div>返回0~1间的随机数</div>
<div>SELECT RAND()</div><div>返回:0.5525468583708134</div>
排序 ORDER BY
默认升序 asc
降序desc
LIMIT子
LIMIT 起始位置,行数
分页limit 语句写在所有语句的末尾
子查询
<div>子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其他子查询中的查询</div><div><br></div>
将子查询和比较运算符联合使用,必须保证子查询返回的值不能多于一个
IN子查询
<div>子查询返回不止1个值时,</div><div>使用in</div>
NOT IN子查询
EXISTS子查询
<div>子查询有返回结果: EXISTS子查询结果为TRUE</div><div>子查询无返回结果: EXISTS子查询结果为FALSE,</div><div> 外层查询不执行</div><div><br></div>
NOT EXISTS子查询
分组查询
<div>GROUP BY子句</div><div>用来分组 WHERE 子句的输出 </div><div><br></div>
<div>HAVING子句</div><div>用来从分组的结果中筛选行 </div>
多表连接查询
<div>内连接(INNER JOIN)</div>
外连接
<div>左外连接 (LEFT JOIN)</div>
<div>右外连接 (RIGHT JOIN)</div>
<div>DCL</div><div>(数据控制语言)<span> </span>用来控制数据库组件的存取许可、存取权限等<span> </span><br>GRANT</div><div>COMMIT</div><div>ROLLBACK.</div>
远程登录授权
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY 'ok' WITH GRANT OPTION;<br><br>FLUSH PRIVILEGES;
MySQL数据类型
数值类型
<div>TINYINT<span> </span>非常小的数据<span> </span>有符值: -27 ~ 27-1 </div><div>无符号值:0 ~ 28-1 <span> </span>1字节</div>
<div>SMALLINT<span> </span>较小的数据<span> </span>有符值: -215 ~ 215-1 </div><div>无符号值: 0 ~ 216-1 <span> </span>2字节</div>
<div>MEDIUMINT<span> </span>中等大小的数据<span> </span>有符值: -223 ~ 223-1 </div><div>无符号值: 0 ~ 224-1 <span> </span>3字节</div>
<div>INT<span> </span>标准整数<span> </span>有符值: -231 ~ 231-1 </div><div>无符号值:0 ~ 232-1 <span> </span>4字节</div>
<div>BIGINT<span> </span>较大的整数<span> </span>有符值: -263 ~263-1</div><div>无符号值:0 ~264-1 <span> </span>8字节</div>
FLOAT<span> </span>单精度浮点数<span> </span>±1.1754351e -38<span> </span>4字节
DOUBLE<span> </span>双精度浮点数<span> </span>±2.2250738585072014e -308<span> </span>8字节
DECIMAL<span> </span>字符串形式的浮点数<span> </span>Decimal(M,D)<span> </span>M+2个字节
字符类型
CHAR[(M)]<span> </span>定长字符串<span> </span>M字节
VARCHAR[(M)]<span> </span>可变字符串<span> </span>可变长度
TINYTEXT<span> </span>微型文本串<span> </span>0~28–1字节
TEXT<span> </span>文本串<span> </span>0~216–1字节
<div>日期类型</div>
DATE<span> </span>YYYY-MM-DD,日期格式<span> </span>1000-01-01~ 9999-12-31
DATETIME<span> </span> YY-MM-DD hh:mm:ss:<span> </span>1000-01-01 00:00:00 ~9999-12-31 23:59:59
TIME<span> </span>hh:mm:ss: <span> </span>-835:59:59 ~ 838:59:59
TIMESTAMP<span> </span>YYYYMMDDHHMMSS<span> </span>1970年某时刻~2038年某时刻,精度为1秒
YEAR<span> </span>YYYY格式的年份<span> </span>1901~2155
MySQL字段的约束
非空约束<span> </span>NOT NULL<span> </span>字段不允许为空
默认约束<span> </span>DEFAULT<span> </span> 赋予某字段默认值
<div>唯一约束<span> </span>UNIQUE KEY(UK)<span> </span> 设置字段的值是唯一的</div><div> 允许为空,但只能有一个空值</div>
<div>主键约束<span> </span>PRIMARY KEY(PK)<span> </span>设置该字段为表的主键</div><div>可唯一标识该表记录</div>
<div>外键约束<span> </span>FOREIGN KEY(FK)<span> </span> 用于在两表之间建立关系,</div><div> 需要指定引用主表的哪一字段</div>
<div>自动增长<span> </span>AUTO_INCREMENT<span> </span> 设置该列为自增字段</div><div> 默认每条自增1</div><div> 通常用于设置主键</div>
事务、存储过程
事务
MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
事务用来管理 insert,update,delete 语句
ACID
原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
事务控制语句
BEGIN或START TRANSACTION;显式地开启一个事务;
COMMIT;也可以使用COMMIT WORK,不过二者是等价的。COMMIT会提交事务,并使已对数据库进行的所有修改称为永久性的;
ROLLBACK;有可以使用ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;
子主题
数据库设计
子主题
子主题
子主题
0 条评论
下一页