MySQL資料庫之安裝,基本操作

来源:https://www.cnblogs.com/zycorn/archive/2018/09/19/9673194.html
-Advertisement-
Play Games

一.基礎部分 1.資料庫是什麼 之前所學,數據要永久保留,比如用戶註冊的用戶信息,都是保存於文件,而文件只能存在於某一臺機器上. 如果我們不考慮從文件中讀取數據的效率問題,並且假設我們的程式所有的組件都運行在一臺機器上,name用文件存取數據,並沒有問題. 但需要考慮的問題是:程式的執行效率依賴於承 ...


一.基礎部分

1.資料庫是什麼

之前所學,數據要永久保留,比如用戶註冊的用戶信息,都是保存於文件,而文件只能存在於某一臺機器上.

如果我們不考慮從文件中讀取數據的效率問題,並且假設我們的程式所有的組件都運行在一臺機器上,name用文件存取數據,並沒有問題.

但需要考慮的問題是:程式的執行效率依賴於承載它的硬體,而一臺電腦機器的性能總歸是有限的,受限於目前的硬體水平,垂直擴展是由極限的.於是我們只能通過水平擴展來增強我們系統的整體性能,這就需要我們將程式的各個組件分佈於多台機器去執行.

需要註意的是,雖然我們將程式的各個組件分佈到各台電腦,但各組件仍然是一個整體,言外之意,所有組件的數據還是要共用的.但每台機器上的組件都只能操作本機的文件,這就導致了數據必然不一致.

於是我們想到了將數據與應用程式分離:把文件存放於一臺機器,然後將多台機器通過網路去訪問這台機器上的文件,即共用這台機器上的文件,共用分則意味著競爭,會發生數據不安全,需要加鎖處理...

為了遠程訪問並處理這台共用機器上的文件,我們必須為我們的程式額外寫一段代碼,完成如下功能:

#1.遠程連接
#2.打開文件
#3.讀寫(加鎖)
#4.關閉文件

我們寫任何程式都需要這段代碼,於是我們提取這段代碼,寫成了一個專門的處理軟體,這就是MySQL資料庫管理軟體的由來,但是MySQL解決的不僅僅是數據共用的問題,還有查詢效率,安全性等一系列問題,總之,把程式員從數據管理中解脫出來,專註於自己的程式邏輯的編寫.

2.資料庫概述.

❤什麼是數據(Data)

數據:描述事物的符號記錄,描述事物的符號既可以是數字,也可以是文字,圖片,圖像,聲音,語言等,數據由多種表現形式,他們都可以經過數字化存入電腦

在電腦中描述一個事物,就需要抽取這一事物的典型特征,組成一條記錄,就相當於文件里的一行內容,如:

1    corn    21    河南焦作

單純的一條記錄並沒有任何意義,如果我們按逗號作為分隔以此定義各個欄位的意思.

id    name    age    address     #欄位
1     corn    21   河南焦作       #記錄

如果這樣表示的話就瞭解一個人的信息了,讓人一看就清楚了

❤什麼是資料庫(DataBase,簡稱OB)

資料庫,顧名思義就是存放數據的倉庫,只不過這個倉庫是在電腦存儲設備上.

資料庫中的數據按一定比例模型組織,描述和儲存,具有較小的冗餘度,較高的數據獨立性和易擴展性,並可為各種用戶共用

❤什麼是資料庫管理系統(DataBase Management System 簡稱DBMS)

在瞭解Data和DB的概念後,如何科學的組織和存儲數據,如何高效的獲取和維護數據成了關鍵,

這就用到了一個系統軟體----資料庫管理系統

如MySQL,Oracle,SQLite,Access,MS SQL Server

MySQL主要用於大型門戶,例如搜狗,新浪等,它主要的優勢是開放源代碼,因為開放源代碼這個資料庫是免費的,它現在是甲骨文公司的產品.

Orgcle主要用於銀行,鐵路,飛機場等.該資料庫功能強大,軟體費用高,也是甲骨文公司的產品.

SQL Server是微軟公司的產品,主要用於大中型企業,如聯想,方正等.

資料庫說白了就是文件夾

資料庫管理系統就是一個軟體

資料庫伺服器:就是對專門提供數據的一個機器

❤資料庫伺服器,資料庫管理系統,標語記錄的關係(重點)

表:student,school,class_list(即文件)

資料庫:lzsh_info(即文件夾)

資料庫管理系統:如mysql(是一個軟體)

資料庫伺服器:一臺電腦(對記憶體要求比較高)

總結:

  資料庫伺服器---運行--->資料庫管理軟體

  資料庫管理軟體--->管理--->資料庫

  資料庫---組織--->表,即文件夾---組織--->文件

  表---存放--->多條記錄,即文件---存放--->多行內容

❤資料庫管理技術的發展歷程(瞭解)

  1.人工管理階段

  2.文件系統階段

  3.數據系統階段

3.MySQL介紹

MySQL是一個關係型資料庫管理系統,MySQL 最流行的關係型資料庫管理系統,在 WEB 應用方面MySQL是最好的 RDBMS (Relational Database Management System,關係資料庫管理系統) 應用軟體之一

mysql是什麼?

mysql就是一個socekt服務端
客戶端軟體
  mysql自帶
  python模塊

其他類型的資料庫?

sqllite,db2,oracle,access,sql server,MySQL
分兩大類:
  關係型:上面這一坨,註意:sql語句通用
  非關係型:mongodb,redis,memcache

4.下載安裝

下載路徑:https://dev.mysql.com/downloads/mysql/

1.首先下載下來安裝包,然後把下載下來的壓縮包解壓到你要存放的路徑
2.然後設置環境變數。例如我的存放在E盤了
設置環境變數:path--E:\mysql-5.7.19-winx64\bin;
3.mysqld --initialize-insecure 初始化 (一初始化就產生了一個data的包)
4.mysqld 啟動mysql
5.tasklist | findstr mysql #查看mysql是否啟動
6.mysql -uroot -p 無密碼登錄
7.mysqladmin -uroot password 123 設置密碼登錄
8.quit 退出
9.windows 系統下幹掉任務 tskill mysqld

註意:.當我們每次用mysql啟動的時候,閑的麻煩,那麼我們把它做成一個系統服務
就用mysqld --install 
當在搜索裡面輸入services.msc就可以看到一個MYSQL了

註冊成服務之後,以後再啟動和關閉MySQL服務時,僅需執行如下命令:

# 啟動MySQL服務

net start mysql

# 關閉MySQL服務

net stop mysql

忘記密碼了怎麼辦?

破解密碼的兩種方式

1.乾死mysql(註意:以什麼方式啟動的就要以什麼方式吧它幹掉)
2.在cmd中啟動:mysqld --skip-grant-tables (跳過所有的授權表)
3.在cmd中登錄:mysql
4.輸入兩條命令:
  update mysql.user set authentication_string = password('123') where user = 'root' and host =   'localhost'
  flush privileges 重新刷新許可權

5.tskill mysqld   幹掉任務
6.正常啟動mysql
7.mysql -uroot -p123

破解密碼二 (僅限於剛剛安裝在資料庫的時候,如果對你有用的一堆數據已經存在了,就不要用這種方法,就得用第一種)

1.在mysql的解壓目錄下新建一個my.ini配置文件
那麼在my.ini配置文件里寫上 
在ini配置文件中註釋有兩種#或者;
[mysql]
skip-grant-tables (開頭的--就不用要了)如果啟動了就先關了,然後重新啟動一下,登錄後,my.ini就生效了
basedir = E:\mysql-5.7.19-winx64
datadir = D:\6_data #如果data指定要保存數據的目錄,一定要記得初始化 mysqld --initialize-insecure 
#完了吧原先的那個數據data幹掉。

4. 在windows下,為mysql服務指定配置文件

#在mysql的解壓目錄下,新建my.ini,然後配置
#1. 在執行mysqld命令時,下列配置會生效,即mysql服務啟動時生效
[mysqld]
;skip-grant-tables
port=3306
character_set_server=utf8
#解壓的目錄
basedir=E:\mysql-5.7.19-winx64
#data目錄
datadir=E:\my_data #在mysqld --initialize時,就會將初始數據存入此處指定的目錄,在初始化之後,啟動mysql時,就會去這個目錄里找數據

#2. 針對客戶端命令的全局配置,當mysql客戶端命令執行時,下列配置生效
[client]
port=3306
default-character-set=utf8
user=root
password=123456

#3. 只針對mysql這個客戶端的配置,2中的是全局配置,而此處的則是只針對mysql這個命令的局部配置
[mysql]
;port=3306
;default-character-set=utf8
user=hiayan
password=123456

二.初識SQL語言

SQL(Structured Query Language 即結構化查詢語言)
SQL語言主要用於存取數據、查詢數據、更新數據和管理關係資料庫系統,SQL語言由IBM開發。SQL語言分為3種類型:
DDL語句 資料庫定義語言: 資料庫、表、視圖、索引、存儲過程,例如CREATE DROP ALTER
DML語句 資料庫操縱語言: 插入數據INSERT、刪除數據DELETE、更新數據UPDATE、查詢數據SELECT
DCL語句 資料庫控制語言: 例如控制用戶的訪問許可權GRANT、REVOKE

三.系統資料庫

SQL(Structured Query Language 即結構化查詢語言)
SQL語言主要用於存取數據、查詢數據、更新數據和管理關係資料庫系統,SQL語言由IBM開發。SQL語言分為3種類型:
DDL語句 資料庫定義語言: 資料庫、表、視圖、索引、存儲過程,例如CREATE DROP ALTER
DML語句 資料庫操縱語言: 插入數據INSERT、刪除數據DELETE、更新數據UPDATE、查詢數據SELECT
DCL語句 資料庫控制語言: 例如控制用戶的訪問許可權GRANT、REVOKE

四.創建資料庫

資料庫命名規範

可以由字母、數字、下劃線、@、#、$
區分大小寫
唯一性
不能使用關鍵字如 create select
不能單獨使用數字
最長128位

創建資料庫

create database db1

五.資料庫相關操作

資料庫的相關操作
註意:資料庫就相當於文件夾
      表就相當於文件
資料庫的命名規則:
一.資料庫的增刪改查(sql語句)
增:create database db1;
刪:drop database db1;
改:alter database db1 charset utf8
查:show databases;#查看所有的資料庫
    show create database db1;查看指定的資料庫
設置預設的utf8,在配置文件中:寫上character_set_server = utf8
use db2   #代表你滑鼠雙擊切換目錄
select database() #查看你當前在哪個文件夾
二.表的增刪改查
增:create table  t1(id int ,name char);  (t1.frm 表結構  ,t1.ibd 表數據) 
刪:drop table t1;
改:
插入數據:insert into test(id,name) values(1,'x')
不寫給誰傳值就指定都傳,而且還是按照位置傳

查:show tables;  #查看所有表
   show create table t1;#查看指定的表
   select * from t1 #查看表數據
   select id,name from t1  #查看表數據
engine = InnoDB
表的存儲引擎是InnoDB

六.什麼是存儲引擎

存儲引擎說白了就是如何存儲數據、如何為存儲的數據建立索引和如何更新、查詢數據等技術的實現方
法。因為在關係資料庫中數據的存儲是以表的形式存儲的,所以存儲引擎也可以稱為表類型(即存儲和操作此表的類型)

SQL 解析器、SQL 優化器、緩衝池、存儲引擎等組件在每個資料庫中都存在,但不是每 個資料庫都有這麼多存儲引擎。MySQL 的插件式存儲引擎可以讓存儲引擎層的開發人員設 計他們希望的存儲層,例如,有的應用需要滿足事務的要求,有的應用則不需要對事務有這 麽強的要求 ;有的希望數據能持久存儲,有的只希望放在記憶體中,臨時並快速地提供對數據 的查詢

一種類型表明的是一種存儲方式
存儲引擎:就是表的類型,不同的類型就會對應不同的處理機制去處理他
事務:就是要麼同時成功,要麼同時不成功

使用存儲引擎

方法1:建表時指定

存儲引擎
1.create table t1(id int) engine = innodb 會出現2個文件
2.create table t2(id int) engine = myisam 會出現3個文件(速度比上面的快),但是我們還是用innodb存儲 
3.create table t3(id int) engine = memory 只有表結構沒有表數據,是創建到記憶體中的
4.create table t4(id int) engine = blackhole  黑洞,吃數據(數據存進去就沒有了,存進去就沒有了)

方法2:在配置文件中指定預設的存儲引擎

/etc/my.cnf
[mysqld]
default-storage-engine=INNODB
innodb_file_per_table=1

註:

1.如果你在cmd中輸入命令的時候,輸錯了用\c跳出來

  2.\s查看配置信息

七.操作文件夾(庫)

增:create database db1 charset utf8;
刪:drop database db1;
改:alter database db1 charset gbk;
查:show databases; #查看所有的資料庫
    show create database db1; #查看db1資料庫

八.操作文件(表)

切換到文件夾下:use db1
增:create table t1(id int,name char(10)) engine=innodb;
刪:drop table t1;
改:alter table t1 add age int;
    alter table t1 modify name char(12);
查:show tables; #查看所有表
    show create table t1; #查看t1表
    desc t1;#查看表結構
    show create table t1\G; #查看表詳細結構,可加\G
    select * from t1; #查看所有的表數據

九.操作文件的一行內容(記錄)

增:insert into db1.t1 values(1,'haiyan'),(2,'yaling'),(3,'xiaoxiao'); #如果t1不給參數,預設按照位置參數依次傳參
刪:delete from t1 where id = 2;
    #對於清空記錄有兩種方式,但是推薦後者
    delete from t1;
    truncate t1; #當數據量比較大的情況下,使用這種方式,刪除速度快
改:update t1 set name = 'SB' where id=3;
    update t1 set name= 'SB'  where name = 'xiaoxiao';
    alter table t7 modify id int primary key auto_increment;  修改id為主鍵並且自增
查:select * from t1; #查看t1里所有的數據
    select name from t1;  #查看t1里所有的name
    select id,name from t1; #查看t1里所有的id,name

十,自增id方法

create table t5(id int primary key auto_increment,name char(10));
#create table t4(id int not null unique auto_increment,name char(10));  (不空且是唯一的)#這個和上面的是一回事
insert into xx(name) values ('corn1'),
                                ('corn2'),
                                ('corn3'),
                                ('corn4'),
                                ('corn5');

十一.拷貝表結構

create table t7(id int,name char(10));
create table t8 select * from t7;  #拷貝表結果(如果有數據就把數據一起拷貝了)
create table t8 select * from t5 where 1=2; #拷貝表結構,不拷貝表數據(條件為假時,查不到任何記錄)
alter table t7 modify id int primary key auto_increment;  修改id為主鍵並且自增
insert into t7(name) values   ('alex1'),
                              ('alex1'),
                              ('alex1'),
                              ('alex1');
6.delete from t7 where id = 1; #刪記錄(只是刪除一行當id=1的時候)
7.update t7 set name = '';#修改欄位對應的值

修改id為主鍵並且遞增

十二.創建賬號

8.select user()#查看當前用戶
  select * from mysql.user; 查看所有的用戶

9.創建賬號 identifity
create user 'haiyan'@'localhost' identified by '147852' # 名為haiyan的本機賬號
create user 'alex'@'%' identified by '123' #代表只要ip地址能拼通,那麼所有的用戶都可以遠程登錄alex
create user 'susan'@'192.168.20.%' identified by '123' #創建遠程賬號,只要是192.168.20.?開頭的ip都可以登錄susan
#如果你要遠程登錄alex的賬戶,那麼客戶端得這樣登錄  :mysql -h192.168.20.97 -ualex -p123

十三.資料庫的許可權

#insert ,select ,update,delete #有這麼幾個可以設置許可權的操作,那麼我們先以select為例吧。
分四個級別:
級別1:對所有的庫,下的所有的表,下的所有的欄位
'''*.*代表所有的庫下的所有的表'''
同意select許可權開放,開放的是*.*的select許可權開放給用戶
grant select on *.* to 'zhang'@'localhost' identified by '123';  #讓創建用戶的時候賦予許可權
級別2:對db1庫,下的所有的表,下的所有的欄位
grant select on db1.* to 'wang'@'localhost' identified by '123';
級別3:對錶db1.t1,下的多有欄位
grant select on db1.t1 to 'li'@'localhost' identified by '123';
級別4:對錶db1.t1,下的id,name,欄位
grant select (id ,name)  on db1.t1 to 'zhao'@'localhost' identifitied by '123';
grant select (id ,name),update(name) on db1.t1 to 'zhao'@'localhost' identifitied by '123';
修改完許可權後要記得刷新許可權
flush privileges;

刪除許可權:
revoke select on *.* from 'zhang'@'localhost'
revoke select on db1.* from 'wang'@'localhost'
revoke select on db1.t1 from 'li'@'localhost'
revoke select (id ,name),update(name) on db1.t1 from 'zhao'@'localhost'
1.創建本地用戶並賦予許可權

用戶本地登錄,就無需IP地址了

2.創建用戶只要Ip能配通,所有的用戶都能登錄

客戶登錄

十四.解決亂碼問題

#1. 修改配置文件
[mysqld]
default-character-set=utf8 
[client]
default-character-set=utf8 
[mysql]
default-character-set=utf8

#mysql5.5以上:修改方式有所改動
    [mysqld]
    character-set-server=utf8
    collation-server=utf8_general_ci
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8

#2. 重啟服務
#3. 查看修改結果:
\s
show variables like '%char%'#查看編碼

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、資料庫備份 1.命令簡介: # mysqldump -h 伺服器 -u用戶名 -p密碼 資料庫名 > 備份文件.sql1)關於資料庫名: -A, --all-databases 所有庫 school 資料庫名 school stu_info t1 school 資料庫的表stu_info、t1 ...
  • 1.LOCATE函數 LOCATE(substr,str) 返回子串 substr 在字元串 str 中第一次出現的位置。如果子串 substr 在 str 中不存在,返回值為 0。如果substr或str為NULL,則返回NULL。(從1開始)。 例如: mysql> SELECT LOCATE( ...
  • 一、開啟二進位日誌 1)未開啟二進位日誌之前: 2)開啟二進位日誌 修改my.cnf並且將以下參數加入其中,重啟mysql實例: 重啟伺服器: 3)查看開啟狀態; 4)註意事項 在官方文檔中,說啟用binary log只是需要將log-bin=mysql-bin設置即可,但是因為有bug,所以必須要 ...
  • /* CREATE DATABASE geovindu DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; use geovindu; */ -- 查詢編碼格式 show variables like '%char%'; -- SE... ...
  • 上周三面試題有兩道涉及Oracle的分頁查詢,沒有意外地涼了,現在總結一下。 · Mysql mysql的分頁可以直接使用關鍵字limit,句子寫起來比較方便。 語法: ① limit m,n 示例: ② limit m 示例: · Oracle Oracle有兩個方法進行分頁,一個是row_num ...
  • 由於在Geometry中,有相關自帶函數和SPATIAL INDEX的性能優化,可以讓某些位置計算的效率提升。以下是幾種計算方法的效果對比。 1. 數據準備 首先創建一個數據表,這是一個店鋪數據表,結構如下: 創建語句: CREATE TABLE `store_geometry` ( `id` in ...
  • 創建唯一非聚集索引典型實現 唯一索引可通過以下方式實現: PRIMARY KEY 或 UNIQUE 約束 在創建 PRIMARY KEY 約束時,如果不存在該表的聚集索引且未指定唯一非聚集索引,則將自動對一列或多列創建唯一聚集索引。 主鍵列不允許空值。 在創建 UNIQUE 約束時,預設情況下將創建 ...
  • 1、Hadoop生態概況 Hadoop是一個由Apache基金會所開發的分散式系統集成架構,用戶可以在不瞭解分散式底層細節情況下,開發分散式程式,充分利用集群的威力來進行高速運算與存儲,具有可靠、高效、可伸縮的特點。大數據學習資料分享群119599574 Hadoop的核心是YARN,HDFS,Ma ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...