mysql 免安装版+入门+常用函数+常用命令【vaynexiao】

mysql5.7 64位下载地址:

https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-winx64.zip

1.下载后得到zip压缩包.放在如上图的一个固定位置,之后不要删除
2.解压到自己想要安装到的目录,本人解压到的是D:\Environment\mysql-5.7.19
3.添加环境变量
    1. 我的电脑->属性->高级->环境变量
    2. 选择PATH,在其后面添加: 你的mysql 安装文件下面的bin文件夹
    3. 在D:\Environment\mysql-5.7.19下新建 my.ini 文件
    4. 编辑 my.ini 文件 ,注意替换路径位置
        [mysqld]
        basedir=D:\Program Files\mysql-5.7\
        datadir=D:\Program Files\mysql-5.7\data\
        port=3306
        skip-grant-tables
5. 启动管理员模式下的CMD,并将路径切换至mysql下的bin目录,然后输入mysqld –install  (安装mysql)
6. 再输入  mysqld --initialize-insecure --user=mysql  初始化数据文件
7. 然后再次启动mysql net start mysql 然后用命令 mysql –u root –p 进入mysql管理界面(密码可为空)
8. 进入界面后更改root密码
update mysql.user set authentication_string=password('root') where user='root' and Host = 'localhost';
(最后输入flush privileges; 刷新权限)
9. 修改 my.ini文件删除最后一句skip-grant-tables
10. 重启mysql即可正常使用
    net stop mysql
    net start mysql
11. 连接上后在cmd中
mysql -uroot-proot
表示使用root/root进行连接
(清空服务命令:sc delete mysql;)

常用sql命令

update user set password=password('123456')where user='root'; 修改密码
flush privileges;  刷新数据库
show databases; 显示所有数据库
use dbname; 打开某个数据库
show tables; 显示数据库mysql中所有的表
describe/desc user; 显示表mysql数据库中user表的列信息
create database [if not exists] name; 创建数据库
use databasename; 选择数据库

exit; 退出Mysql
? 命令关键词 : 寻求帮助
# 表示注释
/**/ 表示区域注释

声明:mysql的反引号,表示全词匹配

# 目标 : 创建一个school数据库
# 创建学生表(列,字段)
# 学号int 登录密码varchar(20) 姓名,性别varchar(2),出生日期(datatime),家庭住址,email
# 创建表之前 , 一定要先选择数据库
CREATE TABLE IF NOT EXISTS `student` (
  `id` int(4) NOT NULL AUTO_INCREMENT 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;
# 显示表结构
DESC student;
# 设置严格检查模式(不能容错了)
SET sql_mode='STRICT_TRANS_TABLES';
create database boss_0227;--不能数字开头
show databases;
drop databases boss_0227;
user study;--使用该数据库
create table user(
    id int PRIMARY key auto_increment,
    password varchar(16)
)
desc user;--查看表设计
insert into user values(1,'张三');
select * from user;
delete from user where id=1;--sql server 可以不写from,mysql必须写,建议始终都写from
update user set password='123' where id=1;
rename table user to user2;--修改表名

select studentNo as no,studentName as name from student as stu;
select concat("a",studentName) as newName from student;
SELECT DISTINCT studentno FROM result; -- 了解:DISTINCT 去除重复项 , (默认是ALL)
# selcet查询中可以使用表达式
SELECT @@auto_increment_increment; # 查询自增步长
SELECT VERSION(); #查询版本号
SELECT 100*3-1 AS 计算结果; # 表达式
# 学员考试成绩集体提分一分查看
SELECT studentno,StudentResult+1 AS '提分后' FROM result;

SELECT studentno,studentresult FROM result
WHERE NOT studentno=1000;  -- not 等于 !=

order by stuNo   limit 0,10; -- 先排序后limit

 常见函数

# 数学函数 (这里只列出一些常用的)
SELECT ABS(-8);  /*绝对值*/
SELECT CEILING(9.4);  /*向上取整*/
SELECT FLOOR(9.4);  /*向下取整*/
SELECT RAND();  /*随机数,返回一个0-1之间的随机数*/
SELECT SIGN(0); /*符号函数: 负数返回-1,正数返回1,0返回0*/

#字符串函数
SELECT CHAR_LENGTH('狂神说坚持就能成功'); /*返回字符串包含的字符数*/
SELECT CONCAT('我','爱','程序');  /*合并字符串,参数可以有多个*/
SELECT INSERT('我爱编程helloworld',1,2,'超级热爱');  /*替换字符串,从某个位置开始替换某个长度,下标从1开始*/
SELECT LOWER('KuangShen'); /*小写*/
SELECT UPPER('KuangShen'); /*大写*/
SELECT LEFT('hello,world',5);  /*从左边截取*/
SELECT RIGHT('hello,world',5);  /*从右边截取*/
SELECT INSTR('hello','ll');  /*从返回str的的下标,下标从1开始*/
SELECT REPLACE('狂神说坚持就能成功,再坚持一下','坚持','努力');  /*替换所有符合regex的字符串*/
SELECT SUBSTR('狂神说坚持就能成功',4,6); /*截取字符串,开始index和长度,下标从1开始*/
SELECT REVERSE('狂神说坚持就能成功'); /*反转*/

#日期和时间函数
# 两者作用等价
SELECT CURRENT_DATE();   /*获取当前日期 2020-03-08 */
SELECT CURDATE();   /*获取当前日期 2020-03-08 */
SELECT NOW();   /*获取当前日期和时间 2020-03-08 20:03:08 */
SELECT LOCALTIME();   /*获取当前日期和时间 2020-03-08 20:03:08 */
SELECT SYSDATE();   /*获取当前日期和时间 2020-03-08 20:03:08 */
/*获取年月日,时分秒*/
SELECT YEAR(NOW());
SELECT MONTH(NOW());
SELECT DAY(NOW());
SELECT HOUR(NOW());
SELECT MINUTE(NOW());
SELECT SECOND(NOW());

#系统信息函数
SELECT VERSION();  /*版本*/
SELECT USER();  /*用户 @root */

/*COUNT:非空的*/
SELECT COUNT(studentname) FROM student;
SELECT COUNT(*) FROM student;
SELECT COUNT(1) FROM student;  /*推荐*/

SELECT SUM(StudentResult) AS 总和 FROM result;
SELECT AVG(StudentResult) AS 平均分 FROM result;
SELECT MAX(StudentResult) AS 最高分 FROM result;
SELECT MIN(StudentResult) AS 最低分 FROM result;

MD5

insert into user values(4,'bob',MD5('123456'));

select * from `user`
where `name`='bob' AND pwd=MD5('123456');
# 创建外键的方式一 : 创建子表同时创建外键
# 年级表(id\年级名称)
CREATE TABLE `grade` (
  `gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级ID',
  `gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
  PRIMARY KEY (`gradeid`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
# 学生信息表
#(学号,姓名,性别,年级,手机,地址,出生日期,邮箱,身份证号)
CREATE TABLE `student` (
  `studentno` INT(4) NOT NULL COMMENT '学号',
  `studentname` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名',
  `sex` TINYINT(1) DEFAULT '1' COMMENT '性别',
  `gradeid` INT(10) DEFAULT NULL COMMENT '年级',
  `phoneNum` VARCHAR(50) NOT NULL COMMENT '手机',
  `address` VARCHAR(255) DEFAULT NULL COMMENT '地址',
  `borndate` DATETIME DEFAULT NULL COMMENT '生日',
  `email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
  `idCard` VARCHAR(18) DEFAULT NULL COMMENT '身份证号',
  PRIMARY KEY (`studentno`),
  KEY `FK_gradeid` (`gradeid`),
  CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`)
) ENGINE=INNODB DEFAULT CHARSET=utf8

# 创建外键方式二 : 创建子表完毕后,修改子表添加外键
ALTER TABLE student
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`);

# 删除外键
ALTER TABLE student DROP FOREIGN KEY FK_gradeid;
# 发现执行完上面的,索引还在,所以还要删除索引
# 注:这个索引是建立外键的时候默认生成的
ALTER TABLE student DROP INDEX FK_gradeid;


添加数据
INSERT命令
语法 : 
INSERT INTO 表名[(字段1,字段2,字段3,...)] VALUES('值1','值2','值3')
注意 : 
字段或值之间用英文逗号隔开.
'字段1,字段2...'该部分可省略 , 但添加的值务必与表结构,数据列,顺序相对应,且数量一致.
可同时插入多条数据 , values 后用英文逗号隔开.
复制代码
# 使用语句如何增加语句?
# 语法 : INSERT INTO 表名[(字段1,字段2,字段3,...)] VALUES('值1','值2','值3')
INSERT INTO grade(gradename) VALUES ('大一');
# 主键自增,那能否省略呢?
INSERT INTO grade VALUES ('大二');
# 查询:INSERT INTO grade VALUE ('大二')错误代码: 1136
# Column count doesn`t match value count at row 1
# 得出结论:'字段1,字段2...'该部分可省略 , 但添加的值务必与表结构,数据列,顺序相对应,且数量一致.
# 一次插入多条数据
INSERT INTO grade(gradename) VALUES ('大三'),('大四');

group by 和sqlserver用法不同

sql server 使用了stuNo作为分组字段,那么其他字段要么以聚合函数出现,要么不能出现;
但mysql不同,mysql即使只按照其中一个字段分组,其他字段同样可以直接查出来,
因为mysql中,系统用了limit(1)将查询的第一条数据显示。这是一个很大的区别。

补充

-- select now(); sqlserver中不支持
-- select curdate();sqlserver中不支持
-- select curtime();sqlserver中不支持
select PI();-- 3.141593 在sql server中运行结果:3.14159265358979
-- select mod(45,7);-- 求余sqlserver中不支持
select sqrt(25);-- 求开方
select round(12.345678,2)-- 12.35 sqlsever得到:12.350000
select 7.1 div 7; -- 相除的结果取整数
select 7.1 mod 8;-- 7.1 取余数
select length('小搬运工很帅!')--  为啥得出长度是21
MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束):
 
1.新建用户
  1.1 登录MYSQL:
	  @>mysql -u root -p
	  @>密码
  1.2 创建用户:
	  mysql> insert into mysql.user(Host,User,Password) values("localhost","test",password("1234"));
	  这样就创建了一个名为:test 密码为:1234 的用户。
	  注意:此处的"localhost",是指该用户只能在本地登录,不能在另外一台机器上远程登录。如果想远程登录的话,将"localhost"改为"%",表示在任何一台电脑上都可以登录。也可以指定某台机器可以远程登录。
  1.3 然后登录一下:
	  mysql>exit;
	  @>mysql -u test -p
	  @>输入密码
	  mysql>登录成功
 
2.为用户授权
  授权格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码"; 
  2.1 登录MYSQL(有ROOT权限),这里以ROOT身份登录:
	  	@>mysql -u root -p
	  	@>密码
  2.2 首先为用户创建一个数据库(testDB):
  		mysql>create database testDB;
  2.3 授权test用户拥有testDB数据库的所有权限(某个数据库的所有权限):
		mysql>grant all privileges on testDB.* to test@localhost identified by '1234';
		mysql>flush privileges;//刷新系统权限表
		格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码"; 
  2.4 如果想指定部分权限给一用户,可以这样来写:
	  mysql>grant select,update on testDB.* to test@localhost identified by '1234';
	  mysql>flush privileges; //刷新系统权限表
  2.5 授权test用户拥有所有数据库的某些权限:   
  		mysql>grant select,delete,update,create,drop on *.* to test@"%" identified by "1234";
		//test用户对所有数据库都有select,delete,update,create,drop 权限。
  		//@"%" 表示对所有非本地主机授权,不包括localhost。(localhost地址设为127.0.0.1,如果设为真实的本地地址,不知道是否可以,没有验证。)
 		//对localhost授权:加上一句grant all privileges on testDB.* to test@localhost identified by '1234';即可。
 
3. 删除用户
   	@>mysql -u root -p
  	@>密码
   	mysql>Delete FROM user Where User='test' and Host='localhost';
   	mysql>flush privileges;
   	mysql>drop database testDB; //删除用户的数据库
	删除账户及权限:>drop user 用户名@'%';
	>drop user 用户名@ localhost; 
 
4. 修改指定用户密码
    @>mysql -u root -p
    @>密码
    mysql>update mysql.user set password=password('新密码') where User="test" and Host="localhost";
    mysql>flush privileges; 	
执行如下命令,即可把root密码修改为admin
set password for root@localhost = password('admin');
mysql随机获取记录
SELECT * FROM mydb_user  ORDER BY  RAND() LIMIT 5;
获取当前日期+时间
select now();
select now() as Systemtime;
select sysdate() as Systemtime;
-- 2019-09-30 13:41:00
select curdate();
select current_date as Systemtime;
-- 2019-09-30
Incorrect integer value: '' for column 'id' at row 1
数据格式为datetime,而且navicat默认给的是Empty String所以存不进去,和填写的注释内容无关。

 
 
CREATE DATABASE mybatis DEFAULT CHARACTER SET utf8;

再补充

1,show create table 旧表;
这样会将旧表的创建命令列出。我们只需要将该命令拷贝出来,更改table的名字,就可以建立一个完全一样的表

4、复制旧表的数据到新表-新表需已存在(假设两个表结构不一样)
insert into 新表(字段1,字段2,.......) select 字段1,字段2,...... from 旧表

5,跨库只复制数据
insert into db1.table1 select * from db2.table2 (完全复制,需新表已存在)
insert into db1.table1 select distinct * from db2.table2(不复制重复纪录,需新表已存在)
insert into tdb1.able1 select top 5 * from   db2.table2 (前五条纪录,需新表已存在)

select * from information_schema.tables

6,select * from tb_data_new limit 5,5; 
查询出6-10,从5开始查处5条,但不包括第5行

SELECT * from user LIMIT 0,5;
-- 等价于 SELECT * FROM user LIMIT 5;

SELECT * from user LIMIT 2 OFFSET 3; -- 跳过3个查2个
-- 等价于 SELECT * FROM user  LIMIT 3,2;

SELECT * FROM orange LIMIT 10,15;  -- 检索记录11-25

第n页: limit (pageNo-1)*pageSize,pageSize
pageNo:页码     pageSize:单页显示条数

7,开启事务
start transaction https://www.v2ex.com/t/501189
begin
发布了49 篇原创文章 · 获赞 103 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/vayne_xiao/article/details/104877192