首頁>技術>

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 表示:約束(不能重複且不能為空);加速查詢

11
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 為你的Android實現測試覆蓋率