Python學習之Mysql數據庫基礎

數據庫html

數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫。簡而言之,數據庫就是存儲數據的倉庫。mysql

 

數據的發展sql

  人工管理階段 文件管理階段 數據庫管理階段
時間 20世紀50年代中期之前  20世紀50年代後期至60年代中期  60年代後期 
領域 科學計算 科學計算、管理 大規模數據、分佈數據的管理
硬件 無直接存儲設備 磁鼓、磁盤 大容量磁盤、按需增容磁帶機
特色 數據不保存,數據無共享,數據不具備獨立性。 可長期保存、具備必定的獨立性,文件的形式已經多樣化。

採用複雜的結構化的數據模型,較高的數據獨立性,最低的冗餘度,數據控制功能。數據庫

 

管理者 用戶管理   文件系統管理     DBMS管理

 

數據庫類型編程

  數據庫一般分爲層次式數據庫網絡式數據庫關係式數據庫三種。而不一樣的數據庫是按不一樣的數據結構來聯繫和組織的。而在當今的互聯網中,最多見的數據庫模型主要是兩種,即關係型數據庫非關係型數據庫。常見的關係型數據庫常見的有:Oracle、DB二、PostgreSQL、Microsoft SQL Server、Microsoft Access、MySQL、浪潮K-DB 等。網絡

 

數據庫之Mysql

 

  MySQL 是最流行的關係型數據庫管理系統,在 WEB 應用方面 MySQL 是最好的 RDBMS(Relational Database Management System:關係數據庫管理系統)應用軟件之一。數據結構

MySQL 是一個關係型數據庫管理系統,由瑞典 MySQL AB 公司開發,目前屬於 Oracle 公司。MySQL 是一種關聯數據庫管理系統,關聯數據庫將數據保存在不一樣的表中,而不是將全部數據放在一個大倉庫內,這樣就增長了速度並提升了靈活性。編程語言

  • MySQL 是開源的,因此你不須要支付額外的費用。
  • MySQL 支持大型的數據庫。能夠處理擁有上千萬條記錄的大型數據庫。
  • MySQL 使用標準的 SQL 數據語言形式。
  • MySQL 能夠運行於多個系統上,而且支持多種語言。這些編程語言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。
  • MySQL 對PHP有很好的支持,PHP 是目前最流行的 Web 開發語言。
  • MySQL 支持大型數據庫,支持 5000 萬條記錄的數據倉庫,32 位系統表文件最大可支持 4GB,64 位系統支持最大的表文件爲8TB。
  • MySQL 是能夠定製的,採用了 GPL 協議,你能夠修改源碼來開發本身的 MySQL 系統。                       ______菜鳥教程

SQL學習函數

   SQL認識性能

   結構化查詢語言(Structured Query Language)簡稱SQL,結構化查詢語言是一種數據庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關係型數據庫;

   SQL 是用於訪問和處理數據庫的標準的計算機語言。

  SQL的功能包括查詢(Query)、操縱(Manipulation)、定義(Definition)和控制(Control)四個方面。

  1. 數據查詢語言(Data Query Language,DQL)稱爲數據檢索語句。
  2. 數據操縱語言(Data Manipulation Language, DML)包括插入(Insert)、修改(Update)和刪除(delete)。
  3. 數據控制語言(Data Control Language DCL)經過grant 或revoke語句得到許可,確認用戶對數據庫對象的訪問權限。
  4. 數據定義語言(Data Definition Language ,DDL)包括alter、Create 和 Drop。在數據庫中定義基本表、定義視圖和定義索引,經常使用語句關鍵字主要包括create,drop,。

 

數據庫操做(DDL)語句

 

  數據庫操做

  1.建立數據庫    create datebase <數據庫名>
    create database [if not exists]<數據庫名>[character set xxx] (帶條件式建立)   2.修改數據庫 alter database<數據庫名>[character set xxx]  
  3.查看數據庫     show databases; 查看全部數據庫 show create database <數據庫名>; 查看數據庫的建立方式  4.刪除數據庫 drop database [if exists]<數據庫名>;   5.鏈接數據庫 切換數據庫 use<數據庫名>;

 

   數據庫表操做

建立表Student
        create table tab_name(
            field1 type[完整性約束條件],
            field2 type,
            ...
            fieldn type
        )[character set xxx];
 
 
    建立一個學生表 create table student(     id TINYINT PRIMARY KEY auto_increment,#PRIMARY KEY爲表主鍵,auto_increment設置自動編號。     name VARCHAR(25),     gender boolean,     age INT,     bumen VARCHAR(20),     salary DOUBLE(7,2) )

查看錶信息
  查看錶結構 
  desc tab_name /show columns from tab_name

mysql> desc student;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | tinyint(4) | NO | PRI | NULL | auto_increment |
| name | varchar(25) | YES | | NULL | |
| gender | tinyint(1) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| bumen | varchar(20) | YES | | NULL | |
| salary | double(7,2) | YES | | NULL | |
| workdate | tinyint(1) | YES | | NULL | |
+----------+-------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)

 

    show tables 當前數據庫中全部的表

mysql> show tables;
+---------------+
| Tables_in_wjh |
+---------------+
| student |
+---------------+
1 row in set (0.00 sec)

   show create table tab_name  查看當前數據庫表建表語句 

修改表結構
    • 增長列(字段) alter table tab_name add [column] 列名 類型[完整性約束條件][first|after 字段名]; 
    • 修改一列類型 alter table tab_name modify 列名 類型 [完整性約束條件][first|after 字段名];
    • 修改列名 alter table tab_name change [column] 列名 新列名 類型 [完整性約束條件][first|after 字段名];
    • 刪除一列 alter table tab_name drop [column] 列名; 
    • 修改表名 rename table 表名 to 新表名;
    • 修該表所用的字符集  alter table student character set utf8;
    • 刪除表 drop table tab_name;
    • 添加主鍵,刪除主鍵 alter table tab_name add primary key(字段名稱,...) alter table users drop primary key;
    • 惟一索引 alter table tab_name add unique [index|key] [索引名稱](字段名稱,...) alter table users add unique(name)-- 索引值默認爲字段名show create table users; alter table users add unique key user_name(name);-- 索引值爲user_name
    • 添加聯合索引 alter table users add unique index name_age(name,age);#show create table users;
    • 刪除惟一索引 alter table tab_name drop {index|key} index_name

  主鍵設置:

  單一主鍵

  CREATE TABLE employee(

      id INT primary key, (id爲該表的惟一主鍵)

      name varchar(20),

      age INT,

  )

  多主鍵(多個外鍵)

  CREATE TABLE employee(

      id INT,

      book_id INT,

      name varchar(20),

      age INT,

      primary kry(id,book_id) #id和book_id爲該的主鍵。

  )

 

表記錄操做(DML語句)之增、刪除、改、查

  增長記錄

增長一條記錄 insert [into] table_name(field1,filed2 ******) values(value1,value2,*****); 增長多條記錄 insert [into] table_name values(value1,value2,*****),(value10,value12,*****);  

 

  刪除記錄

delete from table_name [where ....]   #where 後面檢索出要刪除的數據。若是where條件爲空,則是刪除表中全部記錄。 truncate table table_name;使用truncate刪除表中記錄。與delete刪除方式不同,truncate 是直接銷燬表,再建立一個新表。

  

  修改記錄

update table_name set field1=value1,field2=value2,......[where 語句]            #set是要修改的操做,where是檢索出要修改的記錄。

 

   查詢記錄

基本查詢 select * from table_name;查詢表中全部字段和記錄。 select (field1,field2,field13,...) from table_name where .......;   若是要查找表中全部記錄,字段可用*代替;where查詢條件select * from table_name;表示全部記錄 select (field1,field2,field13,...) from table_name; 也能夠用逗號隔開的字段來選擇查詢 select distinct field from table_name; 查詢不重複的記錄 ORDER BY 排序 在不少查詢數據庫記錄需用到排序的用法。 desc和asc是排序關鍵字,desc是降序、asc是升序排列 ORDER BY 排序,默認是升序 select * from table_name order by (field);一個字段排序。 select * from table_name order by (field1,field2 .....) desc; 多個字段依次排序。 Limit 限制 限制可用到作分頁的用法。 select * from table_name order by (field) limit (起始值),(行數); 若是沒有設置初值則從第一條數據開始。、 Group by 分組   按分組條件分組後每一組只會顯示第一條記錄。 select * from table_name group by (field1) 按照字段1分組。 select * from table_name group by (2) 按照第二個字段分組。 聚合函數 sum(求和),count(*)(記錄數),max(最大值),min(最小值) having是在分組後進行數據過濾。而where不能在group by後使用。 Regexp正則 select * from table_name where name regexp ‘^ppy’; select * from table_name where name regexp ‘hap$’; select * from table_name where name regexp ‘p{2}$;

 

  外鍵約束

外鍵操做

添加外鍵
alter table <表名> add constraint <外鍵名> foreign key<字段名> REFERENCES <外表表名><字段名>; 刪除外鍵 alter table <表名> drop foreign key <外鍵名>; innodb四種用法 1.cascade。從父表中刪除或更新對應的行,同時自動的刪除或更新子表中匹配的行。   eg 外鍵的級聯刪除: FOREIGN KEY (<父表主鍵>) REFERENCES <子表><主鍵>ON DELETE CASCADE 2.set null。 從父表中刪除或更新對應的行,同時將子表中的外鍵列設爲空。 eg 刪除   FOREIGN KEY(<父表主鍵>)REFERENCES<子表><主鍵>)     ON DELETE SET NULL 3.no cation: 拒絕刪除或者更新父表。 4.Restrict方式 :拒絕對父表進行刪除更新操做。

  

   多表查詢

1.笛卡兒積查詢
  SELECT
* FROM <數據表1>,<數據庫表2>;

2.內鏈接

  select * from <數據表1>,<數據庫表2> where <數據表1>.<主鍵> = <數據表2>.<主鍵>;
3.外鏈接

  左外鏈接
    select * from <數據庫1> left join <數據庫2> on <數據表1>.<主鍵> = <數據表2>.<主鍵>;
  右外鏈接
    select * from <數據庫1> right join <數據庫2> on <數據表1>.<主鍵> = <數據表2>.<主鍵>;

  全外鏈接
    select * from <數據庫1> left join <數據庫2> on <數據表1>.<主鍵> = <數據表2>.<主鍵>
  UNION
    select * from <數據庫1> right join <數據庫2> on <數據表1>.<主鍵> = <數據表2>.<主鍵>;

4.複合查詢

    select * from <數據庫1>,<數據庫2> where <數據表1>.<主鍵> = <數據表2>.<主鍵> and <字段> + 條件;

5.子查詢(嵌套查詢)
  帶有IN謂詞的子查詢
    
    eg: select sno,sn
       from student
       where sno IN
        (select son
         from SC
         where con IN
            ( select cno
              from Course

              where cn=‘數據結構’
                  )    
                )

 

 mysql索引認識

  什麼是索引?

  索引(index)也叫作「鍵(key)」,它是是存儲引擎用於快速查找記錄的一種數據結構,經過合理的使用數據庫索引能夠大大提升系統的訪問性能。簡單來講,索引就是至關於一本書的目錄,方便讀者找到想要的章節和頁碼。一張表能夠存在多種和多個索引,能夠加快查詢效率,但建立索引和維護索引會耗費時間,隨着數據量的增長而增長。

 

  索引類型

   1.常規索引

    常規索引,也叫普通索引(index或key)。一張數據表中能夠有多個常規索引。 

ALTER TABLE <數據庫名> ADD INDEX <索引名> (字段名);
  2.主鍵索引

  主鍵索引(Primary Key),也簡稱主鍵。提供惟一性約束,而且一張表只有一個主鍵。
ALTER TABLE <數據庫名> ADD PRIMARY KEY <索引名> (字段名);
  3.惟一索引

  惟一索引(Unique Key),並提供惟一性約束。一張表中能夠有多個惟一索引
ALTER TABLE <數據庫名> ADD Unique <索引名> (字段名);
  4.外鍵索引

  外鍵索引(Foreign Key),簡稱外鍵。外鍵會自動和對應的其餘表的主鍵關聯。
ALTER TABLE <表名> ADD  CONSTRAINT <外鍵名> foreign key<字段名> REFERENCES <外表表名><字段名>;
  5.組合索引

  組合索引(Combination Key),是經過表中多個字段組合而成的索引。
ALTER TABLE <數據庫名> ADD Index <索引名> (字段名,字段名.......);
 

     6.全文索引.

   全文索引(Full Text)提升全文搜索的查詢效率.

 
ALTER TABLE <數據庫名> ADD FULL TEXT <索引名> (字段名,字段名.......);
相關文章
相關標籤/搜索