你應(yīng)該知道的MySQL的命令和PyMySQL
MySQL
MySQL是一個「關(guān)系型」數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB 公司開發(fā),目前屬于 Oracle 旗下產(chǎn)品。MySQL 是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一。
在 WEB 應(yīng)用方面,MySQL是最好的 RDBMS (Relational Database Management System,關(guān)系數(shù)據(jù)庫管理系統(tǒng)) 應(yīng)用軟件。MySQL是一種關(guān)系數(shù)據(jù)庫管理系統(tǒng),關(guān)系數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個大倉庫內(nèi),這樣就增加了速度并提高了靈活性。
MySQL所使用的 SQL 語言是用于訪問數(shù)據(jù)庫的最常用標(biāo)準(zhǔn)化語言。MySQL 軟件采用了雙授權(quán)政策,分為社區(qū)版和商業(yè)版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點(diǎn),一般中小型網(wǎng)站的開發(fā)都選擇 MySQL 作為網(wǎng)站數(shù)據(jù)庫。
MySql安裝
安裝和配置
下面(以CentOS Linux環(huán)境為例)。
Linux下有一個MySQL的分支版本,名為MariaDB,它由MySQL的一些原始開發(fā)者開發(fā),有商業(yè)支持,旨在繼續(xù)保持MySQL數(shù)據(jù)庫在GNU GPL下開源(因?yàn)榇蠹覔?dān)心MySQL被甲骨文收購后會不再開源)。
如果決定要直接使用MariaDB作為MySQL的替代品,可以使用下面的命令進(jìn)行安裝。
- yum install mariadb mariadb-server
如果要安裝官方版本的MySQL,可以在MySQL官方網(wǎng)站下載安裝文件。首先在下載頁面中選擇平臺和版本,然后找到對應(yīng)的下載鏈接。下面以MySQL 5.7.26版本和Red Hat Enterprise Linux為例,直接下載包含所有安裝文件的歸檔文件,解歸檔之后通過包管理工具進(jìn)行安裝。
- wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
- tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
如果系統(tǒng)上有MariaDB相關(guān)的文件,需要先移除MariaDB相關(guān)的文件。
- yum list installed | grep mariadb | awk '{print $1}' | xargs yum erase -y
接下來可以按照如下所示的順序用RPM(Redhat Package Manager)工具安裝MySQL。
- rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
- rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
- rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
- rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm
可以使用下面的命令查看已經(jīng)安裝的MySQL相關(guān)的包。
- rpm -qa | grep mysql
啟動MySQL服務(wù)
先修改MySQL的配置文件(/etc/my.cnf)添加一行skip-grant-tables,可以設(shè)置不進(jìn)行身份驗(yàn)證即可連接MySQL服務(wù)器,然后就可以以超級管理員(root)身份登錄。
- vim /etc/my.cnf
- [mysqld]
- skip-grant-tables
- datadir=/var/lib/mysql
- socket=/var/lib/mysql/mysql.sock
- symbolic-links=0
- log-error=/var/log/mysqld.log
- pid-file=/var/run/mysqld/mysqld.pid
接下來可以使用下面的命令來啟動MySQL。
- service mysqld start
在CentOS 7中建議使用下面的命令來啟動MySQL。
- systemctl start mysqld
使用MySQL客戶端工具連接服務(wù)器。
命令行工具:
- mysql -u root
修改超級管理員(root)的訪問口令為i_LOVE_macos_123。
- use mysql;
- update user set authentication_string=password('i_LOVE_macos_123') where user='root';
- flush privileges;
將MySQL配置文件中的skip-grant-tables去掉,然后重啟服務(wù)器,重新登錄。這一次需要提供用戶名和口令才能連接MySQL服務(wù)器。
- systemctl restart mysqld
- mysql -u root -p
也可以選擇圖形化的客戶端工具來連接MySQL服務(wù)器,可以選擇下列工具之一:
- MySQL Workbench(官方提供的工具)
- Navicat for MySQL(界面簡單優(yōu)雅,功能直觀強(qiáng)大)
- SQLyog for MySQL(強(qiáng)大的MySQL數(shù)據(jù)庫管理員工具)
MySQLl命令
MySQL進(jìn)入與退出
mysql –uusername -ppassword (進(jìn)入)
exit (退出)

庫級操作語句
- 顯示所有的庫:show databases;
- 創(chuàng)建庫:create database [if not exists] db_name;
- 刪除庫:drop database [if exists] db_name;
- 進(jìn)入數(shù)據(jù)庫:use db_name;

表級操作語句
- 顯示所有的表:show tables;
- 創(chuàng)建表:create table [if not exists] tb_name (create definition…);
- 顯示創(chuàng)建表的信息:show create table tb_name;
- 刪除表:drop table tb_name;

注意:語句結(jié)束符:「每個語句都以 ; 或者 \G 結(jié)束」
插入數(shù)據(jù)
全字段插入:INSERT INTO tb_name VALUE (all_values); 一般只用這種
查詢數(shù)據(jù)
- SELECT field_names FROM tb_name;
- SELECT * FROM tb_name;
- SELECT field_names FROM tb_name WHERE conditions;

修改數(shù)據(jù)
- 修改所有數(shù)據(jù):UPDATE tb_name SET field_1=value_1 ;
- 修改多個:UPDATE tb_name SET field_1=value_1, field_2=value_2 …;
- 修改滿足條件的數(shù)據(jù):UPDATE tb_name SET field_1=value_1 WHERE conditions;

刪除數(shù)據(jù)
- 刪除表中所有數(shù)據(jù):DELETE FROM tb_name;
- 刪除表中滿足條件的數(shù)據(jù):DELETE FROM tb_name WHERE conditions;
數(shù)值類型

字符類

Python連接Mysql
Python連接Mysql,用的是pymysql
- import pymysql
- config = {
- 'host': '127.0.0.1',
- 'port': 3306,
- 'user': 'root',
- 'passwd': '',
- 'charset': 'utf8',
- 'cursorclass': pymysql.cursors.DictCursor
- }
- conn = pymysql.connect(**config)
- conn.autocommit(1)
- cursor = conn.cursor()
- try:
- # 創(chuàng)建數(shù)據(jù)庫
- DB_NAME = 'test'
- cursor.execute('DROP DATABASE IF EXISTS %s' % DB_NAME)
- cursor.execute('CREATE DATABASE IF NOT EXISTS %s' % DB_NAME)
- conn.select_db(DB_NAME)
- # 創(chuàng)建表
- TABLE_NAME = 'user'
- cursor.execute('CREATE TABLE %s(id int primary key,name varchar(30))' % TABLE_NAME)
- # 批量插入紀(jì)錄
- values = []
- for i in range(20):
- values.append((i, 'kk' + str(i)))
- cursor.executemany('INSERT INTO user values(%s,%s)', values)
- # 查詢數(shù)據(jù)條目
- count = cursor.execute('SELECT * FROM %s' % TABLE_NAME)
- print('total records:', cursor.rowcount)
- # 獲取表名信息
- desc = cursor.description
- print("%s %3s" % (desc[0][0], desc[1][0]))
- cursor.scroll(10, mode='absolute')
- results = cursor.fetchall()
- for result in results:
- print(result)
- except:
- import traceback
- traceback.print_exc()
- # 發(fā)生錯誤時會滾
- conn.rollback()
- finally:
- # 關(guān)閉游標(biāo)連接
- cursor.close()
- # 關(guān)閉數(shù)據(jù)庫連接
- conn.close()
【編輯推薦】