日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL 基础一(B站黑马程序员MySQL教程笔记)

發布時間:2023/12/9 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL 基础一(B站黑马程序员MySQL教程笔记) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、MySQL概述?

二、SQL

1.SQL通用語法

2.SQL分類

DDL

(1)數據庫操作

(2)表操作

DML

DQL

語法

執行順序

DCL

管理用戶

權限控制

三、函數


一、MySQL概述?

1.基本概念

  • 數據庫:數據存儲的倉庫
  • 數據庫管理系統:操縱和管理數據庫的大型軟件
  • SQL:操作關系型數據庫的編程語言,是一套標準

2.主流關系型數據庫管理系統(操作語言均是SQL)

  • ORACLE:收費
  • MYSQL:開源免費的中小型數據庫,社區版本不收費
  • SQLServer:微軟研發的中型數據庫,收費
  • PostgreSQL:開源免費的中小型數據庫

3.啟動與連接

  • 啟動,停止:windows 搜索services.msc--mysql80
  • 客戶端連接:菜單-MySQL-輸入密碼123456

4.

  • 關系型數據庫:建立在關系模型基礎上,由多張相互連接的二維表組成的數據庫。
  • 一個數據庫服務器中可以創建多個數據庫,一個數據庫中可以創建多張表

二、SQL

1.SQL通用語法

  • 可以單行或多行書寫,以分號(英文)結尾
  • 可以使用空格、縮進來增強語句的可讀性
  • MySQL數據庫的SQL語句不區分大小寫,關鍵字建議使用大寫。
  • 單行注釋:--注釋內容或#注釋內容;多行注釋/*注釋內容*/

2.SQL分類

  • DDL:數據定義語言,用來定義數據庫對象(數據庫,表,字段)
  • DML:數據操作語言,用來對數據庫表中數據進行增刪改
  • DQL:數據查詢語言,用來查詢數據庫中表的記錄
  • DCL:數據控制語言,用來創建數據庫用戶,控制數據庫的訪問權限

DDL

(1)數據庫操作

  • 查詢:查詢所有數據庫:show databases;查詢當前數據庫:select database();
  • 創建:create database[if not exists]數據庫名[default charset字符集][collate排序規則]#方括號表可選
  • 刪除:drop database[if exists]數據庫名;
  • 使用:use 數據庫名

(2)表操作

  • 查詢當前數據庫所有表:show tables;
  • 查詢表結構:desc表名;
  • 查詢指定表的建表語句:show create table 表名;
  • 創建:
create table 表名(字段1 字段1類型[comment 字段1注釋],字段2 字段2類型[comment 字段1注釋],字段3 字段3類型[comment 字段1注釋],……字段n 字段n類型[comment 字段1注釋],)[comment 表注釋]; #最后一個字段后面沒有逗號mysql> create table tb_user(-> id int comment '編號',-> name varchar(50) comment '姓名',-> age int comment '年齡',-> gender varchar(1) comment '性別'-> ) comment '用戶表'; Query OK, 0 rows affected (0.08 sec)mysql> desc tb_user; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | id | int | YES | | NULL | | | name | varchar(50) | YES | | NULL | | | age | int | YES | | NULL | | | gender | varchar(1) | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 4 rows in set (0.01 sec)mysql> show create table tb_user; +---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | tb_user | CREATE TABLE `tb_user` (`id` int DEFAULT NULL COMMENT '編號',`name` varchar(50) DEFAULT NULL COMMENT '姓名',`age` int DEFAULT NULL COMMENT '年齡',`gender` varchar(1) DEFAULT NULL COMMENT '性別' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用戶表' | +---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.02 sec)mysql>
  • 數據類型

?舉例:age tinyint?unsigned(年齡一般不會超過四位,不會為負數)

? ? ? ? ? ?score double(4,1)(分數一般取一位小數,個數不會超過4位數)

?舉例:char(10)-----性能好? ? 性別 gender char(1)一直占10個位

? ? ? ? ? ? varchar(10)-----性能較差 用戶名 username varchar(50)? 有幾個字符占幾個位

?舉例:birthday data

create table emp(id int,workno varchar(10),name varchar(10),gender char(1),age tinyint unsigned,idcard char(18),entrydate date ) comment '員工表';
  • 修改

添加字段alter table 表名 add 字段名 類型(長度)[comment 注釋][約束];
修改數據類型alter table 表名 modify 字段名 新數據類型(長度);
修改字段名和字段類型alter table 表名change 舊字段名 新字段名 類型(長度)[comment 注釋][約束];
刪除字段alter table 表名 drop 字段名;
修改表名alter table 表名 rename to 新表名;
alter table emp add nickname varchar(20); alter table emp change nickname username varchar(30); mysql> alter table emp drop nickname; mysql> alter table emp rename to employee;
  • 刪除

刪除表drop table[if exist]表名;
刪除指定表,并重新創建該表truncate table 表名;#刪除了數據,留下了框架

DML

  • 添加數據

給指定字段添加數據insert into 表名(字段名1,字段名2,……) values(值1,值2,……);
給全部字段添加數據insert into 表名 values (值1,值2,……);
批量添加數據

insert into 表名(字段名1,字段名2,……)values(值1,值2,……),(值1,值2,……);

insert into 表名 values(值1,值2,……),(值1,值2,……);
  • 修改數據:update 表名 set 字段名1=值1,字段名2=值2,……[where 條件];#沒有條件就是全部修改

update user set name ='ittest' where id=1;
  • 刪除數據:delect from 表名[where 條件]

delete from user where age=18;

DQL

語法

  • 基本查詢
查詢多個字段select 字段1,字段2,字段3……from 表名;
查詢所有字段select*from 表名;
設置別名select 字段1[as 別名1],字段2[as 別名2]……from 表名;
去除重復記錄select distinct 字段列表 from 表名;
create table emp(id int,workno varchar(10),name varchar(10),gender char(1),age tinyint unsigned,idcard char(18),entrydate date,worksddress varchar(50) ) comment '員工表';insert into emp (id, workno, name, gender, age, idcard, entrydate, worksddress) values (1,'1','劉艷','女',20,'12345678909876','2000-01-01','北京'),(2,'2','劉小艷','女',21,'12345678809876','2006-01-01','北京'),(3,'3','劉近','男',24,'12333678909876','2001-05-01','河南'),(4,'4','麗麗','女',25,'44345678909876','2005-01-01','上海'),(5,'5','黃麗','女',23,'22775678909876','2004-05-01','南昌'),(6,'6','金小','女',27,'32348878909876','2009-05-01','北京'),(7,'7','張艷','女',20,'42345678909876','2010-01-01','北京'),(8,'8','小力','男',20,'52345678909876','2022-07-01','北京'),(9,'9','宏光','男',20,'62345678909876','2013-01-01','江蘇'),(10,'10','勇士','男',20,'72345678909876','2014-08-01','北京'),(11,'11','故里','女',20,'82345678909876','2011-01-01','北京'),(12,'12','范嘉','女',23,'92345678909876','2017-07-01','沈陽'),(13,'13','王丹','女',24,'23345678909876','2006-06-01','北京'),(14,'14','誠實','男',26,'45345678909876','2000-07-01','大連'),(15,'15','黃亮','男',28,'78345678909876','2009-07-01','北京'),(16,'16','周芷若','女',20,null,'2009-01-01','北京'); select name,workno,age from emp; select*from emp; select worksddress from emp; select worksddress as '工作地址' from emp; select distinct worksddress as '工作地址' from emp;
  • 條件查詢
語法select 字段列表 from 表名 where 條件列表;
<>或!=不等于
between and某個范圍之內(含最小值,最大值)
in()在in之后的列表中的值,多選一
like 占位符模糊匹配(_匹配單個字符,%匹配任意個字符)
is null是null
and或&&并且
or 或||或者
not或 !非,不是
select *from emp where age=20; select * from emp where age<26; select*from emp where idcard is null; select *from emp where idcard is not null; select *from emp where age!=20; select *from emp where age>=23 and age<=28; select *from emp where age between 23 and 28; select *from emp where gender='女' and age<23; select *from emp where age=20 or age=21 or age=23; select *from emp where age in (20,21,23); select *from emp where name like '___'; select *from emp where idcard like '%6';
  • 聚合函數:將一列數據作為一個整體,進行縱向計算
語法select 聚合函數(字段列表)from 表名;
count統計數量
max最大值
min最小值
avg平均值
sum求和
select count(*) from emp;#null不參與聚合函數計算 select avg(age) from emp; select max(age) from emp; select sum(age) from emp where worksddress='北京';
  • 分組查詢
語法select 字段列表 from 表名[where 條件] group by 分組字段[having 分組后過濾條件];
where和having區別

執行時機不同:where是分組前進行過濾,不滿足where條件,不參與分組,having是分組后對結果進行過濾

判斷條件不同:where不能對聚合函數進行判斷,而having可以

注意
執行順序:where>聚合函數>having
分組之后,查詢的字段一般為聚合函數和分組字段,查詢其他字段無意義
select gender,count(*) from emp group by gender; select gender,avg(age) from emp group by gender; select worksddress,count(*) from emp where (age<45) group by worksddress having count(*)>=4;
  • 排序查詢
    語法select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;
    排序方式asc:升序(默認)desc:降序
select * from emp order by age asc; select * from emp order by entrydate desc; select * from emp order by age asc,entrydate desc;
  • 分頁查詢
語法select 字段列表 from 表名 limit 起始索引,查詢記錄數;
注意

起始索引從0開始,起始索引=(查詢頁碼-1)*每頁顯示記錄數

分頁查詢是數據庫的方言,不同數據庫有不同的實現,MySQL中是limit

如果查詢的是第一頁數據,起始索引可以省略,直接簡寫為limit 查詢記錄數

select * from emp limit 0,10;#查詢第一頁員工信息,每頁展示10條記錄 select * from emp limit 10,10;#查詢第二頁員工信息,每頁展示10條記錄#練習 select * from emp where gender = '女' and age in(20,21,22,23); select * from emp where gender='女' and (age between 20 and 40) and name like '___'; select gender,count(*) from emp where age<60 group by gender; select name,age from emp where age<=35 order by age asc,entrydate desc; select * from emp where gender='男' and (age between 20 and 40) order by age asc,entrydate desc limit 5;

執行順序

from 表名列表 --where 條件列表-- group by 分組字段列表--having 分組后條件列表--select 字段列表--order by 排序字段列表--limit 分頁字段列表

DCL

  • 管理用戶

查詢用戶

use mysql;

select * from user;

創建用戶creat user '用戶名'@‘主機名’ identified by '密碼';
修改用戶密碼alter user ‘用戶名’@‘主機名’ identified with mysql_native_password by '密碼';
刪除用戶drop user '用戶名'@‘主機名’;
#創建用戶itcast,只能夠在當前主機localhost訪問,密碼123456; create user 'itcast'@'localhost' identified by '123456'; #創建用戶heima,可以在任意主機訪問該數據庫,密碼123456; create user 'heima'@'%' identified by '123456'; #修改用戶heima 的訪問密碼為1234; alter user 'heima'@'%' identified with mysql_native_password by '1234'; #刪除itcast@localhost用戶 drop user 'itcast'@'localhost';
  • 權限控制

查詢權限show grants for '用戶名'@‘主機名’;
授予權限grant 權限列表 on 數據庫名.表名? '用戶名'@'主機名';
撤銷權限revoke 權限列表 on 數據庫名.表名 from ‘用戶名’@‘主機名’
權限(多個權限間用逗號分隔)說明
all,all privileges所有權限
select查詢數據
insert插入數據
update修改數據
delete刪除數據
alter修改表
drop刪除數據庫/表/視圖
create創建數據庫/表
show grants for 'heima'@'%'; grant all on test.* to 'heima'@'%'; #windows搜索cmd 輸入MySQL -u heima -p回車再輸入密碼1234回車用戶連接成功可以查詢相關權限 revoke all on test.* from 'heima'@'%';

三、函數

(1)字符串函數

函數功能
concat(s1,s2,...,sn)字符串拼接,將s1,s2,...sn拼接成一個字符串
lower(str)將字符串str全部轉為小寫
upper(str)將字符串str全部轉為大寫
lpad(str,n,pad)左填充,用字符串pad對str的左邊進行填充,達到n個字符串長度
rpad(str,n,pad)右填充,用字符串pad對str的右邊進行填充,達到n個字符串長度
trim(str)去掉字符串頭部和尾部的空格
substring(str,start,len)返回從字符串str從start位置起的len個長度的字符串
select concat('hello','mysql');#hellomysql select lower('Hello');#hello select lpad('01','5','-');#---01 select trim(' hello mysql ');#hello mysql select substring('hello mysql',1,5);#hello update emp set workno =lpad(workno,5,'0');

(2)數值函數

函數功能
ceil(x)向上取整
floor(x)向下取整
mod(x/y)返回x/y的模
rand()返回0-1內的隨機數
round(x,y)求參數x的四舍五入的值,保留y位小數
select ceil(1.5);#2 select floor(1.1);#1 select mod(7,4);#3 select rand(); select round(2.345,2)#2.35 select lpad(round(rand()*1000000,0),6,'0');#隨機生成6位數字的密碼

(3)日期函數

函數功能
curdate()返回當前日期
curtime()返回當前時間
now()返回當前日期和時間
year(date)獲取date的年份
month(date)獲取date的月份
day(date)獲取date的日期
date_add(date,interval exper type)返回日期/時間值加上一個時間間隔exper后的時間值
datediff(date1,date2)返回起始時間date1和結束時間date2之間的天數
select curdate(); select curtime(); select now(); select year(now()); select month(now()); select day(now()); select date_add(now(),interval 70 day); select datediff('2021-12-1',curdate());#-168 select name,datediff(curdate(),entrydate) as'entrydays' from emp order by entrydays desc;

(4)流程函數

函數功能
if(value,t,f)如果value為true,則返回t,否則返回f
ifnull(value1,value2)如果value1不為空,返回value1,否則返回value2
case when [val1] then [res1]... else[defult] end如果val為true,返回res1,..否則返回default默認值
case [exper] when [val1] then [res1]...else[default] end如果exper 的值等于val1,返回res1,...否則返回default 默認值
select if(true,'ok','error'); select ifnull(null,'default'); select name,(case worksddress when '北京' then '一線城市' when '上海' then '一線城市' else '二線城市'end) as '工作地址' from emp;

總結

以上是生活随笔為你收集整理的MySQL 基础一(B站黑马程序员MySQL教程笔记)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。