MySQL

测试

  • 计算机管理-服务-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 表名(字段名)
    

数据库设计

设计范式

  • 确保每列的原子性不可再分
  • 确保每张表只描述一件事情
  • 确保每列都和主键有直接关系

你可能感兴趣的:(MySQL)