MySQL学习(完)

Posted 不想学习的小狐狸

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL学习(完)相关的知识,希望对你有一定的参考价值。

安装mysql

1、解压zip

2、把这个包放到电脑环境目录下

3、配置环境变量

4、新建mysql配置文件ini

[mysqlId]
basedir=F:\\environment\\mysql-5.7.10-winx64\\mysql-5.7.10-winx64\\
datadir=  
port=3306
skip-grant-tables

5、启动管理员模式下的CMD,运行所有的命令

6、安装mysql服务 mysqld -install

7、初始化数据库 mysqld --initialize-insecure --user=mysql

8、启动mysql ,进去修改密码 net start mysql

9、进入mysql,通过命令行

update mysql.user set authentication_string=password(\'123456\') where user=\'root\' and Host=\'localhost\';

10、刷新权限 flush privileges;

11、修改my.ini文件删除最后一句skip-grant-tables

12、重启mysql即可正常使用

net stop mysql

net start mysql

13、进入mysql

mysql -u root -p(p后面不要空格)

步骤流程:

C:\\WINDOWS\\system32>cd /d F:\\environment\\mysql-5.7.10-winx64\\mysql-5.7.10-winx64\\bin

F:\\environment\\mysql-5.7.10-winx64\\mysql-5.7.10-winx64\\bin>mysqld -install
Service successfully installed.

F:\\environment\\mysql-5.7.10-winx64\\mysql-5.7.10-winx64\\bin>mysqld --initialize-insecure --user=mysql

F:\\environment\\mysql-5.7.10-winx64\\mysql-5.7.10-winx64\\bin>net start mysql
MySQL 服务正在启动 .
MySQL 服务已经启动成功。


F:\\environment\\mysql-5.7.10-winx64\\mysql-5.7.10-winx64\\bin>mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \\g.
Your MySQL connection id is 2
Server version: 5.7.10 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type \'help;\' or \'\\h\' for help. Type \'\\c\' to clear the current input statement.

mysql> update mysql.user set authentication_string=password(\'123456\') where user=\'root\' and Host=\'localhost\';
Query OK, 1 row affected, 1 warning (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye

F:\\environment\\mysql-5.7.10-winx64\\mysql-5.7.10-winx64\\bin>net stop mysql
MySQL 服务正在停止.
MySQL 服务已成功停止。


F:\\environment\\mysql-5.7.10-winx64\\mysql-5.7.10-winx64\\bin>net start mysql
MySQL 服务正在启动 .
MySQL 服务已经启动成功。


F:\\environment\\mysql-5.7.10-winx64\\mysql-5.7.10-winx64\\bin>mysql -u root -p
Enter password: ******
Welcome to the MySQL monitor.  Commands end with ; or \\g.
Your MySQL connection id is 2
Server version: 5.7.10 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type \'help;\' or \'\\h\' for help. Type \'\\c\' to clear the current input statement.

Navicat

创建数据库

连接数据库

命令行连接

mysql -uroot -p   --连接数据库
update mysql.user set authentication_string=password(\'123456\') where user=\'root\' and Host=\'localhost\'; --修改密码
flush privileges; --刷新权限
-----------------------------------------------
--所有的语句都使用;结尾
show databases; --查看所有的数据库
use school --切换数据库 use 数据库名
show tables; --查看数据库中的所有表
describe student; --显示数据库中表的信息
create database market; --创建一个数据库
exit; --退出连接
/**/ sql的多行注释
-- 单行注释

操作数据库

mysql关键字不区分大小写

创建数据库

CREATE DATABASE IF NOT EXISTS market

删除数据库

DROP DATABASE IF EXISTS market

使用数据库

USE school --如果表名或者字段名是一个特殊字符,就需要带``如`school`

查看数据库

SHOW DATABASES

列的数据类型

数值

  • tinyint 十分小的数据 1个字节

  • smallint 较小的数据 2个字节

  • midiumint 中等大小的数据 3个字节

  • int 标准的整数 4个字节

  • bigint 较大的数据 8个字节

  • float 浮点数 4个字节

  • double 浮点数 8个字节

  • decimal 字符串形式的浮点数 金融计算的时候一般使用decimal

字符串

  • char 字符串固定大小的 0~255

  • varchar 可变字符串 0~65535

  • tinytext 微型文本 2^8-1

  • text 文本串 2^16-1 保存大文本

时间日期

  • date YYYY-MM-DD 日期格式

  • time HH:mm:ss 时间格式

  • datetime YYYY-MM-DD HH:mm:ss 最常用的时间格式

  • timestamp 时间戳 1970.1.1到现在的毫秒数 也较为常用

  • year 年份表示

null

  • 没有值,未知

  • 注意,不要使用NULL进行运算,结果为NULL

数据库的字段属性

Unsigned

  • 无符号的整数

  • 声明了该列不能声明为负数

zerofill

  • 0填充

  • 不足的位数,使用0来填充 int(3) 则5--->005

自增

  • 通常理解为自增,自动在上一条记录的基础上+1(默认)

  • 通常用来设计唯一的逐渐,index,必须是整数类型

  • 可以自定义设计逐渐自增的起始值和步长

非空 not null

  • 假设设置为not null,如果不给它赋值,就会报错

  • NULL,如果不填写值,默认就是null

默认

  • 设置默认的值

创建数据库表

--表的名称和字段尽量使用``括起来
--字符串使用单引号括起来
--所有的语句后面加,(英文的),最后一个不加
CREATE TABLE IF NOT EXISTS `student` (
  `id` INT(4) NOT NULL  COMMENT \'学号\',
    `name` VARCHAR(30) NOT NULL DEFAULT \'匿名\' COMMENT \'姓名\',
    `pwd` VARCHAR(20) NOT NULL DEFAULT \'123456\' COMMENT \'密码\',
    `sex` VARCHAR(2) NOT NULL DEFAULT \'\' COMMENT \'性别\',
    `birthday` DATETIME DEFAULT NULL COMMENT \'出生日期\',
    `address` VARCHAR(100) DEFAULT NULL COMMENT \'家庭住址\',
  `email` VARCHAR(50) DEFAULT NULL COMMENT \'邮箱\',
    PRIMARY KEY(`id`) 
)ENGINE=INNODB DEFAULT CHARSET=utf8
SHOW CREATE DATABASE school --查看创建数据库的语句
SHOW CREATE TABLE student  --查看student表的定义语句
DESC student              --显示表的结构

数据表的类型

关于数据库引擎

INNODB 默认使用

MYISAM 早些年使用

修改删除表

ALTER TABLE student RENAME AS student1 --修改表名
ALTER TABLE student1 ADD age INT(11)   --增加表的字段
ALTER TABLE student1 MODIFY age VARCHAR(11)--修改表的字段(重命名,修改约束)
ALTER TABLE student1 CHANGE age age1 INT(1)--字段重命名
ALTER TABLE student1 DROP age1 --删除表的字段
DROP TABLE  IF EXISTS student1  --删除表

所有的创建和删除操作尽量加上判断,以免报错

注意点

  • 字段名,使用``包裹

  • 注释 -- 或/**/

  • sql关键字大小写敏感,建议写小写

  • 所有的符号用英文

外键

创建表成功后添加外键约束

ALTER TABLEADD CONSTRAINT 约束名 FOREIGN KEY REFERENCES 哪个表(哪个字段)

以上的操作都是物理外键,数据库级别的外键,不建议使用

DML-添加

insert into 表名([字段名1,字段名2,字段名3])values(\'值1\'),(\'值2\'),(\'值3\')

DML-修改

UPDATE `student` SET `name`=\'kis\',`email`=\'45454@qq.com\' WHERE id=1;

DML-删除

delete from 表名 where 条件

TRUNCATE 清空表

truncate `student`

delete和truncate都不会删除表的结构

不同:

  1. TRUNCATE 重新设置 自增列和计数器会归零

  2. TRUNCATE 不会影响事务

 

DQL查询数据

--查询全部的学生 
SELECT * FROM student
--查询指定字段
SELECT `StudentNo`,`StudentName` FROM student
--别名,给结果起一个名字 AS 可以给字段起别名,也可以给表起别名
SELECT `StudentNo` AS 学号,`StudentName` AS 学生姓名 FROM Student AS s
--函数 Concat(a,b)
SELECT CONCAT(\'姓名:\',StudentName) AS 新名字 FROM Student

去重及数据库的表达式

SELECT DISTINCT `StudentNo` FROM result --发现重复数据,去重
SELECT VERSION() --查询系统版本(函数)
SELECT 100*3-1 AS 计算结果 --用来计算(表达式)
SELECT @@auto_increment_increment --查询自增的步长(变量)
--学员考试成绩+1分后查看
SELECT `StudentNo`,`StudentResult`+1 AS \'提分后\' FROM result

模糊查询

 

 

运算符语法描述
BETWEEN Aa between b and c 若a在b和c之间,则结果为真
IS NULL a is null 如果操作符为NULL,结果为真
IS NOT NULL a is not null 如果操作符不为null,结果为真
Like a like b SQL匹配,如果a匹配b,则结果为真
In a in(a1,a2,a3...)

假设a在a1或者a2...其中的某一个值中,结果为真

 

联表查询

SELECT s.studentNo,studentName,SubjectNo,StudentResult
FROM student AS s
INNER JOIN result AS r
ON s.studentNo=r.studentNo

SELECT s.studentNo,studentName,SubjectNo,StudentResult
FROM student AS s
RIGHT JOIN result AS r
ON s.studentNo=r.studentNo

SELECT s.studentNo,studentName,SubjectNo,StudentResult
FROM student AS s
LEFT JOIN result AS r
ON s.studentNo=r.studentNo
操作描述
inner join 如果表中至少有一个匹配,就返回行
left join 会从左表中返回所有的值,即使右表中没有匹配
right join 会从右表中返回所有的值,即使左表中没有匹配

自连接

--查父子信息,把一张表看为两个一模一样的表
SELECT a.`categoryName` AS \'父栏目\',b.`categoryName` AS \'子栏目\'
FROM `category` AS a,`category` AS b
WHERE a.`categoryid`=b.`pid`

分页和排序

SELECT s.`StudentNo`,`StudentName`,`SubjectName`,`StudentResult`
FROM student s
INNER JOIN `result` r
ON s.StudentNo=r.StudentNo
INNER JOIN `subject` sub
ON r.`SubjectNo`=sub.`SubjectNo`
WHERE subjectName =\'数据库结构\'
ORDER BY StudentResult ASC
LIMIT 5,5

--第一页 limit 0,5 (1-1)*5
--第二页 limit 5,5 (2-1)*5
--第三页 limit 10,5 (3-1)*5
--第N页  limit 0,5  (n-1)&pageSize,pageSize  【起始值,页面大小】

MySQL常用函数

SELECT ABS(-8) --绝对值
    SELECT CEILING(9.4)--向上取整
    SELECT FLOOR(9.4)  --向下取整
    SELECT RAND() --返回一个0~1之间的随机数
    SELECT SIGN(-10) --判断一个数的符号,负数返回-1,整数返回1
    
    SELECT CHAR_LENGTH(\'咩咩咩\')  --字符串长度
    SELECT CONCAT(\'咩咩咩\',\'嘎嘎嘎\') --拼接字符串
    SELECT INSERT(\'我爱编程helloworld\',1,2,\'超级热爱\') --查询,从某个位置开始替换某个长度
    SELECT LOWER(\'KHKJHJK\') --小写字母
    SELECT UPPER(\'gjkghjkg\') --大写字母
    SELECT INSTR(\'kuhjj\',\'k\') --返回第一次出现的子串的索引
    SELECT REPLACE(\'坚持就能成功\',\'坚持\',\'努力\') --替换出现的指定字符串
    SELECT SUBSTR(\'坚持就能成功\',4,6) --返回指定的子字符串
    SELECT REVERSE(\'坚持就能成功\') --反转
    --时间和日期函数(记住)
    SELECT CURRENT_DATE --获取当前日期
    SELECT CURDATE() --获取当前日期
    SELECT NOW() --获取当前的时间
    SELECT LOCALTIME() --本地时间
    SELECT SYSDATE() --系统时间
    SELECT YEAR(NOW())
    SELECT MONTH(NOW())
    SELECT DAY(NOW())
    SELECT MINUTE(NOW())
    SELECT SECOND(NOW())
    --系统
    SELECT SYSTEM_USER()
    SELECT USER()
    SELECT VERSION()

聚合函数(常用)

函数名称描述
COUNT() 计数
SUM() 求和
AVG() 平均值
MAX() 最大值
MIN() 最小值
... ...

 

SELECT COUNT(studentname) FROM student; --count(字段) 会忽略所有的null值
SELECT COUNT(*) FROM student; --不会忽略null值
SELECT COUNT(1) FROM result;  --不会忽略null值

数据库级别的MD5加密

CREATE TABLE `testmd5`(
   `id` INT(4) NOT NULL,
     `name` VARCHAR(20) NOT NULL,
     `pwd` VARCHAR(50) NOT NULL,
     PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

--明文密码
INSERT INTO testmd5 VALUES(1,\'zhangsan\',\'123456\'),(2,\'lisi\',\'1313\'),(3,\'wangwu\',\'43245\')
--加密
UPDATE testmd5 SET pwd=MD5(pwd) WHERE id=1
UPDATE testmd5 SET pwd=MD5(pwd) --加密全部的密码
--插入时加密
INSERT INTO testmd5 VALUES(4,\'xiaoming\',MD5(\'123456\'))
--如何校验:将用户传递进来的密码,进行md5加密,然后比对加密后的值
SELECT * FROM testmd5 WHERE `name`=\'xiaoming\' AND pwd=MD5(\'123456\')

事务

--mysql是默认开启事务自动提交的
SET autocommit = 0 /*关闭*/
SET autocommit = 1 /*开启(默认的)*/
--手动处理事务
--事务开启
START TRANSACTION --标记一个事务的开始,从这个之后的sql都在同一个事务内
INSERT XX
--提交:持久化(成功)
COMMIT 
--回滚:回到原来的样子(失败)
ROLLBACK
--事务结束
SET autocommit = 1 --开启自动提交

--了解
SAVEPOINT  保存点名 --设置一个事务的保存点
ROLLBACK TO SAVEPOINT 保存点名 --回滚到保存点
RELEASE SAVEPOINT 保存点名 --撤销保存点

索引

在一个表中,主键索引只能有一个,唯一索引可以有多个

  • 主键索引(PRIMARY KEY)

唯一的标志,主键不可重复,只能有一个列作为主键

  • 唯一索引(UNIQUE KEY)

避免重复的列出现,唯一索引可以重复,多个列都可以标识为唯一索引

  • 常规索引(KEY/INDEX)

默认的,index 、key关键字来设置

  • 全文索引(FULLTEXT)

在特定的数据库引擎下才有,MYISAM

快速定位数据