1、認識數據庫java
1.什麼是mysql?python
數據庫mysql
永久存儲數據的倉庫linux
1.管理不方便 2.文件操做效率問題 3.一個程序不太可能僅運行在同一臺電腦上 提升計算機性能的方式 1.垂直擴展 指的是更換性能更好的硬件 2.水平擴展 指的就是添加更多的計算機 把任務分配給每一臺 (分佈式計算) 分佈式計算 的好處 1.其中某一臺掛了 不會致使整個系統癱瘓 穩定性高 2.理論上性能能夠無限擴展 分佈式計算其實也是總體 數據須要被共享 這就須要socket技術 共享就存在競爭問題 加鎖處理 文件存取效率問題 數據庫 本質上就是一套軟件 由服務器端 和 客戶端組成 C/S B/S 早些年 沒有數據庫的時候 程序員要想實現功能 得本身寫一套socket 並解決上述問題 因而就有了數據庫軟件公司
目前常見的數據庫
關係型數據庫
數據與數據之間能夠創建關聯關係(用戶數據和購買信息)
SQLServer
僅支持windows
MySQL
免費 開源 性能也不差 mysql 前後被sun 和 oracle收購
mariaDB mysql的創始人 擔心mysql的將來 因而推出mariaDB 使用起來徹底一致
Oracle
目前最牛逼的數據庫 收費很高
DB2
IMB 收費的 通常與計算機綁定銷售
非關係型數據庫
速度賊快
key value 存取
MongoDB
redis
memcache
數據 用於記錄某事物狀態的符號 或 別的形式 數字 音頻 age = 20 記錄 就是一個事物的典型特徵的組合 在文件中體現爲一行文本 yyh,20,man,180 表 就是一個一個的文件 庫 就是一個文件夾 數據庫管理系統(DBMS) 就是一個軟件用來管理庫的 C/S程序 數據庫服務器 運行着DBMS的計算機稱爲數據庫服務器
2、安裝mysql程序員
1.下載安裝包 下載的時候提供了帶界⾯的和不帶界⾯的 ⽤哪一個呢? 你到公司後你想一想服務器是什麼系統? linux 有界⾯嗎? 因此咱們安裝不帶界⾯的 2.mysql⽬錄解析 bin mysqld mysql data ⽂件夾 庫 my-default.ini 3.啓動mysql服務器 cd ...... mysqld 這是⼀個socket程序 這時候至關於作了什麼事? 啓動服務器socket 並監聽端⼝ 默認綁定當前ip 端⼝默認3306 接下來作什麼呢? 啓動客戶端, 運⾏mysql 注意他是⼀個socket程序 要鏈接服務器須要什麼? ip 和 端⼝ mysql -h ip -P port -uroot -p 密碼默認爲空 看到歡迎界⾯了是吧 說明socket連接成功了 這個命令提示符本質是什麼? 就是⼀個input 對不對 接受⼀條指令而後怎麼辦? 發送個服務器 服務器接收到以後呢? 解析指令 取出你要的數據在send給客戶端 那問題來了 指令確定不能隨便寫,不認服務器不認識,⼤家的有套規範 就是sql show databases; 對⽐data⽂件夾 那在講命令以前呢 你想一想 咱們每次要使⽤mysql都得先cd到這個⽬錄中 ⾮常麻煩 怎麼解決呢? 4.加到環境變量 命令總結: 啓動服務器 mysqld 啓動客戶端 mysql -h -P -u -p 簡寫 mysql -u -p 關閉服務器 tasklist | findstr mysqld taskkill /F /PID 8372 5.服務器的啓動和關閉都須要執⾏命令 仍是不夠⽅便 怎麼辦呢? 將mysql註冊到系統服務中 終端執⾏ mysqld --install 運⾏->services.msc 查看系統服務 三.修改管理員密
3、修改管理員密碼redis
如今密碼默認爲空 這樣安全嗎? 不安全 萬⼀誰過來把你數據刪了 怎麼辦? 改密碼 怎麼改: mysqladmin -uroot -p舊密碼 password "123' 警告 不要緊 破解密碼: 萬⼀你不⼩⼼把密碼忘記了 怎麼辦?不可能卸載重裝吧 因此咱們下來說的是如何破解密碼,如何破解呢? 那你就要想 這個密碼它確定要找地⽅存儲起來 ,那存客戶端仍是服務器呢? 服務器 ,那存在內存仍是硬盤呢? 必然是硬盤,既然如此,⼀定有⼀⽂件⽤於⼲嘛 ? 存放密碼信息 那你有沒有什麼思路? ⽅式1:刪⽂件 沒問題 簡單粗暴 可是,這個⽂件⾥不僅有你的帳號信息 還有別⼈帳號數據 還 有受權相關的數據 因此你最好不要這麼⼲! 那你在思考⼀下,服務器驗證⽤戶的本質是什麼,是否是讀取⼀個⽂件的數據來 和你輸⼊的數據進⾏對⽐, 那你可不能夠這樣⼦ 我告訴我服務器說你不要去讀那個受權⽂件,能夠! ⽅式2: 跳過受權表 進⼊系統修改受權表 跳過這個操做是服務器相關的操做因此 咱的先關掉服務器從新開 在從新開的 時候來告訴它 1.停⽌服務 2.啓動服務器並添加參數 mysqld --skip-grant-tables 3.使⽤客戶端登陸服務器 執⾏修改命令 此時不須要輸⼊密碼 update mysql.user set password = password("123123") where user="root" and host="localhost" 刷新權限 flush privileges 命令⾏中重啓服務器驗證新密碼
4、編碼設置sql
來看⼀下 當前服務器的設置信息 使⽤客戶端執⾏\s 來看⼀下 這邊latin1 gbk 什麼意思 是否是就是編碼? 那這樣有沒有什麼問題? 服務器是拉丁 客戶端是 GBK 亂碼 如何解決亂碼? 保證編碼⽅式⼀致! 如何設置呢? 在mysql安裝⽬錄下有個my_default.ini 他就是配置⽂件,可是他不是正在使⽤ 的 ⽽是⼀個模板⽂件,咱們若是要⾃⼰編寫配置⽂件,須要⾃⼰複製⼀個叫作 my.ini的⽂件來編寫 編寫格式? 你已經學習過了 configpaser 回顧⼀下 conf⽂件包含什麼? 分區 和 選項 [section] option = value 要設置客戶端的內容就寫在mysql分區 要設置服務器的內容就寫在mysqld分區下 原理:mysql在啓動的時候會⾃動到安裝⽬錄下找my.ini⽂件 找到命令對應的標 題加載⾥⾯的設置項 在思考⼀下 咱們在登陸的時候是否是每次都須要輸⼊⽤戶信息 麻不麻煩? 麻煩 那怎麼解決? 你看在mysql -uroot -p123 中 -u -p是否是參數 是在你執⾏命令是⼿動傳的參數,那既然是參數可不能夠定義到配置⽂件中呢? 能夠! 來看看如何定義 [mysql] user = "root" pasword = "123" 下⾯咱們來測試⼀下看⾏不⾏? ok 報錯了 說明他確實讀取了配置⽂件 報錯緣由 名字寫錯了 思考 好如今我問你: 你如今這個配置⽂件是給誰⽤的 是客戶端仍是服務端? 便是客戶端也是服務器端 由於咱們如今客戶端和服務器端在同⼀臺電腦上 正常狀況下 咱們不會這麼⼲ 你客戶端想要⽤你就在客戶端安裝⽬錄中建⼀個 my.ini 只寫客戶端相關的內容 一樣服務器要⽤就在服務器端建 只寫服務器相關內容 最終結果 [mysqld] character-set-server = utf-8 collation-server = utf-8_general_ci [mysql] default-character-set = utf-8 [client] default-character-set = utf-8 思考? client是什麼意思呢? 就是客戶端的意思 和mysql有什麼區別? mysql也是客戶端的其中⼀種 除了它 還有python客戶端 java客戶端等等 client是全部客戶端的總稱 若是都有的話 同時設置了兩個的話 哪一個⽣效呢? 固然是mysql 由於他指名道姓說了mysql這個程序 驗證⼀下 將client中加⼀個不存在的⽤戶名 user = xxxxxxxxx 看看是否能成功登錄 刪除mysql分區 再次驗證 注意:修改了mysqld配置須要重啓服務器
5、基本sql語句數據庫
1.庫相關windows
增安全
create database mydb charset utf8;
查
show databases;
show creat databases mydb;
改
alter database mydb charset gbk
刪
drop database mydb;
2.表相關
增
切換文件夾(選擇數據庫)
use mydb;
create table t1(id int,name,char)
查
show tables;
show create table t1;
desc t1;
改
改字段
alter table 表名 add | modify | drop | change
add 跟列名和類型
modify 跟列名和類型
drop 跟列名
change 跟 舊列名 新列名 類型
改字符編碼
alter table 表名 default character 類型
更名稱
rename table tname1 to tname2
刪
drop table 表名
3.記錄相關
增
insert into tablename values(data,...),(data)
查
select id,name from t1; 列名可用*號表示通配符
改
update 表名 set 列名 =值 where 條件;可同時修稿多個字段
用逗號隔開 列名=值,列名=值....
刪
delete from 表名 where 條件;
沒有條件則刪除全部;
truncate table t1;
重建表,清空全部數據;