本文目錄一覽:
- 1、MySQL數據庫基礎+ 數據庫的基本操作?
- 2、peewee ORM 可以使用 Connector/Python 來連接mysql數據庫嗎
- 3、Python操作MySQL的驅動有哪些?
- 4、orm hibernate jdbc mysql 四者之間是什麼關係?
- 5、orm框架sequelize 向mysql數據庫插入數據,id設置為自增的主鍵,總是出錯,顯示id不能為null?
MySQL數據庫基礎+ 數據庫的基本操作?
需要用的資料以鏈接的形式給需要的同學。
我用的mysql版本為: Mysql-5.5.45-win64.msi 密碼是:26zw
圖形化工具 Navicat(前期不推薦用,直接手動敲): Navicat 密碼:c7fs
開始我的MySQL之旅吧 始於2016.12.04
–WH
一、數據庫的安裝
這個就不在這裡過多闡述了,因為網上實在是太多安裝mysql的教程了,有了我給的mysql,在按照這個安裝教程(MySQL安裝教程)去看,就能夠安裝完好。
安裝好mysql後,如果需要使用windows命令窗口(也就是cmd)來操作mysql,那麼就需要配置環境變量,在安裝好的mysql下找到bin,將其目錄放到環境變量path中去,就行了,檢測成功與否的方法是在cmd命令窗口中輸入mysql,就會出現一大段英文,就說明成功了,反之失敗,如果不會的話就去百度搜教程。
二、數據庫的基本操作
1、開啟mysql服務命令
net start mysql
2、進入mysql的兩種方式
明文進入:mysql -uroot -proot格式:mysql -u帳號 -p密碼
密文進入:mysql -uroot -p 按enter會提示你輸入密碼(Enter pssword:),此時你寫的密碼就會顯示為***這樣。
3、查看mysql中所有的數據庫(一般在固定的單詞命令就會是用大寫,這個要習慣,看多了敲多了就認識了)
前面四個數據庫是mysql中自帶的,也就是必須的.
SHOW DATABASES;
4、創建名為test_1的數據庫
格式:CREATE DATABASE 數據庫名
CREATE DATABASE test_1;
5、刪除名為test_1的數據庫
格式:DROP DATABASE 數據庫名
DROP DATABASE test_1;
總結:學習了對數據庫的三個操作,1、查看所有數據庫 2、創建數據庫 3、刪除數據庫
三、數據表的基本操作
數據表和數據庫還有Mysql三者的關係
mysql中保存了很多數據庫、一個數據庫中可以保存很多表。
對數據表的增(創建表)刪(刪除表)改(修改表字段)查(查詢表結構)。 注意:這裡的操作對象是表,對錶的操作也就是表的結構,和表中的字段的操作(字段和記錄要分清楚)
前提:表是在數據庫下的,所以要先確實使用哪個數據庫。
USE test_1;
1、創建數據表
格式:CREATE TABLE 數據表名(
字段名1數據類型[列級別約束條件],
字段名2數據類型[列級別約束條件],
字段名3數據類型[列級別約束條件]
);
注意:格式不一定需要這樣隔着寫,完全可以全部寫成一行。但是那樣寫可觀性非常差。我這樣寫只是為了可以看的更清晰。
解釋:
1、[]中括號中的內容表示可以有可以沒有,
2、列級別這個“列”一定要搞清楚說的是什麼,一張表中有行有列,列表示豎,行表示橫
3、約束條件後面會講到
1.1、創建沒有約束的student表
CREATE TABLE student( idINT(11), nameVARCHAR(12), ageINT(11) );
注釋:SHOW TABLES 查詢數據庫底下的所有表。
1.2、創建有約束的student表
六大約束:主鍵約束、外鍵約束、非空約束、唯一約束、默認約束、自動增加
1.2.1:主鍵約束
PRIMARY KEY(primary key):獨一無二(唯一)和不能為空(非空),通俗的講,就是在表中增加記錄時,在該字段下的數據不能重複,不能為空,比如以上面創建的表為例子,在表中增加兩條記錄,如果id字段用了主鍵約束。則id不能一樣,並且不能為空。一般每張表中度有一個字段為主鍵,唯一標識這條記錄。以後需要找到該條記錄也可以同這個主鍵來確認記錄,因為主鍵是唯一的,並且非空,一張表中每個記錄的主鍵度不一樣,所以根據主鍵也就能找到對應的記錄。而不是多條重複的記錄。如果沒有主鍵,那麼表中就會存在很多重複的記錄,那麼即浪費存儲空間,在查詢時也消耗更多資源。
一般被主鍵約束了的字段度習慣性的稱該字段為該表的主鍵
單字段主鍵約束
兩種方式都可以
CREATE TABLE student(CREATE TABLE student(
idINT(11) PRIMARY KEY,idINT(11),
nameVARCHAR(12),nameVARCHAR(12),
ageINT(11) ageINT(11),
); PRIMARY KEY(id) );
多字段主鍵約束(複合主鍵)
這個id和name都市主鍵,說明在以後增加的插入的記錄中,id和name不能同時一樣,比如說可以是這樣。一條記錄為id=1,name=yyy、另一條記錄為:id=1,name=zzz。 這樣是可以的。並不是你們所理解的兩個字段分別度不可以相同。
CREATE TABLE student(CREATE TABLE student(
idINT(11) PRIMARY KEY,idINT(11),
nameVARCHAR(12) PRIMARY KEY, nameVARCHAR(12),
ageINT(11) ageINT(11),
);PRIMARY KEY(id,name) );
1.2.2:外鍵約束
什麼是外鍵舉個例子就清楚了,有兩張表,一張表是emp(員工)表,另一張表是dept(部門)表,一個員工屬於一個部門,那麼如何通過員工能讓我們自己他在哪個部門呢?那就只能在員工表中增加一個字段,能代表員工所在的部門,那該字段就只能是存儲dept中的主鍵了(因為主鍵是唯一的,才能確實是哪個部門,進而代表員工所在的部門,如果是部門名稱,有些部門的名稱可能是同名。就不能區分了。),像這樣的字段,就符合外鍵的特點,就可以使用外鍵約束,使該字段只能夠存儲另一張表的主鍵。如果不被外鍵約束,那麼該字段就無法保證存儲進來的值就一定是另一張表的主鍵值。
外鍵約束的特點:
1、外鍵約束可以描述任意一個字段(包括主鍵),可以為空,並且一個表中可以有多個外鍵。但是外鍵字段中的值必須是另一張表中的主鍵。
2、這樣被外鍵關聯的兩種表的關係可以稱為父子表或者主從表。子表(從表)擁有外鍵字段的表,父表(主表)被外鍵字段所指向的表。
3、子表被外鍵約束修飾的字段必須和父表的主鍵字段的類型一樣。
注意:一個表中有被外鍵修飾的字段,就稱該表有外鍵(是“有外鍵”。而不是“是外鍵”),並會給該表中的外鍵約束取一個名稱,所以我們常說的這個表有沒有外鍵,指的不是被外鍵約束修飾的字段名,而是指這個表是否有存在外鍵約束。也就是說,不能說這個表的外鍵是xxx(該表中被外鍵約束修飾的字段名),這種說法是錯誤的,但是大多數人已經習慣了這樣,雖然影響不大,但是在很多時候需要理解一個東西時,會造成一定的困擾。
格式:CONSTRAINT外鍵名稱FOREIGN KEY(被外鍵約束的字段名稱)REFERENCES 主表名(主鍵字段)
英文解釋:CONSTRAINT:約束REFERENCES:參考
CREATE TABLE tableA
(
id INT(11),
name VARCHAR(22),
location VARCHAR(50),
PRIMARY KEY(id)
);
CREATE TABLE tableB
(
id INT(11),
name VARCHAR(22) NOT NULL,
deptId INT(11),
PRIMARY KEY(id),
CONSTRAINT tableA_tableB_1 FOREIGH KEY(deptId) REFERENCES tableA(id)
);
解釋:tableB中有一個名為tableA_tableB_1的外鍵關聯了tableA和tableB兩個表,被外鍵約束修飾的字段為tableB中的deptId,主鍵字段為tableA中的id
1.2.3:非空約束
NOT NULL. 被該約束修飾了的字段,就不能為空,主鍵約束中就包括了這個約束
CREATE TABLE tableA
(
id INT(11),
name VARCHAR(22) NOT NULL,
location VARCHAR(50),
PRIMARY KEY(id)
);
1.2.4:唯一約束
UNIQUE 被唯一約束修飾了的字段,表示該字段中的值唯一,不能有相同的值,通俗點講,就好比插入兩條記錄,這兩條記錄中處於該字段的值不能是一樣的。
CREATE TABLE tableA
(
id INT(11),
name VARCHAR(22) UNIQUE,
location VARCHAR(50),
PRIMARY KEY(id)
);
也就是說在插入的記錄中,每條記錄的name值不能是一樣的。
1.2.5:默認約束
Default 指定這一列的默認值為多少,比如,男性同學比較多,性別就可以設置為默認男,如果插入一行記錄時,性別沒有填,那麼就默認加上男
CREATE TABLE table
(
id INT(11) PRIMARY KEY,
name VARCHAR(22) NOT NULL,
deptId INT(11) DEFAULT 1111,
salary FLOAT
);
1.2.6:自動增加
AUTO_INCREMENT 一個表只能一個字段使用AUTO_INCREMENT,並且使用這個約束的字段只能是整數類型(任意的整數類型 TINYINT,SMALLIN,INT,BIGINT),默認值是1,也就是說從1開始增加的。一般就是給主鍵使用的,自動增加,使每個主鍵的值度不一樣,並且不用我們自己管理,讓主鍵自己自動生成
CREATE TABLE table ( id INT(11) PRIMARY KEY AUTO_INCREMENT, name VARCHAR(22) NOT NULL );
2、查詢表結構
2.1、查看錶基本結構語句
格式1:DESCRIBE 表名/DESC 表名這兩個的功能是一樣的,簡寫了單詞describe
DESCRIBE student;
2.2、查看創建表的語句
格式:SHOW CREATE TABLE 表名
SHOW CREATE TABLE student;
這樣顯示的格式很不好,看不清楚,所以有了下面這個語句
格式:SHOW CREATE TABLE 表名\G
SHOW CREATE TABLE student\G;
3、修改數據表
修改數據表包括:對表中字段的增加、刪除、修改。 在這個裡面用的關鍵字為 ALTER
3.1、修改表名
格式:ALTER TABLE舊錶名 RENAME[TO]新表名;
將student表名改為student1(改完後在改回來)
ALTER TABLE student RENAME TO student1;
3.2、修改表中的字段名
格式:ALTER TABLE表名 CHANGE舊字段名新字段名新數據類型
將student表中的name字段名改為 username
ALTER TABLE student CHANGE name username VARCHAR(30);
3.3、修改表中的數據類型
格式:ALTER TABLE表名 MODIFY字段名數據類型
ALTER TABLE student MODIFY username VARCHAR(20);
解釋:只能修改字段名的數據類型,但是其原理跟上面change做的事情一樣,這裡也有修改字段名的過程,只不過修改後的字段名和修改前的字段名相同,但是數據類型不一樣。
3.4、修改字段的排列位置
方式1:ALTER TABLE表名 MODIFY字段1數據類型 FIRST|AFTER字段2
解釋:將字段1的位置放到第一,或者放到指定字段2的後面
ALTER TABLE student MODIFY username VARCHAR(20) AFTER age;
方式2:ALTER TABLE表名 CHANGE字段1字段2數據類型 FIRST|AFTER字段3
解釋:其實是一樣的,將是字段2覆蓋字段1,然後在進行排序
ALTER TABLE student CHANGE username username VARCHAR(20) AFTER age;
總結
CHANGE和MODIFY的區別?
原理都市一樣的,MODIFY只能修改數據類型,但是CHANGE能夠修改數據類型和字段名,也就是說MODIFY是CHANGE的更具體化的一個操作。可能覺得用CHANGE只改變一個數據類型不太爽,就增加了一個能直接改數據類型的使用關鍵字MODIFY來操作。
3.5、添加字段
格式:ALTER TABLE表名稱 ADD新字段名數據類型[約束條件][FIRST|AFTER已存在的表名]
解釋:在一個特定位置增加一個新的字段,如果不指定位置,默認是最後一個。
ALTER TABLE student ADD sex VARCHAR(11);
3.6、刪除字段
格式:ALTER TABLE表名稱 DROP字段名;
ALTER TABLE student DROP sex;
3.7、刪除表的外鍵約束
格式:ALTER TABLE表名稱 DROP FOREIGN KEY外鍵約束名
注意:外鍵約束名 指的不是被外鍵約束修飾的字段名,切記,而是我們在創建外鍵約束關係時取的名字。
3.8、更改表的存儲引擎
格式:ALTER TABLE表名 ENGINE=更改後的存儲引擎名
這個存儲引擎目前我自己也不太清楚,雖然知道有哪幾種引擎,但是稍微深入一點就不清楚了,所以打算留到日後在說。
4、刪除表
4.1、刪除無關聯表
格式:DROP TABLE表名;
ALTER TABLE student;
4.2、刪除被其他表關聯的主表
這個是比較重要的一點,在有外鍵關聯關係的兩張表中,如果刪除主表,那麼是刪不掉的,並且會報錯。因為有張表依賴於他。那怎麼辦呢?針對這種情況,總共有兩種方法
1、先刪除你子表,然後在刪除父表,這樣就達到了刪除父表的目的,但是子表也要被刪除
2、先解除外鍵關係,然後在刪除父表,這樣也能達到目的,並且保留了子表,只刪除我們不需要的父表。在3.7中就講解了如何刪除外鍵關係。
peewee ORM 可以使用 Connector/Python 來連接mysql數據庫嗎
在python3下使用peewee-2.1.4做ORM。連接MySQL數據庫,提示需要MySQLdb模塊,發現MySQLdb模塊不支持python3,各種折騰、google不得其法。
然後又試着使用MySQL官方forPython驅動 Connector/Python
需要對qeewee代碼改動
改動的漸入佳境,沾沾自喜中發現peewee的代碼中有如下片段
try:
import MySQLdb as mysql
except ImportError:
try:
import pymysql as mysql
except ImportError:
mysql = None
基本上就是說如果找不到MySQLdb那麼就找pymysql,
Python操作MySQL的驅動有哪些?
使用Python操作MySQL數據庫的方式(驅動)有很多種,比如:PyMySQL、MySQLdb、mysqlclient、SQLAlchemy等等
MySQLdb
MySQLdb是 Python 連接 MySQL 最流行的一個驅動,很多框架都也是基於此庫進行開發,遺憾的是它只支持 Python2.x,它是基於C開發的庫,和Windows 平台的兼容性不友好,現在基本不推薦使用,取代的是它的衍生版本。
mysqlclient
由於 MySQLdb 年久失修,後來出現了它的 Fork 版本 mysqlclient,完全兼容 MySQLdb,同時支持 Python3.x,是 Django ORM的依賴工具,如果你想使用原生 SQL 來操作數據庫,那麼推薦此驅動。
PyMySQL
PyMySQL是純 Python 實現的驅動,速度上比不上 MySQLdb,最大的特點可能就是它的安裝方式沒那麼繁瑣,同時也兼容 MySQLdb。
SQLAlchemy
SQLAlchemy是一種既支持原生 SQL,又支持 ORM 的工具,它非常接近 Java 中的 Hibernate 框架。
作為一個測試人員,數據庫的操作也必須是要掌握的,如果想系統的學習接口測試相關的技術,可以了解一下黑馬程序員的軟件測試課程,裡面講的非常詳細。
orm hibernate jdbc mysql 四者之間是什麼關係?
mysql是一種數據庫
jdbc是一種JAVA連接數據庫的技術
即java
database
connection
orm是對象關係映射
簡單講即將關係型數據庫的數據映射到程序中的對象
hibernate是一種orm工具框架
總結起來可以這麼說:可以利用hibernate這個orm框架通過jdbc連接mysql數據庫並將數據庫中的關係型數據轉換為程序或內存中的對象。
orm框架sequelize 向mysql數據庫插入數據,id設置為自增的主鍵,總是出錯,顯示id不能為null?
你可以自zhidao己定義表結構,注意下面第三個參數,我把鏈接發給你吧,你參考一下,不是讓專你屬按下面這樣寫,只是提供參考
var a= sequelize.define(‘a’, { id: {type: Sequelize.STRING, max: 20}, Typess: {type: Sequelize.STRING, max: 20}, startStation: {type: Sequelize.STRING, max: 20}, endStation: {type: Sequelize.STRING, max: 20}, R_Date: {type: Sequelize.STRING, max: 20}, Distance: {type: Sequelize.STRING, max: 20} },{ freezeTableName: true, timestamps: false})
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/288733.html