MySQL 数据库-操作基础 与 CRUD

目录

一.常见资料 :

二.MySQL 管理命令

三.数据库的三层结构—破解MySQL神秘

 四,创建数据库

五.MySQL 常用数据类型

 数值型(整数)的基本使用

数值型(bit) 的使用 

数值型(小数)的基本使用

字符串的基本使用

字符串使用细节

日期类型的基本使用

六.修改表——基本介绍

使用 ALTER TABLE 语句追加,修改,或删除列的语法

修改表名 Rename table 表名 to 新表名

 七.数据库C[create]  R [read] U [update] D [delete] 语句

Insert 语句 

update 语句

delete语句

select 语句

合计/统计函数 - count 

合计函数 sum 

合计函数 -avg 

合计函数 Max - min 

select 语句

使用group by  字句对列进行分组[先创建测试表]


一.常见资料 :

服务:mysqld   端口:3306    主配置文件: /etc/my.cnf      初始化脚本:mysql_install_db

启动命令: mysqld_safe   数据目录:/var/lib/mysql

套接字文件:/var/lib/mysqld/mysqld.pid   

当以外关闭数据库时,在开启时假设如果开启不了,找到这个,删除在启动

进程文件:/var/run/mysqld/mysqld.pig

MySQL 登录及推出命令

设置密码: mysqladmin     -uroot  password '123456'

登录:mysql -u 用户名   -p 密码   -p 端口  -s 套接文字文件

-p 用户登录密码

-h 登录位置 主机名 或 ip 地址

-p 端口号  

-s 嵌接文字文件 (/var/lib/mysql/mysql.sock)

退出命令:exit 或 ctrl+d 

二.MySQL 管理命令

1.创建登录用户

mysql>create user zhangsan@ '%' identified by '123456';

% 指任意的远程终端 

2.测试用户登录

# yum -y install mysql 

# mysql -uzhangsan -p 123456 -h 192.168.88.10

3.用户为自己更改密码

mysql>set password=password('123456’);         

4.root 用户为其他用户找回密码

mysql> set password for zhangsan @'%' =password('123456'); 

三.数据库的三层结构—破解MySQL神秘

  1. 所谓安装MySQL数据库,就是在主机安装一个数据库管理系统(DBMS)这个管理类程序可以管理多个数据库。
  2. 一个数据库中可以创建多个表,以保存数据(信息)
  3. 数据库管理系统(DBMS)数据库和表的关系如下

SQL语句分类

  • DDL 数据库定义语句 [create 表,库]
  • DML 数据库操作语句 [增加,修改,删除]
  • DQL  数据库查询语句 [select]
  • DCL 数据库控制语句 [管理数据库] 

 四,创建数据库

语法 

CREAT DATABASE [IF NOT EXISTS] db_name
        [creat_specification[,creat_specification]...]

creat_specification:
    
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
        

CHARACTER SET: 指定数据采用的字符集,如果不指定字符集,默认utf-8

COLLATE 指定数据库字符集的校对规律(常用的 utf8_bin ,utf8_general_ci 注意默认是utf8_general_ci) [举例说明 database.sql 文件]

五.MySQL 常用数据类型

 数值型(整数)的基本使用

使用规范:在能够满足需求的情况下,尽量选择占用空间小的类型

数值型(bit) 的使用 

1.基本使用

mysql > creat table t02 (num bit(8));

mysql > insert into t02(1,3);

mysql > insert into t02 values(2,65);

2.细节说明 bit.sql 

  • bit 字段显示时,按照 位的方式显示
  • 查询的时候任然可以用使用 添加的数值
  • 如果一个值只有 0,1 可以考虑使用 bit(1) 可以节省空间
  • 位类型 M 指定位数 默认值1 范围 1-64
  • 使用不多 
数值型(小数)的基本使用

1.FLOAT/DOUBLE [ UNSIGNED]   Float 单精度精度  Double 双精度

2.DECIMAL[M,D] [UNSIGNED] 

  • 可以支持更加精确的小数位。m是小数位(精度)的总数 D是小数点(标度)后面的数字
  • 如果D 是 0 ,则值没有小数点或分数部分。M最大是 65 D 最大 30 如果D 被省略,默认是10
  • 建议:如果希望小数的精度高,推荐使用 decimal  
字符串的基本使用
  • CHAR(size)    固定长度字符串 最大 255 字节 
  • VARCHAR(size)   0-65535   可变长度字符串 最大65532 字节 【utf8 编码最大 21844字符 1-3个 字节用于记录字段大小】  gbk 编码两个字符代表一个字节
字符串使用细节

        细节1 charVarcharDetaik.sql 

cahr(4) // 这个4表示字符数(最大255),不是字符数,不管是中文还是字母都是四个,按位符计算。

varchar(4) //这个表示字符数,不管是字母还是中文都以定义好的编码来存放数据 

不管是 中文还是英文字母,都是最多存放4个,是按照字符来存储的。 

        细节2 

char(4) 是定长,就是说,即使你插入 'aa' 也会占用 分配4个字符的空间。varchar(40 是边长,就是说,如果你插入了'aa',实际占用空间大小并不是4个字符,而是按照实际占用的空间来分配L(实际数据大小)+ (1~3)字节

        细节3 

什么时候使用char 什么时候使用varchar 

  1. 如果数据是定长,推荐使用char 比如md5的密码,邮箱,手机号,身份证号码等 char(32)
  2. 如果一个字段的长度不确定,我们使用varchar 比如留言,文章
  3. 查询速度 char>varchar

        细节4

在存放文本时,也可以使用text 数据类型,也可以将TEXT 列视为VARCHAR 列 注意Text 不能有默认值,大小0-2^16 字节 如果希望存放更多字符,可以选择 MEDIUMTEXT 0~2^24 或者 LONGTEXT 0-2^32

日期类型的基本使用
CREATE TABLE t14 (
	birthday DATE, -- 生日
	jobtime DATETIME, -- 记录年月日 时分秒
	login_time TIMESTAMP 
		NOT NULL DEFAULT CURRENT_TIMESTAMP 
		ON UPDATE CURRENT_TIMESTAMP);
		#DROP TABLE T14; 
		-- 登录时间,如果需要login_time 如果需要login_time 列自动更新,需要配置 
-- NOT NULL DEEAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
SELECT * FROM t14;
INSERT INTO t14(birthday, jobtime)  -- 如果不指定 login_time 时间会显示当前的时间戳
VALUES('2023-9-24','2023-9-24 10:10:10'); 
-- 如果我们跟新了 t14 的某条记录 longin_time 列会自动的以当前时间进行更新 

创建练习

#创建表的练习
CREATE TABLE `emp` (
	id INT,
	`name` VARCHAR(32),
	sex CHAR(1),
	brithday DATE,
	entry_date DATETIME,
	job VARCHAR(32),
	salary DOUBLE,
	`resume` TEXT ) CHARSET utf8 COLLATE utf8_bin ENGINE INNODB;
	INSERT INTO `emp`
	VALUES (100, 'tian','男','2000-11-11','2010-11-10 11:11:11','xunshan','3000',
		'大王叫我来巡山');
		SELECT * FROM `emp`;

六.修改表——基本介绍

使用 ALTER TABLE 语句追加,修改,或删除列的语法
#添加列  
ALTER TABLE tablename
ADD (column datatype [DEFAULT expr]
    [,column datatype]...);
#修改列  
ALTER TABLE tablename
MODIFY (column datatype [DEFAULT expr]
    [,column datatype]...);
#删除列   
ALTER TABLE tablename
DROP (column);
   查看表的结构: desc 表名;   -- 可以查看表的列
修改表名 Rename table 表名 to 新表名

修改表字符集: alter table 表名  character set 字符集;

练习

# 修改表的操作
-- 员工表 emp 的上增加一个 image 列 varchar 类型 要求在resume 后面
ALTER TABLE emp 
	ADD image VARCHAR(32) NOT NULL DEFAULT ''
	AFTER RESUME  
DESC emp;  -- 显示表结构  可以显示查看表的所有列(字段)
-- 修改 job 列 使其长度位60
ALTER TABLE emp
	MODIFY job VARCHAR(60) NOT NULL DEFAULT ''
	DESC emp;
-- 删除 sex 列
ALTER TABLE emp 
	DROP sex;
DESC emp;

-- 修改表名
RENAME TABLE emp TO employee;
DESC employee;
-- 修该字符集
ALTER TABLE employee CHARACTER SET utf8;
-- 列名 name 修该 位user_name
ALTER TABLE employee 
	CHANGE `name` user_name VARCHAR(32) NOT NULL DEFAULT '';
DESC employee;

 七.数据库C[create]  R [read] U [update] D [delete] 语句

Insert 语句 

使用 insert 语句向表中插入数据 insert.sql

INSERT INTO table_name [(column [, column ... ])]

VASLUES  (value[,value...]);
#说明 insert 语句的细节
-- 1.插入的数据应与字段得到数据类型相同
-- 比如 把‘abc' 添加到 int 类型会错误
INSERT INTO goods (id,goods_name,price)
	VALUES(30,'小米手机',20000);
-- 2.数据的长度在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。
INSERT INTO goods (id,goods_name,price)
	VALUES('40','vivo手机',30000);
-- 3.在values 中列出的数据位置必须与被加入的列的排列位置相对应
INSERT INTO goods (id,goods_name,price)
	VALUES('vivo','40',30000);
-- 4.字符和日期型数据应该包含到单引号中
INSERT INTO goods (id,goods_name,price)
	VALUES(40,vivo,3000);  
-- 5.列可以插入空值[前提是字段允许为空] insert into table value(null)
INSERT INTO goods (id,goods_name,price)
	VALUES ('50','vivo',NULL); -- 如果定义的时候 没有not null 那么可以为空
-- 6.insert into tab_name (列名 ..) values (),(),() 新式添加多条记录
INSERT INTO goods(id,goods_name,price)
	VALUES (60,'三星手机',4000),(70,'苹果手机', 18000);
	SELECT *FROM goods;
-- 7.如果是给表中的所有字段添加数据,可以不写前面的字段名称 
INSERT INTO goods 
	VALUES(40,'vivo', 4000);
-- 8.默认值的使用 当不给某个字段值的时,如果有默认值就会添加默认值,否则会报错
-- 如果某个列,没有指定 not null 那么当添加数据时,没有给定值,则会默认给null
-- 如果希望指定某个列的默认值,可以在创建表的时候指定 not null defult 100
	INSERT INTO goods (id,goods_name)
	VALUES (80,'格力手机') 
	SELECT * FROM goods;
	
	
update 语句

使用update 语句修改表中的数据

UPDATE tbl_name
    SET col_name1=expr1[,col_name2=expr2...]
    [WHERE  where_definition]

update 语句 使用细节

  1. update 语法可以用新值更新原有表行中的各列
  2. set 子句指示要求修改那些列和要给予那些值
  3. where 子句指定应应更新那些行,如果没有where字句 则更新所有的行
  4. 如果要修改多行字段,可以通过 set 字段1 = 值1,字段2 = 值2...
# update语句 演示
-- 在上面创建的employee 表中修改表中的记录
UPDATE employee SET salary = 5000; #[如果没有带where 条件 ,会修改所有的记录]
-- 2.将姓名为tian 的员工薪水改为3000
UPDATE employee
	SET salary = 3000 
	WHERE user_name = 'tian';
-- 3. 将老妖怪的薪水在原有的基础上增加1000
INSERT INTO employee 
VALUES ( 200,'老妖怪','1990-11-11','2000-11-11 10:10:10','捶背',5000,'给大王捶背','d:\\a.jpg');
UPDATE employee 
	SET salary = salary + 2000
	WHERE user_name = '老妖怪';
-- 可以修改多个列
UPDATE employee 
SET salary = salary + 1000, job = '法师'
WHERE user_name = 'tian';
SELECT * FROM employee;

delete语句

使用delete 语句删除表中数据

delete from tab_name
    [WHERE where_definition]

 delete 语句使用细节

  1. 如果不适用where字句,将删除表中所有数据
  2. Delete 语句不能删除某一列的值 (可使用 update 设为 null 或者 ‘’)
  3. 使用 delete 语句仅删除记录,不删除表本身。如果要删除表,使用drop table 语句。drop table 表名;

 修改表名 rename table xxx to xxx

select 语句

基本语法

SELECT [DISTINCT] * | {column1,column2,column3...}
    
    FROM tablename;

 注意事项 

  1. select 制定查询那些列的数据
  2. column 指定列名
  3. * 号代表查询所有列
  4. from 指查询那张表
  5. DISTINCT 可选,指定显示结果时,是否去掉重复的数据

使用表达式对查询的列进行运算

SELECT *| {column | expression,column2 | expression, ......}
        FROM tablename;

在select 语句中可以使用as 语句

SELECT column_name as 别名 from 表名;
-- select 语句的使用
-- 统计每个学生的总分
SELECT `name`,(chinese+english+math) FROM student;
-- 在所有的学生总分上面加十分
SELECT `name`,(chinese + english + math + 10) FROM student;
-- 使用别名表示学生分数
SELECT `name` AS '名字',(chinese + english + math + 10 ) AS total_score FROM student;

在where 字句中经常使用的运算符

-- 使用 select 语句
-- 查询姓名为赵勇的学生成绩
SELECT * FROM student
	WHERE `name` = '赵云';
-- 查询英语成绩大于90分的同学
SELECT * FROM student
	WHERE english >= 90;
-- 查询总分大于200分的同学
 SELECT * FROM student 
	WHERE (english + math + chinese) > 200;
-- 查询 math 大于60 并且 id 大于90的学生成绩
	
SELECT * FROM  student 
	WHERE (math > 60) AND (id > 4);
-- 查询英语成绩大于语文成绩的同学
SELECT * FROM student
	WHERE English > chinese;
-- 查询总分大于200 并且 数学成绩小于语文成绩 的姓韩的同学  '韩%'
SELECT * FROM student 
	WHERE (chinese + math + english) > 200 AND (math < chinese) AND `name` LIKE '赵%';
-- 查询 英语成绩在八十到就是分之间的同学
SELECT * FROM student 
	WHERE  80 < english AND english < 90;
SELECT * FROM student 
	WHERE english BETWEEN 84 AND 85;
-- 查询数学分为 89 90 91的同学
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 '韩%';
-- 查询数学分>80  语文 > 80 的同学
SELECT * FROM student
	WHERE math > 80 AND chinese >80 ;

 使用select 不要 子句排序查询结果

SELECT column1,column2,column3...
    FROM table;
    order by column asc|desc, ...
  1. 使用order by 指定排序的列,排序的列既可以是表中的列名,也可以时select语句后指定的列名
  2. Asc 升序[默认] Desc 降序
  3. ORDER BY  字句位于SELECT 语句的结尾
-- 演示 order by  使用
-- 对数学成绩排序后输出 [升序] asc 
SELECT *  FROM student
	ORDER BY math;
-- 对总分按照从高到底的顺序输出 [降序] desc
SELECT `name`, (math + chinese + english) AS total_score FROM student 
	ORDER BY  total_score DESC;
-- 对姓名性李的学生成绩(总分)排序
SELECT `name`,(math +chinese + english) AS total_score  FROM student 
	WHERE `name` LIKE '韩%'
	ORDER BY total_score;

合计/统计函数 - count 

count 返回行的总数

select count(*)  | count(列名) from tablename 
        [WHERE where_definition]

-- 演示 MySQL 中的统计函数
 -- 统计一个班级里面有多少学生
 SELECT COUNT(*) FROM student;
 -- 统计 数学成绩大于90 的学生有多少
 SELECT COUNT(*) FROM student
	WHERE math >= 90;
-- 统计总分大于 250 的人数有多少
SELECT COUNT(*) FROM student
	WHERE (math + english + chinese) > 250;
-- 解释 count(*) 返回满足条件的记录的行数
-- count(列) 统计满足条件的某列有多少个 但是会排除为空的情况、
CREATE TABLE t15 (
	`name` VARCHAR(20));
INSERT INTO t15 VALUES('tom');
INSERT INTO t15 VALUES('jack');
INSERT INTO t15 VALUES('mary');
INSERT INTO t15 VALUES (NULL);
SELECT * FROM t15;
 
SELECT COUNT(*) FROM t15; -- 4
SELECT COUNT(`name`) FROM t15;
合计函数 sum 

Sum 函数返回满足where  条件的行的和   一般使用在数值列

Select sum(列名) {,sum(列名)... } from tablename
    [WHERE    where_definition]

sum 仅对数值起作用,没有意义。 对多列求和, “,” 不能少 

-- sum 函数的使用
-- 演示一个班级的语文成绩的和
SELECT SUM(math) FROM student;
-- 统计一个班级的语文 数学英语 各科成绩的总和
SELECT SUM(math), SUM(chinese),SUM(english) FROM student;
-- 统计班级语文 英语 数学 的成绩综合
SELECT SUM(math) + SUM(chinese) + SUM(english) FROM student;
-- 统计一个班级的语文的平均分数
SELECT AVG(chinese) FROM student;
SELECT SUM(chinese) / COUNT(*) FROM student;
合计函数 -avg 

AVG 函数 返回满足where 条件的一列的平均值

SELECT avg(列名) { ,avg(列名)... } from tablename
    [ WHERE where——defininition]
-- 演示 avg 的使用
-- 求一个班级数学平均分 
SELECT AVG(math) FROM student;
-- 求一个班级总平均分
SELECT AVG(math + english + chinese) FROM student;
合计函数 Max - min 

Max/min 函数返回满足where 条件的一列的最大/最小值

select max(列名) from tablename 
    [WHERE where_definition]
-- max/min 的使用
SELECT MAX(math) FROM student;

SELECT MIN(math + chinese + chinese) FROM student;
select 语句
使用group by  字句对列进行分组[先创建测试表]
SELECT cloumn1,column2,column3 .. FROM table
    group by column

使用 having 字句对分组后的结果进行过滤

SELECT cloumn1,cloumn2,column3...
    FROM table 
    group by column having...
CREATE TABLE dept( /*部门表*/
deptno MEDIUMINT   UNSIGNED  NOT NULL  DEFAULT 0, 
dname VARCHAR(20)  NOT NULL  DEFAULT "",
loc VARCHAR(13) NOT NULL DEFAULT ""
);

INSERT INTO dept 
VALUES(10, 'ACCOUNTING', 'NEW YORK'), 
	(20, 'RESEARCH', 'DALLAS'), 
	(30, 'SALES', 'CHICAGO'),
	(40, 'OPERATIONS', 'BOSTON');
SELECT * FROM dept;
-- 添加 一个员工表
#创建表EMP雇员
CREATE TABLE emp
(empno  MEDIUMINT UNSIGNED  NOT NULL  DEFAULT 0, /*编号*/
ename VARCHAR(20) NOT NULL DEFAULT "", /*名字*/
job VARCHAR(9) NOT NULL DEFAULT "",/*工作*/
mgr MEDIUMINT UNSIGNED ,/*上级编号*/
hiredate DATE NOT NULL,/*入职时间*/
sal DECIMAL(7,2)  NOT NULL,/*薪水*/
comm DECIMAL(7,2) ,/*红利*/
deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 /*部门编号*/
);
-- 添加测试数据
 INSERT INTO emp VALUES(7369, 'SMITH', 'CLERK', 7902, '1990-12-17', 800.00,NULL , 20), 
(7499, 'ALLEN', 'SALESMAN', 7698, '1991-2-20', 1600.00, 300.00, 30),  
(7521, 'WARD', 'SALESMAN', 7698, '1991-2-22', 1250.00, 500.00, 30),  
(7566, 'JONES', 'MANAGER', 7839, '1991-4-2', 2975.00,NULL,20),  
(7654, 'MARTIN', 'SALESMAN', 7698, '1991-9-28',1250.00,1400.00,30),  
(7698, 'BLAKE','MANAGER', 7839,'1991-5-1', 2850.00,NULL,30),  
(7782, 'CLARK','MANAGER', 7839, '1991-6-9',2450.00,NULL,10),  
(7788, 'SCOTT','ANALYST',7566, '1997-4-19',3000.00,NULL,20),  
(7839, 'KING','PRESIDENT',NULL,'1991-11-17',5000.00,NULL,10),  
(7844, 'TURNER', 'SALESMAN',7698, '1991-9-8', 1500.00, NULL,30),  
(7900, 'JAMES','CLERK',7698, '1991-12-3',950.00,NULL,30),  
(7902, 'FORD', 'ANALYST',7566,'1991-12-3',3000.00, NULL,20),  
(7934,'MILLER','CLERK',7782,'1992-1-23', 1300.00, NULL,10);

SELECT * FROM emp;

-- 工资级别表
CREATE TABLE salgrade
(
grade MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, /* 工资级别 */
losal DECIMAL(17,2)  NOT NULL,   /* 该级别的最低工资*/
hisal DECIMAL(17,2)  NOT NULL    /* 该级别的最高工工资 */
);

INSERT INTO salgrade VALUES (1,700,1200);
INSERT INTO salgrade VALUES (2,1201,1400);
INSERT INTO salgrade VALUES (3,1401,2000);
INSERT INTO salgrade VALUES (4,2001,3000);
INSERT INTO salgrade VALUES (5,3001,9999);
SELECT * FROM salgrade;
# 演示group by + having 
-- group by 用于对查询的结果分组统计 
-- 如何显示每个部门的平均工资和最高工资 avg(sal) max(sal)
-- 按照部门来分组查询
SELECT AVG(sal), MAX(sal),deptno
	FROM emp GROUP BY deptno;
-- 显示每个部门的每种岗位的平均工资和最底工资
-- 1.显示每个部门的平均工资和最低工资
-- 2.显示每个部门的每种岗位的平均工资和最低工资
SELECT AVG(sal), MIN(sal),deptno
	FROM emp GROUP BY deptno;
SELECT AVG(sal), MIN(sal),deptno,job
	FROM emp GROUP BY deptno,job;
-- 显示平均工资低于两千的部门和他的平均工资  //别名
-- 写sql 语句的思路是 化繁为简 各个击破
-- 1.显示各个部门的平局工资和部门号
-- 2.在1 的结果基础上,进行过过滤,保留 avg(sal) < 2000
-- 3.使用别名进行过滤
SELECT AVG(sal),deptno
	FROM emp GROUP BY deptno
		HAVING AVG(sal)<2000;
SELECT AVG(sal) AS avg_sal,deptno
	FROM emp GROUP BY deptno
		HAVING avg_sal< 2000;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bit..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值