python中的字串在C語言中體現為是一個字元陣列,每次建立字串時候需要在記憶體中開闢一塊連續的空,並且一旦需要修改字串的話,下面我們一起來看看吧!
一 資料庫管理軟體的由來
基於我們之前所學,資料要想永久儲存,都是保存於檔案中,毫無疑問,一個檔案僅僅只能存在於某一臺機器上。
如果我們暫且忽略直接基於檔案來存取資料的效率問題,並且假設程式所有的元件都執行在一臺機器上,那麼用檔案存取資料,並沒有問題。
很不幸,這些假設都是你自己意淫出來的,上述假設存在以下幾個問題。。。。。。
1、程式所有的元件就不可能執行在一臺機器上
#因為這臺機器一旦掛掉則意味著整個軟體的崩潰,並且程式的執行效率依賴於承載它的硬體,而一臺機器機器的效能總歸是有限的,受限於目前的硬體水平,就一臺機器的效能垂直進行擴充套件是有極限的。
#於是我們只能透過水平擴充套件來增強我們系統的整體效能,這就需要我們將程式的各個元件分佈於多臺機器去執行。
2、資料安全問題
#根據1的描述,我們將程式的各個元件分佈到各臺機器,但需知各元件仍然是一個整體,言外之意,所有元件的資料還是要共享的。但每臺機器上的元件都只能操作本機的檔案,這就導致了資料必然不一致。
#於是我們想到了將資料與應用程式分離:把檔案存放於一臺機器,然後將多臺機器透過網路去訪問這臺機器上的檔案(用socket實現),即共享這臺機器上的檔案,共享則意味著競爭,會發生資料不安全,需要加鎖處理。。。。
3、併發
根據2的描述,我們必須寫一個socket服務端來管理這臺機器(資料庫伺服器)上的檔案,然後寫一個socket客戶端,完成如下功能:
#1.遠端連線(支援併發)
#2.開啟檔案
#3.讀寫(加鎖)
#4.關閉檔案
總結:
#我們在編寫任何程式之前,都需要事先寫好基於網路操作一臺主機上檔案的程式(socket服務端與客戶端程式),於是有人將此類程式寫成一個專門的處理軟體,這就是mysql等資料庫管理軟體的由來,但mysql解決的不僅僅是資料共享的問題,還有查詢效率,安全性等一系列問題,總之,把程式設計師從資料管理中解脫出來,專注於自己的程式邏輯的編寫。
二 資料庫概述
1 什麼是資料(Data)
描述事物的符號記錄稱為資料,描述事物的符號既可以是數字,也可以是文字、圖片,影象、聲音、語言等,資料由多種表現形式,它們都可以經過數字化後存入計算機
在計算機中描述一個事物,就需要抽取這一事物的典型特徵,組成一條記錄,就相當於檔案裡的一行內容,如:
1 egon,male,18,1999,山東,計算機系,2017,oldboy
單純的一條記錄並沒有任何意義,如果我們按逗號作為分隔,依次定義各個欄位的意思,相當於定義表的標題
1 name,sex,age,birth,born_addr,major,entrance_time,school #欄位
2 egon,male,18,1999,山東,計算機系,2017,oldboy #記錄
這樣我們就可以瞭解egon,性別為男,年齡18歲,出生於1999年,出生地為山東,2017年考入老男孩計算機系
2 什麼是資料庫(DataBase,簡稱DB)
資料庫即存放資料的倉庫,只不過這個倉庫是在計算機儲存裝置上,而且資料是按一定的格式存放的
過去人們將資料存放在檔案櫃裡,現在資料量龐大,已經不再適用
資料庫是長期存放在計算機內、有組織、可共享的資料即可。
資料庫中的資料按一定的資料模型組織、描述和儲存,具有較小的冗餘度、較高的資料獨立性和易擴充套件性,並可為各種 使用者共享
3 什麼是資料庫管理系統(DataBase Management System 簡稱DBMS)
在瞭解了Data與DB的概念後,如何科學地組織和儲存資料,如何高效獲取和維護資料成了關鍵
這就用到了一個系統軟體---資料庫管理系統
如MySQL、Oracle、SQLite、Access、MS SQL Server
mysql主要用於大型門戶,例如搜狗、新浪等,它主要的優勢就是開放原始碼,因為開放原始碼這個資料庫是免費的,他現在是甲骨文公司的產品。
oracle主要用於銀行、鐵路、飛機場等。該資料庫功能強大,軟體費用高。也是甲骨文公司的產品。
sql server是微軟公司的產品,主要應用於大中型企業,如聯想、方正等。
4 資料庫伺服器、資料管理系統、資料庫、表與記錄的關係(重點理解!!!)
記錄:1 劉海龍 324245234 22(多個欄位的資訊組成一條記錄,即檔案中的一行內容)
表:student,scholl,class_list(即檔案)
資料庫:oldboy_stu(即資料夾)
資料庫管理系統:如mysql(是一個軟體)
資料庫伺服器:一臺計算機(對記憶體要求比較高)
總結:
資料庫伺服器-:執行資料庫管理軟體
資料庫管理軟體:管理-資料庫
資料庫:即資料夾,用來組織檔案/表
表:即檔案,用來存放多行內容/多條記錄
5 資料庫管理技術的發展歷程(瞭解)
一 人工管理階段
20世紀50年代中期以前,計算機主要用於科學計算。
當時的硬體水平:外存只有紙帶、卡片、磁帶,沒有磁碟等直接存取的儲存裝置
當時的軟體狀況:沒有作業系統,沒有管理資料的軟體,資料的處理方式是批處理。
人工管理資料具有以下特點:
1 資料不儲存:計算機主要用於科學計算,資料臨時用,臨時輸入,不儲存
2 應用程式管理資料:資料要有應用程式自己管理,應用程式需要處理資料的邏輯+物理結構,開發負擔很重
3 資料不共享:一組資料只對應一個程式,多個程式之間涉及相同資料時,必須各自定義,造成資料大量冗餘
4 資料不具有獨立性:資料的邏輯結構或物理結構發生變化後,必須對應用程式做出相應的修改,開發負擔進一步加大
二 檔案系統階段
20世紀50年代後期到60年代中期
硬體水平:有了磁碟、磁鼓等可直接存取的儲存裝置
軟體水平:有了作業系統,並且作業系統中已經有了專門的資料管理軟體,即檔案系統;處理方式上不僅有了批處理,而且能夠聯機實時處理
檔案系統管理資料具有以下優點:
1 資料可以長期儲存:計算機大量用於資料處理,因而資料需要長期儲存,進行增刪改查操作
2 由檔案系統管理資料:檔案系統這個軟體,把資料組織成相對獨立的資料檔案,利用按檔名,按記錄進行存取。實現了記錄內的結構性,但整體無結構。並且程式與資料之間由檔案系統提供存取方法進行轉換,是應用程式與資料之間有了一定的獨立性,程式設計師可以不必過多考慮物理細節。
檔案系統管理資料具有以下缺點:
1 資料共享性差,冗餘度大:一個檔案對應一個應用程式,不同應用有相同資料時,也必須建立各自的檔案,不能共享相同的資料,造成資料冗餘,浪費空間,且相同的資料重複儲存,各自管理,容易造成資料不一致性
2 資料獨立性差:一旦資料的邏輯結構改變,必須修改應用程式,修改檔案結構的定義。應用程式的改變,也將引起檔案的資料結構的改變。因此資料與程式之間缺乏獨立性。可見,檔案系統仍然是一個不具有彈性的無結構的資料集合,即檔案之間是孤立的,不能反映現實世界事物之間的記憶體聯絡。
三 資料系統階段
20世紀60年代後期以來,計算機用於管理的規模越來越大,應用越來越廣泛,資料量急劇增長,同時多種應用,多種語言互相覆蓋地共享資料結合要求越來越強烈
硬體水平:有了大容量磁碟,硬體架構下降
軟體水平:軟體價格上升(開發效率必須提升,必須將程式設計師從資料管理中解放出來),分散式的概念盛行。
資料庫系統的特點:
1 資料結構化(如上圖odboy_stu)
2 資料共享,冗餘度低,易擴充
3 資料獨立性高
4 資料由DBMS統一管理和控制
a:資料的安全性保護
b:資料的完整性檢查
c:併發控制
d:資料庫恢復
三 mysql介紹
MySQL是一個關係型資料庫管理系統,由瑞典MySQL AB 公司開發,目前屬於 Oracle 旗下公司。MySQL 最流行的關係型資料庫管理系統,在 WEB 應用方面MySQL是最好的 RDBMS (Relational Database Management System,關係資料庫管理系統) 應用軟體之一。
mysql是什麼
#mysql就是一個基於socket編寫的C/S架構的軟體
#客戶端軟體 mysql自帶:如mysql命令,mysqldump命令等
python模組:如pymysql
資料庫管理軟體分類
#分兩大類:
關係型:如sqllite,db2,oracle,access,sql server,MySQL,注意:sql語句通用
非關係型:mongodb,redis,memcache
#可以簡單的理解為: 關係型資料庫需要有表結構
非關係型資料庫是key-value儲存的,沒有表結構
四 下載安裝
Linux版本
#二進位制rpm包安裝
yum -y install mysql-server mysql
1.解壓tar包
cd /software
tar -xzvf mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.6.21-linux-glibc2.5-x86_64 mysql-5.6.212.新增使用者與組
groupadd mysql
useradd -r -g mysql mysql
chown -R mysql:mysql mysql-5.6.213.安裝資料庫
su mysql
cd mysql-5.6.21/scripts
./mysql_install_db --user=mysql --basedir=/software/mysql-5.6.21 --datadir=/software/mysql-5.6.21/data4.配置檔案
cd /software/mysql-5.6.21/support-files
cp my-default.cnf /etc/my.cnf
cp mysql.server /etc/init.d/mysql
vim /etc/init.d/mysql#若mysql的安裝目錄是/usr/local/mysql,則可省略此步修改檔案中的兩個變更值
basedir=/software/mysql-5.6.21datadir=/software/mysql-5.6.21/data5.配置環境變數
vim /etc/profile
export MYSQL_HOME="/software/mysql-5.6.21"export PATH="$PATH:$MYSQL_HOME/bin"source /etc/profile6.新增自啟動服務
chkconfig --add mysql
chkconfig mysql on7.啟動mysql
service mysql start8.登入mysql及改密碼與配置遠端訪問
mysqladmin -u root password'your_password'#修改root使用者密碼mysql -u root -p#登入mysql,需要輸入密碼mysql>GRANT ALL PRIVILEGES ON *.* TO'root'@'%'IDENTIFIED BY'your_password'WITH GRANT OPTION;#允許root使用者遠端訪問mysql>FLUSH PRIVILEGES;#重新整理許可權
1. 解壓
tar zxvf mariadb-5.5.31-linux-x86_64.tar.gz
mv mariadb-5.5.31-linux-x86_64 /usr/local/mysql //必需這樣,很多指令碼或可執行程式都會直接訪問這個目錄2. 許可權
groupadd mysql //增加 mysql 屬組
useradd -g mysql mysql //增加 mysql 使用者 並歸於mysql 屬組
chown mysql:mysql -Rf /usr/local/mysql // 設定 mysql 目錄的使用者及使用者組歸屬。
chmod +x -Rf /usr/local/mysql //賜予可執行許可權 3. 複製配置檔案
cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf //複製預設mysql配置 檔案到/etc目錄 4. 初始化/usr/local/mysql/scripts/mysql_install_db --user=mysql //初始化資料庫
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql //複製mysql服務程式 到系統目錄
chkconfig mysql on //新增mysql 至系統服務並設定為開機啟動
service mysql start //啟動mysql5. 環境變數配置
vim /etc/profile //編輯profile,將mysql的可執行路徑加入系統PATH
export PATH=/usr/local/mysql/bin:$PATH
source /etc/profile //使PATH生效。6. 賬號密碼
mysqladmin -u root password'yourpassword'//設定root賬號及密碼
mysql -u root -p //使用root使用者登入mysql
use mysql //切換至mysql資料庫。
select user,host,password fromuser; //檢視系統許可權
drop user root@'::1';
drop user [email protected];
flush privileges; //重新整理許可權7. 一些必要的初始配置1)修改字符集為UTF8
vi /etc/my.cnf
在[client]下面新增 default-character-set = utf8
在[mysqld]下面新增 character_set_server = utf82)增加錯誤日誌
vi /etc/my.cnf
在[mysqld]下面新增:
log-error = /usr/local/mysql/log/error.log
general-log-file = /usr/local/mysql/log/mysql.log3) 設定為不區分大小寫,linux下預設會區分大小寫。
vi /etc/my.cnf
在[mysqld]下面新增:
lower_case_table_name=1修改完重啟:#service mysql restart
Window版本
#1、下載:MySQL Community Server 5.7.16http://dev.mysql.com/downloads/mysql/#2、解壓如果想要讓MySQL安裝在指定目錄,那麼就將解壓後的資料夾移動到指定目錄,如:C:\mysql-5.7.16-winx64#3、新增環境變數【右鍵計算機】--》【屬性】--》【高階系統設定】--》【高階】--》【環境變數】--》【在第二個內容框中找到 變數名為Path 的一行,雙擊】 --> 【將MySQL的bin目錄路徑追加到變值值中,用 ; 分割】
#4、初始化mysqld --initialize-insecure#5、啟動MySQL服務mysqld# 啟動MySQL服務#6、啟動MySQL客戶端並連線MySQL服務mysql -u root -p# 連線MySQL伺服器
上一步解決了一些問題,但不夠徹底,因為在執行【mysqd】啟動MySQL伺服器時,當前終端會被hang住,那麼做一下設定即可解決此問題:
注意:--install前,必須用mysql啟動命令的絕對路徑# 製作MySQL的Windows服務,在終端執行此命令:"c:\mysql-5.7.16-winx64\bin\mysqld"--install
# 移除MySQL的Windows服務,在終端執行此命令:"c:\mysql-5.7.16-winx64\bin\mysqld"--remove
註冊成服務之後,以後再啟動和關閉MySQL服務時,僅需執行如下命令:# 啟動MySQL服務net start mysql
# 關閉MySQL服務net stop mysql
五 mysql軟體基本管理
1. 啟動檢視
[root@egon ~]# systemctl start mariadb #啟動[root@egon ~]# systemctl enable mariadb #設定開機自啟動Created symlinkfrom/etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
[root@egon ~]# ps aux |grep mysqld |grep -v grep #檢視程序,mysqld_safe為啟動mysql的指令碼檔案,內部呼叫mysqld命令mysql 3329 0.0 0.0 113252 1592 ? Ss 16:19 0:00 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
mysql 3488 0.0 2.3 839276 90380 ? Sl 16:19 0:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock
[root@egon ~]# netstat -an |grep 3306 #檢視埠tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
[root@egon ~]# ll -d /var/lib/mysql #許可權不對,啟動不成功,注意user和groupdrwxr-xr-x 5 mysql mysql 4096 Jul 20 16:28 /var/lib/mysql
安裝完mysql 之後,登陸以後,不管執行任何命令,總是提示這個
mac mysql error You must reset your password using ALTER USER statement before executing this statement.
解決方法:
step 1: SET PASSWORD = PASSWORD('your new password');
step 2: ALTER USER'root'@'localhost' PASSWORD EXPIRE NEVER;
step 3: flush privileges;
初始狀態下,管理員root,密碼為空,預設只允許從本機登入localhost
設定密碼
[root@egon ~]# mysqladmin -uroot password "123" 設定初始密碼 由於原密碼為空,因此-p可以不用[root@egon ~]# mysqladmin -uroot -p"123" password "456" 修改mysql密碼,因為已經有密碼了,所以必須輸入原密碼才能設定新密碼命令格式:
[root@egon ~]# mysql -h172.31.0.2 -uroot -p456[root@egon ~]# mysql -uroot -p[root@egon ~]# mysql 以root使用者登入本機,密碼為空
3. 忘記密碼
linux平臺下,破解密碼的兩種方式
[root@egon ~]# rm -rf /var/lib/mysql/mysql #所有授權資訊全部丟失!!!
[root@egon ~]# systemctl restart mariadb
[root@egon ~]# mysql
[root@egon ~]# vim /etc/my.cnf #mysql主配置檔案[mysqld]
skip-grant-table
[root@egon ~]# systemctl restart mariadb[root@egon ~]# mysqlMariaDB [(none)]> update mysql.user set password=password("123") where user="root"andhost="localhost";
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> \q
[root@egon ~]# #開啟/etc/my.cnf去掉skip-grant-table,然後重啟[root@egon ~]# systemctl restart mariadb[root@egon ~]# mysql -u root -p123 #以新密碼登入
windows平臺下,5.7版本mysql,破解密碼的兩種方式:
#1 關閉mysql#2 在cmd中執行:mysqld --skip-grant-tables#3 在cmd中執行:mysql#4 執行如下sql:update mysql.user set authentication_string=password('') where user ='root';
flush privileges;#5 tskill mysqld #或taskkill -f /PID 7832#6 重新啟動mysql
#1. 關閉mysql,可以用tskill mysqld將其殺死#2. 在解壓目錄下,新建mysql配置檔案my.ini#3. my.ini內容,指定[mysqld]
skip-grant-tables#4.啟動mysqld#5.在cmd裡直接輸入mysql登入,然後操作update mysql.user set authentication_string=password('') where user='root and host='localhost';flush privileges;#6.註釋my.ini中的skip-grant-tables,然後啟動myqsld,然後就可以以新密碼登入了
4. 在windows下,為mysql服務指定配置檔案
強調:配置檔案中的註釋可以有中文,但是配置項中不能出現中文
#在mysql的解壓目錄下,新建my.ini,然後配置#1. 在執行mysqld命令時,下列配置會生效,即mysql服務啟動時生效[mysqld]
;skip-grant-tables
port=3306character_set_server=utf8
default-storage-engine=innodb
innodb_file_per_table=1#解壓的目錄basedir=E:\mysql-5.7.19-winx64#data目錄datadir=E:\my_data#在mysqld --initialize時,就會將初始資料存入此處指定的目錄,在初始化之後,啟動mysql時,就會去這個目錄裡找資料#2. 針對客戶端命令的全域性配置,當mysql客戶端命令執行時,下列配置生效[client]
port=3306default-character-set=utf8
user=root
password=123#3. 只針對mysql這個客戶端的配置,2中的是全域性配置,而此處的則是隻針對mysql這個命令的區域性配置[mysql]
;port=3306;default-character-set=utf8
user=egon
password=4573#!!!如果沒有[mysql],則使用者在執行mysql命令時的配置以[client]為準
5. 統一字元編碼
#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%'
六 初識sql語句
有了mysql這個資料庫軟體,就可以將程式設計師從對資料的管理中解脫出來,專注於對程式邏輯的編寫
mysql服務端軟體即mysqld幫我們管理好資料夾以及檔案,前提是作為使用者的我們,需要下載mysql的客戶端,或者其他模組來連線到mysqld,然後使用mysql軟體規定的語法格式去提交自己命令,實現對資料夾或檔案的管理。該語法即sql(Structured Query Language 即結構化查詢語言)
SQL語言主要用於存取資料、查詢資料、更新資料和管理關係資料庫系統,SQL語言由IBM開發。SQL語言分為3種類型:#1、DDL語句 資料庫定義語言: 資料庫、表、檢視、索引、儲存過程,例如CREATE DROP ALTER#2、DML語句 資料庫操縱語言: 插入資料INSERT、刪除資料DELETE、更新資料UPDATE、查詢資料SELECT#3、DCL語句 資料庫控制語言: 例如控制使用者的訪問許可權GRANT、REVOKE
#1. 操作資料夾 增:create database db1 charset utf8;
查:show databases;
改:alter database db1 charset latin1;
增:create table t1(id int,name char);
查:show tables
改:alter table t1 modify name char(3);
alter table t1 change name name1 char(2);
刪:drop table t1;
#3. 操作檔案中的內容/記錄增:insert into t1 values(1,'egon1'),(2,'egon2'),(3,'egon3');
查:select *from t1;
改:update t1 set name='sb'where id=2;
刪:delete fromt1 where id=1;
清空表:
auto_increment 表示:自增
primary key 表示:約束(不能重複且不能為空);加速查詢