MySQL的学习1

MySQL

前置知识

  • 首先知道下载的mysql相当于是下载了一个服务端(这个提供了数据存储的一个服务)
    客户端想要连接我们的Mysql,其实就是连接的3306这个端口
    连接到Mysql服务(Mysql数据库)的指令:
    mysql -h 主机IP -P 端口 用户名 -p密码
    注意:
    1)-p密码不要有空格
    2)如果-p后面没有密码,回车会要求输入密码
    输入一下指令就会连接到数据库
    用命令行登录数据库的方法如下:
    mysql -h localhost -P 3306 -u root -plk

  • 数据库的三层结构(数据库的解析)
    1.所谓的安装Mysql数据库,其实就是在主机安装了一个数据库的管理系统(DBMS),这个管理程序可以管理多个数据库(Database manage system)
    2.一个数据库中可以创建多个表,以保存数据
    Mysql数据库(DBMS)->管理很多的数据库(DB1,DB2,DB3)->每个数据库里面又有很多的表(表1,表2,视图等等)

  • 因为Mysql是有端口的,在3306端口监听

  • mysqld是DBMS当中最重要的程序(是核心的监听的程序)

  • 我们下载的数据库,在数据库下载的data包当中

  • Mysql数据库-表 的本质仍然是文件(关键)

SQL语句的分类:
DDL:数据定义语句【creat表,库…】
DML:数据操作语言【增加 insert,修改 update,删除 delete】
DQL:数据查询语句【select】
DCL:数据控制语言【管理数据库:比如用户的权限 grant revoke】

Mysql的基本数据类型

在这里插入图片描述#Mysql常见的数据类型(列类型)
#Mysql列类型
#数值类型:(整型:tingint[1个字节],smallint[2个字节],
#mediumint[3个字节],int[4个字节],bigint[8个字节])
#(小数类型:float[单精度 四个字节],double[双精度 8个字节],
#decimal[M,D] 大小不确定的) M指定长度,D表示小数点的位数
#文本类型:(char 0-255,varchar 0-65535[0-2^16-1],text 0-2^16-1,
#longtext 0-2^32-1)
#二进制数据类型:blob[0-2^16-1] longblob[0-2^32-1]
#日期的数据类型(日期类型):(date[日期类型 年月日],time[时间 时分秒]
#datetime[年月日 时分秒 YYYY-MM-DD HH:mm:ss] timestamp[时间戳]

1.1bit类型的使用

#演示一个整型的使用
#如果没有指定 unsinged,则TINYINT就是有符号的
CREATE TABLE t3(
	id TINYINT #没有指定的话就是有符号的类型,加入unsigned 无符号类型
	);
INSERT INTO t3 VALUES(-128);#非常简单的添加语句
CREATE TABLE t4(
	id TINYINT UNSIGNED);	
SELECT * FROM t3;
SELECT * FROM t4;

1.2整型的使用

#演示一个整型的使用
#如果没有指定 unsinged,则TINYINT就是有符号的
CREATE TABLE t3(
	id TINYINT #没有指定的话就是有符号的类型,加入unsigned 无符号类型
	);
INSERT INTO t3 VALUES(-128);#非常简单的添加语句
CREATE TABLE t4(
	id TINYINT UNSIGNED);	
SELECT * FROM t3;
SELECT * FROM t4;

1.3浮点数类型

#演示decimal类型,float,double类型的使用
#创建表
CREATE TABLE t06(
	num1 FLOAT,
	num2 DOUBLE,
	num3 DECIMAL(30,20)#小数点后面是20位,decimal可以存放很大的数
);
INSERT INTO t06 VALUES(88.12345678912345,88.12345678912345,88.12345678912345);

SELECT * FROM t06;

CREATE TABLE t07(
	num DECIMAL(65)
)

INSERT INTO t07 VALUES(999999999999999999999999);
SELECT * FROM t07;

1.4字符型

#演示字符串类型的使用
-- #注释的快捷键
-- #CHAR(size) 固定长度字符串 最大255字符
-- #VARCHAR(size) 0-65535 可变字符串最大 65532字节 utf8[编码最大21844字符 1-3个字节用于记录大小]
-- #gbk编码是2个字节表示一个编码  utf8是3个字节表示一个编码
-- 如果表的编码是 utf8 varchar(size) size = (65535-3)/3 = 21844
-- 如果表的编码是 utf8 varchar(size) size = (65535-3)/2 = 32766
CREATE TABLE t09(
	`name` CHAR(255));
CREATE TABLE t10(
	`name` VARCHAR(21844)
	);
CREATE TABLE t11(
	`name` VARCHAR(32766)) CHARSET gbk;

DROP TABLE t11;
#细节1:演示字符串使用的细节 char(4) 这里的4表示4个字符,varchar(4)表示4个字符,而不是字节
CREATE TABLE t12(
	`name` CHAR(4));
#注意这里4个字符,这里不区分你是汉字还是字母
INSERT INTO t12 VALUES('李康你好');
SELECT * FROM t12;
INSERT INTO t12 VALUES('ab北京');
#细节2:char(4)代表是定长,就是说,及时我们插入的是'aa',也会占用分配的4个字符的空间
#细节3:varchar(4) 是变化的长度(变化的大小) 即使我们插入的是'aa',实际占用的空间并不是四个字符
# varchar本身还需要占用1-3个字节来记录存放内容的长度 'aa'+1-3个字节 
# 如果数据是定长的话,推荐使用char,比如md5的密码,邮编,手机号码,身份证号码等
# 如果一个字段的长度是不确定的,我们使用varchar,比如留言文章等等
# 查询速度:char > varchar
# 细节4:在存放文本的时候,可以使用TEXT数据类型。可以将TEXT列视为
# 如果varchar 不够用,可以使用mediumtext longtext
CREATE TABLE t13(content TEXT,content2 MEDIUMTEXT,content3 LONGTEXT);
INSERT INTO t13 VALUES('李康加油','李康加油不要放弃保持更新学习','李康坚持住,坚持住了就会有不一样的收货');
SELECT * FROM t13;
#日期类型的使用 



1.5日期的相关类型的使用

#日期类型的基本使用
#演示时间相关的类型
#创建一张表,data,datetime,timestamp
CREATE TABLE t14(
	birthday DATE, #记录生日
	job_time DATETIME, #记录年月日 时分秒
	login_time TIMESTAMP 
	NOT NULL DEFAULT CURRENT_TIMESTAMP
	 ON UPDATE CURRENT_TIMESTAMP); #登录时间,如果希望login_time列自动更新,需要配置
SELECT * FROM t14; 
INSERT INTO t14(birthday,job_time)
 VALUES('2022-11-11','2022-11-11 10:10:10'); #如果时间戳不写的话,就会用当前的时间进行更新
 # 如果我们更新了 t14的某条记录,login_time会变成当前时间

1.6文本类型

#创建表的练习
#还有136天过年的话 首先Mysql可以写个1-2篇的blog

CREATE TABLE emp(
	id INT,
	name1 VARCHAR(32),
	sex CHAR(1),
	birthday DATE,
	entry_date DATETIME,
	job VARCHAR(32),
	salary DOUBLE,
	RESUME TEXT) CHARSET utf8 COLLATE utf8_bin ENGINE INNODB;
	
#添加一条数据
INSERT INTO emp VALUES(100,'小妖怪','男','2002-03-28',
			'2020-09-01 11-11-11','巡山',3000,'大王叫我来巡山');
SELECT * FROM emp;
DROP TABLE emp

Mysql的指令操作

2.1对包的操作

#演示创建数据库(数据库的相关操作)
#创建一个名称为 lk_db01的数据库(图形话的操作 和 演示)
#这样的指令执行这些语句的话,没有指定器字符集,和其校对的规则
#如果没有指定的话,字符集是utf8,数据库的排序规则是utf8 gerneral ci(不区分大小写进行的排序)
CREATE DATABASE lk_db01
#删除数据库的指令
DROP DATABASE lk_dbo1
#创建一个使用utf8字符集的lk_db02数据库
CREATE DATABASE lk_db02  CHARACTER SET utf8
#创建一个使用utf8字符集,并带校对规则的lk_db03数据库
CREATE DATABASE lk_db03  CHARACTER SET utf8 COLLATE utf8_bin 
#校对规则里面 utf8_bin 区分大小写 utf8_general_ci 不区分大小写
#如果创建的表没有指定字符集和校对的规则,那样的话这张表就会根据数据库的创建规则来创建表

#下面是一个查询的语句 select(查询) *表示所有字段 from 表示从那个表查询

SELECT * FROM t1 WHERE NAME = 'tom'
#演示删除和查询数据库
#数据库的备份和恢复
#备份数据库 mysqldump -u root -p -B 数据库1 > 文件名.sql
#恢复数据库
#mysql -u root -p
#source 文件名.sql
SHOW DATABASES
#查看前面创建的lk_db01数据库的定义信息
SHOW CREATE DATABASE lk_db01
#在创建数据库,表的时候,为了规避关键字,可以用反引号解决
#反引号在标点符号当中,和波浪线的符号是差不多的,反引号的作用是规避关键字
CREATE DATABASE `CREATE`
#不是关键字的话不带反应号也是没关系的
DROP DATABASE `CREATE`
#备份和恢复数据库
#备份lk_db01和lk_db02数据库中的数据,并恢复
#备份的文件,其实就是对应的sql语句,可以将很多的数据库保存在一个sql文件当中
mysqldump -u root -p -B lk_db01 lk_db02 > D:\\lkmysql\\back\\bsk.sql
DROP DATABASE lk_db02;
#恢复lk_dbo1 和lk_db02 这些文件(注意下面的语句进入 Mysql命令行再执行)
#恢复的方法1
#mysql -u root -p
#source D:\\lkmysql\\back\\bsk.sql
#还有一种将形成的sql语句,将里面的内容全部拷贝到新的sql当中然后全选以后执行
#如果不想备份全部的数据库 只想备份一张表的情况
#mysqldump -u root -p lk_db02 > D:\\lkmysql\\back\\bsk2.sql

#这里也可以写SQL语句,可以在这里学习MySQL的指令
SELECT * FROM users
#添加一个用户,注意符号全都是英文的才行
INSERT INTO users VALUES(4,'马超','天津');
#学习mysql语句是因为我们要通过java语句来操作数据库

2.2对表的Mysql指令和操作

#修改表的指令
ALTER TABLE emp 
	ADD image VARCHAR(255) NOT NULL DEFAULT ''
	AFTER RESUME
DESC emp #显示表的所有结构,可以查看表的所有列
#修改表中列的指令
ALTER TABLE emp
	MODIFY job VARCHAR(60) NOT NULL DEFAULT ''
ALTER TABLE emp
	DROP sex
#将表的名字从emp修改为employee
RENAME TABLE emp TO employee
#修改表的字符集为utf8
ALTER TABLE employee CHARACTER SET utf8
#修改某个表的一列的名字
ALTER TABLE employee
	CHANGE name1  `username` VARCHAR(64) NOT NULL DEFAULT ''
DESC employee
#创建表,删除表,(表的操作)
#图形化的方式了解即可
#表很多是通过指令来创建的 利用指令来创建表的操作
#运用指令创建一个表
CREATE TABLE `user`(
	id INT,
	`name` VARCHAR(255),
	`password` VARCHAR(255),
	`birthday` DATE)
	CHARACTER SET utf8 COLLATE utf8_bin ENGINE INNODB; 


表的数据的增删改查

#实现数据库的增删改查的命令语句
#一:插入的实现和用法
CREATE TABLE `goods`(
	id INT,
	goods_name VARCHAR(10),
	price DOUBLE NOT NULL DEFAULT 100);#没有not null 代表这个价格是可以设置为空的
INSERT INTO `goods` (id,goods_name,price)
	VALUES(10,'华为手机',3000)
INSERT INTO `goods` (id ,goods_name,price)
	VALUES(11,'苹果手机',4000)
INSERT INTO `goods` (id ,goods_name,price)
	VALUES('30','小米手机',2000)
#'30'虽然是字符类型,我们规定这个是int类型,这样可能会自动转型:从char-》int	
DESC employee
INSERT INTO employee(id,username,sex,birthday,entry_date,job,salary,`resume`)
	VALUES(2,'林英','女','2001-11-11','2020-03-08 11-12-45','学生','-1200','魅力')
SELECT * FROM employee
#insert 插入注意的细节问题
#1.插入的数据应该与字段的数据类型相同
#2.数据的长度应该在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列当中
#3.数据类型要相互对应才行 
#4.字符和日期相关的数据类型,必须添加在单引号当中去
#5.列可以插入空值 insert into table value(null)  当创建表的时候没有说不准为空
INSERT INTO `goods` (id,goods_name,price)
	VALUES(40,'vivo手机',NULL)
#6.insert into table name values (),(),() 这样的形式来添加多条记录
INSERT INTO `goods`(id,goods_name,price)
	VALUES(50,'三星手机',6000),(60,'oppo手机',4500)
SELECT * FROM `goods`
#7.如果是给表中的所有字段添加数据,可以不写前面字段的名称
INSERT INTO goods
	VALUES(80,'锤子手机',3500)
#8.默认值的使用,当不给某个字段值的时候,如果有默认值就会设置为默认值,否则为空
INSERT INTO goods(id,goods_name)
	VALUES(90,'格力手机');
CREATE TABLE `goods2`(
	id INT,
	goods_name VARCHAR(10),
	price DOUBLE NOT NULL DEFAULT 100);#没有not null 代表这个价格是可以设置为空的
INSERT INTO goods2(id,goods_name)
	VALUES(100,'蓝莓手机');
SELECT * FROM goods2 #not null default 100 表示这个不能为空,并且设置的默认值是100
#二:update修改的语句命令的用法
#演示update语句
DESC employee
SELECT * FROM employee
#将所有员工的薪水修改为5000(谨慎使用)
UPDATE employee SET  salary = 5000
#将员工小妖怪的薪水设置为 3000元
UPDATE employee
	SET salary = 3000
	WHERE username = '小妖怪'
INSERT INTO employee
	VALUE(5,'老妖怪','男','1990-11-11','2000-11-11 10:10:10','捶背的',5000,'给大王捶背的')
#将老妖怪在原来的基础上面增加 1000块钱
UPDATE employee
	SET salary = salary + 1000,job = '出主意的'
	WHERE username = '老妖怪'

#set语句的使用细节
#update 语句如果没有带where一定要谨慎使用
#set  字段1 = 值,字段2 = 值
#使用delete语句删除表当中的数据
#三:delete 删除语句的使用以及其方法
#删除表中名称为’老妖怪‘的记录
DELETE FROM employee
	WHERE username = '老妖怪';
#如果不使用where语句,将会删除全部的表的数据
DELETE FROM employee
#delete语句不能删除某一列的值(可以使用update 将其设置为null 或者'')
SELECT * FROM employee;
#delete语句只能删除记录,但是表本身是不会有影响的
#要删除所有的值的话要用 drop table 表的名称
DROP TABLE employee

#四:select语句 在面试考核当中经常考察 ******非常重要啊 重难点
 
CREATE TABLE student(
	id INT NOT NULL DEFAULT 1,
	`name` VARCHAR(20) NOT NULL DEFAULT '',
	chinese FLOAT NOT NULL DEFAULT 0.0,
	english FLOAT NOT NULL DEFAULT 0.0,
	math FLOAT NOT NULL DEFAULT 0.0
);
INSERT INTO student(id,`name`,chinese,english,math) VALUES(1,'lk',89,99,100);
INSERT INTO student(id,`name`,chinese,english,math) VALUES(2,'张飞',69,66,78);
INSERT INTO student(id,`name`,chinese,english,math) VALUES(3,'宋江',100,100,100);
INSERT INTO student(id,`name`,chinese,english,math) VALUES(4,'关羽',89,99,100);
INSERT INTO student(id,`name`,chinese,english,math) VALUES(5,'赵云',89,99,100);
INSERT INTO student(id,`name`,chinese,english,math) VALUES(6,'刘邦',89,99,100);
INSERT INTO student(id,`name`,chinese,english,math) VALUES(7,'黄荣',75,88,65);
INSERT INTO student(id,`name`,chinese,english,math) VALUES(8,'刘备',88,88,99);
#查询表中的所有学生
#select使用1
SELECT * FROM student;
#查询所有学生的姓名和对应的英语成绩
SELECT `name`,english FROM student; 
#过滤表中的重复的成绩 distinct
SELECT english FROM student;
SELECT DISTINCT english FROM student;
#distinct其中必须所有的字段全部不相同才会被显示出来
SELECT DISTINCT `name`,english FROM student;

#select 语句的使用2
#统计每个学生的总分
SELECT `name`,(chinese+english+math) FROM student;
#在所有学生总分上面加十分
#取个别名 在查询的时候可以使用 as 将显示的名字变成别名的形式 
SELECT 	`name`,(chinese+english+math+10) AS total_score FROM student;
#使用别名表示学生的分数
SELECT `name` AS '名字',(chinese + english + math + 10) AS total_score FROM student;

#select 语句的使用3
#在where字句当中经常使用的运算符
#查询姓名为赵云的名字
SELECT * FROM student
	WHERE `name` = '赵云'
#查询英语成绩大于90分的同学
SELECT * FROM student
	WHERE english > 90
#查询总分大于200分的同学
SELECT * FROM student
	WHERE (chinese+english+math)>270
#查询math大于60,并且id大于4的学生的成绩
SELECT * FROM student
	WHERE (math>60 AND id>4)
#查询英语成绩大于语文成绩的
SELECT * FROM student 
	WHERE english > chinese
#查询总分大于200分 并且数学成绩小于语文成绩的,姓韩的学生。
#韩% name like '赵%' 代表名字的首个符号是赵的条件
SELECT * FROM student
	WHERE(chinese+english+math) > 200 AND
	math > chinese AND `name` LIKE '赵%' 
SELECT * FROM student 
	WHERE english>=80 AND english<90;

SELECT * FROM student 
	WHERE english>=80 AND english<=90
SELECT * FROM student
	WHERE math=89 OR math=90 OR math=91;
SELECT * FROM student 
	WHERE math IN (89,90,91)
SELECT * FROM student
	WHERE `name` LIKE 'L%'
SELECT * FROM student
	WHERE math > 80 AND chinese > 80;
#自己的练习  无他,维手熟尔
SELECT * FROM student
	WHERE chinese>=70 AND chinese<=80
SELECT * FROM student
	WHERE (chinese+english+math) IN (189,190,191);
SELECT * FROM student
	WHERE `name` LIKE '张%' OR `name` LIKE '宋%'
SELECT * FROM student 
	WHERE (math-chinese)>=30
DESC student #显示出来学生的这个结构才行
SELECT * FROM student
#select 语句的使用4
#order by 指定排序的列,排序的列即可以是表中的列名,也可以是
#演示order by 的使用
SELECT * FROM student
#如果没有设置 desc(降序) 我们默认是升序
SELECT * FROM student
	ORDER BY math DESC
#下降的排序
SELECT `name`,(chinese+english+math) AS total_score FROM student
	ORDER BY total_score DESC
#上升的排序
SELECT `name`,(chinese+english+math) AS total_score FROM student
	ORDER BY total_score 
SELECT `name`,(chinese + english +math) AS total_score FROM student
	WHERE `name` LIKE '刘%'
	ORDER BY total_score DESC
#Mysql零基础表的语句增删改查基本完成,写一篇blog,太强了666



  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值