测试
- 计算机管理-服务-MySQL服务正在启动,MySQL安装成功
- cmd(以管理员的身份运行)- net start mysql(开启)net stop mysql(关闭)
- 快捷进入服务:servicres.msc
配置环境变量cmd窗口启动MySQL
path配置到bin目录
cmd连接命令 mysql -u账号 -p密码
更新用户信息
use mysql;
update user set password = password('新密码')where user='root';
flush privileges;
创建用户
#创建用户
create user `用户名`@`主机名` identified by '密码'
#创建用户同时赋予权限
#all
grant all on 表 to `用户`@`主机名` identified by '密码'
结构化查询语句分类
- DDL 数据定义语言(CREATE、DROP、ALTER)
- DML 数据操作语言(INSERT、UPDATE、DELETE)
- DQL 数据查询语言(SELECT)
- DCL 数据控制语言(GRANT、COMMIT、ROOLBACK)
语句
USE 库名;---切换数据库
SET sql_mode='strict_trans_tables';---------设置严格检查模式
SET @@ AUTO_INCREMENT_INCREMENT=步长值
SHOW ENGINES;-------查看MySQL支持的引擎类型(表类型)
SHOW VARIABLES LIKE 'storage_engine';-------查看默认的引擎
SELECT VERSION();------查看数据库的版本
SELECT USER()------查看当前用户
增加语句
- CREATE DATABASE 库名;----------新建数据库
- CREATE TABLE 表名();----------新建表
- ALTER TABLE 表名 ADD 列名 数据类型;----------添加一列
- INSERT INTO 表名 (列名,列名...) VALUE(数据);----------未指定列添加数据
- INSERT INTO 表名 VALUE(数据),(数据)...;----------为所有列添加单条或多条数据
删除语句
- DROP TABLE IF EXISTS 表名;----------删除指定表
- DROP DATABASE 库名;----------删除指定库
- ALTER TABLE 表名 DROP 列名;----------删除一列
- DELETE FROM 表名;-----删除所有数据
- DETELE FROM 表名 WHERE 条件;-----删除指定条件的行数据
- TRUNCATE TABLE 表名;-----删除数据 (可以把自增恢复到初始值)
修改语句
- ALTER TABLE 表名 RENAME 新表名;----------修改表名
- ALTER TABLE 表名 RENAME 新表名;----------修改表名
- ALTER TABLE 表名 MODIFY 列名 新数据类型;----------修改数据类型
- UPDATE 表名 SET 列名=新值,列名=新值...WHERE 条件;-----修改指定条件行的指定值
查找语句
- SHOW CREATE DATABASE 数据库名;-------查看数据库定义的语句
- SHOW CREATE TABLE 表名;------查看数据表定义的语句
- DESC 表名;-------查看表结构
- SHOW DATABASES;-----------查看所有库
- SHOW TABLES;----------查看所有表
- SELECT 列名 AS 别名,列名 别名,列名... FROM 表名;-------查看表中所有数据
- SELECT * FROM 表名 WHERE 条件;------根据指定条件查询
- SELETC 列名 FROM 表名 GROUP BY 列名;------分组查询
连接查询
- 内连接([inner] join):查询两个表中的结果集中的交集
- 外连接(outer join):
- 左外连接(left [outer] join):以左表做基准,右表来一一匹配,匹配不上的,返回左表记录,右表填充null
- 右外连接(right [outer] join):以右表做基准,左表来一一匹配,匹配不上的,返回右表记录,左表填充null
- 自链接:把一张表看作两张表来进行连接
- 等值连接:类似于内连接
- 非等值连接
#内连接
SELECT 字段名 FROM 表1 INNER JOIN 表2 ON 连接条件
#左连接
SELECT 字段名 FROM 表1 LEFT JOIN 表2 ON 连接条件
#右链接
SELECT 字段名 FROM 表1 RIGHT JOIN 表2 ON 连接条件
#等值连接
SELECT 字段名 FROM 表1,表2 WHERE 连接条件
#非等值连接
SELECT 字段名 FROM 表1,表2
#自连接(表名一定要起别名)
SELECT 字段名 FROM 表1 ,表1 WHERE 连接条件
变量及属性
数据类型
- VARCHAR(长度)-----字符串
- BLOB------存储量较大的字符串类型
- TEXT---------文本串
- CHAR(长度)-----没满长度自动添加空格的字符串
- INT(长度)---整数
- TINYINT-------容量较小的整数型
- DOUBLE(长度)-----小数
- DECIMAL------字符串形式的浮点数(DECIMAL(m,d) m代表浮点数最大长度m位,小数点后面d位)常用于货币
- DATE-----日期
- TIMESTAMP-----日期
- DEFAULT NOW()------默认当前时间
- ON UPDATE NOW()-------修改时的时间
- YEAR----年份
约束
- PRIMARY KEY-----主键约束
- UNIQUE-----唯一约束
- NOT NULL---非空标记
- CONSTRAINT ------ FOREIGN KEY ---- REFERENCES ------ 外键约束
属性
- ZEROFILL-----补零
- AUTO_INCREMENT-----自增操作
- UNSIGNED--------无符号
- COMMENT----注释
- DEFAULT------默认值
语句中
- DISTINCT------查询时去除重复内容(SELECT DISTINCT 列 FROM 表)
- AND----与:id>10 AND id<12 == id BETWEEN 10 AND 12;
- OR-----或:id=13 OR id=15 OR id=17 == id IN (13,15,17)
- <>-------不等于
- DEFAULT------默认值
- LIKE-----模糊查询 '赵%'
- HAVING----分组后的条件
- ENGINE------表类型=(INNODB/MyISAM)
- INNODB:支持:事务处理,数据行锁定,外键约束。不支持:全文索引。表空间较大约两倍
- MyISAM:支持:全文索引。不支持:事务处理,外键约束,数据行锁定。表空间较小
- ESCAPE------自定义转义字符
- ORDER BY--------排序默认升序(ASC) 降序(DESC) 可以多条规则
- EXPLAIN-----解释语句
通配符
*:所有
%:占位符 0-∞
_:占位符代表一个字符
函数
- 数学函数
- MAX()------最大值
- MIN()-------最小值
- AVG()------平均值
- SUM()------求和
- ABS(n)------求n绝对值
- CEILING(n)-----大于等于n的最小的整数
- FLOOR(n)------小于等于n的最大的整数
- RAND()-------返回0-1之间的随机数
- SIGN(n)------判断n的正负,负数返回-1,整数返回1,0返回0
- 字符串函数
- CHAR_LENGTH()--------返回字符串中包含的字符数
- CONCAT(a,b)----拼接字符串ab
- INSERT(被替换字符串,开始位置,结束位置,替换的字符串)-----替换字符串
- LOWER()-------变为小写
- UPPER()------变为大写
- LEFT(被操作字符串,n)-----从左边截取n个长度的字符
- RIGHT(被操作字符串,n)-----从右边截取n个长度的字符
- REPLACE(被操作的字符串,被替换字符,替换的字符)------替换字符
- SUBSTR(被截取字符串,起始位置,结束位置)--------截取字符串
- REVERSE()------反转字符串
- 日期时间函数
- CURRENT_DATE()-------获取当前的日期(年月日)
- CURDATE()-------获取当前的日期(年月日)
- NOW()----- 获取当前日期时间
- LOCALTIME()-------获取本地时间
- SYSDATE()-------获取系统时间
- YEAR(date)------获取date的年
- MONTH(date)--------获取date的月
- DAY(date)-------获取date的日
- HOUR(date)--------获取date的时
- MINUTE(date)-------获取date的分
- SECOND(date)-------获取date的秒
- WEEK(date, mode);--------date是要获取周数的日期,mode是确定一周从周几开始默认0
COUNT()---有几条数据
IF(条件,true,false)-------判断
事务
事物的特性:原子性,一致性,隔离性,持久性 ACID
使用SET语句来更改提交模式把自动提交改成手动提交
#关闭自动提交
SET AUTOCOMMIT=0;
#开启自动提交
SET AUTOCOMMIT=1;
#回滚操作
ROLLBACK;
#提交
COMMIT;
索引
索引的准则
- 索引不是越多越好
- 不要对经常变动的数据加索引
- 小数据量的表建议不要加索引
- 索引一般应加在查找条件的字段
索引的添加和删除
#添加索引
ALTER TABLE 表名 ADD INDEX 索引名称(字段名);
#删除索引
DROP INDEX 索引名称 ON 表名;
ALTER TABLE 表名 DROP INDEX 索引名称;
#删除主键
ALTER TABLE 表名 DROP PRIMARY KEY;
#查看索引
SHOW INDEX FROM 表名;
#全文索引,只能用于MyISAM类型的数据库
ALTER TABLE 表名 ADD FULLTEXT 索引名称(字段名)
#使用全文索引
SELECT * FROM 表名 WHERE MATCH(索引名称) AGAINNST(找的字段);
视图
#创建视图
CREATE VIEW 视图名称 AS SELECT * FROM 表名;
#删除视图
DROP VIEW 视图名称;
数据库备份
数据库备份的必要性
- 保证数据不会丢失
- 便于数据的转移
数据库备份的方法
- MySQLdump备份工具,source命令恢复
#cmd窗口
#导出
#[]跳过drop table 不备份 insert语句添加列名
mysqldump -h 主机名 -u (用户名) -p (密码) [--skip-add-drop-table -c] 需要导出的数据库名 需要导出的指定的数据表 > 导出的路径
#mysqldump帮助
mysqldump --help|more
#导入
mysql -u(用户名) -p(密码) 需要导入的数据库名 需要导入的数据表 < 文件的路径
#mysql窗口导入
source 文件的路径
#也可以借助sqlyog工具实现导入导出
数据库管理工具
-
使用SQL命令来恢复和备份
#备份特定的字段的数据 SELECT 字段名 INTO OUTFILE 文件路径 FROM 表名; LOAD DATA INFILE 文件路径 INTO TABLE 表名(字段名)
数据库设计
设计范式
- 确保每列的原子性不可再分
- 确保每张表只描述一件事情
- 确保每列都和主键有直接关系