1. 程式人生 > >【python之路】數據庫

【python之路】數據庫

pla mon 符號 lis student 5.1 cal 指定 cit

一、數據庫的簡介

  1.數據庫

  數據庫(database,DB)是指長期存儲在計算機內的,有組織,可共享的數據的集合。數據庫中的數據按一定的數字模型組織、描述和存儲,具有較小的冗余,較高的數據獨立性和易擴展性,並且可為各種用戶共享。

  2.數據庫分類

  2.1關系數據庫:Mysql,Oracle,sql server,db2,sqlite

  2.2非關系數據庫:redis ,mongodb

  3。數據庫系統

  數據庫系統DBS(Data Base System)通常由軟件、數據庫和數據管理員組成。其軟件主要包括操作系統、各種宿主語言、實用程序以及數據庫管理系統。數據庫由數據庫管理系統統一管理,數據的插入、修改和檢索均要通過數據庫管理系統進行。數據管理員負責創建、監控和維護整個數據庫,使數據能被任何有權使用的人有效使用。

二、mysql

  1.mysql的管理

  1.1安裝

  linux:

--yum -y install mariadb mariadb-server
OR
--yum -y install mysql mysql-server

  windouws:

--http://dev.mysql.com/downloads/mysql/ 

  1.2:啟動

--service mysqld start  #開啟
--chkconfig mysqld on   #設置開機自啟
OR
--systemctl start mariadb
--systemctl enable mariadb

  1.3:查看

-- ps aux |grep mysqld    #查看進程
-- netstat -an |grep 3306 #查看端口

  1.4:設置密碼

-- mysqladmin -uroot password 123   #設置初始密碼,初始密碼為空因此-p選項沒有用
-- mysqladmin -u root -p123 password 1234 #修改root用戶密碼

  1.5:登錄

-- mysql               #本地登錄,默認用戶root,空密碼,[email protected]
-- mysql -uroot -p1234 #本地登錄,指定用戶名和密碼,[email protected]
/* */ -- mysql -uroot -p1234 -h 192.168.31.95 #遠程登錄,[email protected]

  2.mysql的常用命令

-- 
-- 啟動mysql服務與停止mysql服務命令:
-- 
-- net start mysql
-- net stop  mysql
-- 
-- 登陸與退出命令:
-- 
--    mysql -h 服務器IP -P 端口號 -u  用戶名 -p 密碼 --prompt 命令提示符  --delimiter 指定分隔符
--    mysql -h 127.0.0.1 -P 3306 -uroot -p123
--    quit------exit----\q;
-- 
-- \s;   ------my.ini文件:[mysql] default-character-set=gbk [mysqld] character-set-server=gbk
-- 
-- prompt 命令提示符(\D:當前日期 \d:當前數據庫  \u:當前用戶)
-- 
-- \T(開始日誌) \t(結束日誌)
-- 
-- show warnings;
-- 
-- help() ? \h
-- 
-- \G;
-- 
-- select now();
-- select version();
-- select user;
-- 
-- \c 取消命令
-- 
-- delimiter 指定分隔符

  3.忘記密碼怎麽辦?

  方法1:啟動mysql時,跳過授權表

[[email protected] ~]# service mysqld stop
[[email protected] ~]# mysqld_safe --skip-grant-table &
[[email protected] ~]# mysql
mysql> select user,host,password from mysql.user;
+----------+-----------------------+-------------------------------------------+
| user     | host                  | password                                  |
+----------+-----------------------+-------------------------------------------+
| root     | localhost             | *A4B6157319038724E3560894F7F932C8886EBFCF |
| root     | localhost.localdomain |                                           |
| root     | 127.0.0.1             |                                           |
| root     | ::1                   |                                           |
|          | localhost             |                                           |
|          | localhost.localdomain |                                           |
| root     | %                     | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
+----------+-----------------------+-------------------------------------------+
mysql> update mysql.user set password=password("123") where user="root" and host="localhost";
mysql> flush privileges;
mysql> exit
[[email protected] ~]# service mysqld restart
[[email protected] ~]# mysql -uroot -p123

  方法2:刪庫

刪除與權限相關的庫mysql,所有的授權信息都丟失,主要用於測試數據庫或者剛剛建庫不久沒有授權數據的情況(從刪庫到跑路)
[[email protected] ~]# rm -rf /var/lib/mysql/mysql
[[email protected] ~]# service mysqld restart
[[email protected] ~]# mysql

  4.sql:結構化語句規範:

  4.1:不區分大小寫(命令建議大寫)

  4.2:以分號作為結束符號

  4.3:-- 單行註釋,/*多行註釋*/

  5.mysql數據類型

  MySQL支持多種類型,大致可以分為三類:數值、日期/時間和字符串(字符)類型。

  5.1:數值類型

  下面的表顯示了需要的每個整數類型的存儲和範圍。

技術分享

  5.2:日期和時間類型

  表示時間值的日期和時間類型為DATETIME、DATE、TIMESTAMP、TIME和TEAR。

  每個時間類型有一個有效值範圍和一個‘零’值,當指定不合法的mysql不能表示的值時使用‘零’值。

技術分享

  5.3:字符串類型

  字符串類型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。該節描述了這些類型如何工作以及如何在查詢中使用這些類型。

  技術分享

  CHAR和VARCHAR類型類似,但它們保存和檢索的方式不同。它們的最大長度和是否尾部空格被保留等方面也不同。在存儲或檢索過程中不進行大小寫轉換。

  BINARY和VARBINARY類類似於CHAR和VARCHAR,不同的是它們包含二進制字符串而不要非二進制字符串。也就是說,它們包含字節字符串而不是字符字符串。

  BLOB是一個二進制大對象,可以容納可變數量的數據。有4種BLOB類型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它們只是可容納值的最大長度不同。

  有4種TEXT類型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。這些對應4種BLOB類型,有相同的最大長度和存儲需求。

  6.數據庫的操作

  6.1:SHOW DATABASES;  --查看所有的數據庫

  6.2:CREATE DATABASE database_name  --創建數據庫

  6.3:SHOW CREATE DATABASE database_name  --查看創建數據庫信息

  6.4:DROP DATABASE database_naem  --刪除某個數據庫

  6.5:USE database_name  --使用某個數據庫

-- 1.創建數據庫(在磁盤上創建一個對應的文件夾)
    create database [if not exists] db_name [character set xxx] 
    
-- 2.查看數據庫
    show databases;查看所有數據庫
    show create database db_name; 查看數據庫的創建方式

-- 3.修改數據庫
    alter database db_name [character set xxx] 

-- 4.刪除數據庫
    drop database [if exists] db_name;
    
-- 5.使用數據庫
    切換數據庫 use db_name; -- 註意:進入到某個數據庫後沒辦法再退回之前狀態,但可以通過use進行切換
    查看當前使用的數據庫 select database();

  7.數據表的操作

  7.1:創建一個表

  CREATE TABLE table_name(

      字段名 字段數據類型 [約束] ,

      。。。。。

      字段名 字段數據類型 [約束] )

  7.2:修改表

  --增加列(字段)
  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;

  7.3:查看表

  DESC table_name  --查看表詳細信息

  SHOW TABLES  --查看當前庫的所有列表

  SHOW CREATE TABLE table_name  --查看表創建信息

  7.4:刪除表

  DROP TABLE table_name

  7.5:添加主鍵,刪除主鍵

  ALTER TABLE table_name ADD PRIMARY KEY(字段名稱,...);

  ALTER TABLE users DROP PRIMARY KEY;

-- 1.創建表(類似於一個excel表)

        create table tab_name(
            field1 type[完整性約束條件],
            field2 type,
            ...
            fieldn type
        )[character set xxx];

         -- 創建一個員工表employee

         create table employee(
            id int primary key auto_increment ,
            name varchar(20),
            gender bit default 1,   -- gender char(1)  default 1   -----    或者 TINYINT(1) 
            birthday date,
            entry_date date,
            job varchar(20),
            salary double(4,2) unsigned,
            resume text    -- 註意,這裏作為最後一個字段不加逗號
          );


    /* 約束:
       primary key (非空且唯一)  :能夠唯一區分出當前記錄的字段稱為主鍵!
       unique
       not null
       auto_increment 主鍵字段必須是數字類型。
       外鍵約束 foreign key  */

-- 2.查看表信息
    desc tab_name 查看表結構
    show columns from tab_name  查看表結構
    show tables 查看當前數據庫中的所有的表
    show create table tab_name    查看當前數據庫表建表語句 

-- 3.修改表結構
   -- (1)增加列(字段)
      alter table tab_name add [column] 列名 類型[完整性約束條件][first|after 字段名];
      alter table user add addr varchar(20) not null unique first/after username;
      #添加多個字段
      alter table users2 
            add addr varchar(20),
            add age  int first,
            add birth varchar(20) after name;

   -- (2)修改一列類型
      alter table tab_name modify 列名 類型 [完整性約束條件][first|after 字段名];
      alter table users2 modify age tinyint default 20;
      alter table users2 modify age int  after id;
   
   -- (3)修改列名
      alter table tab_name change [column] 列名 新列名 類型 [完整性約束條件][first|after 字段名];
      alter table users2 change age Age int default 28 first;

   -- (4)刪除一列
      alter table tab_name drop [column] 列名;
      -- 思考:刪除多列呢?刪一個填一個呢?
      alter table users2 
            add salary float(6,2) unsigned not null after name,
            drop addr;    

   -- (5)修改表名
      rename table 表名 to 新表名;
   -- (6)修該表所用的字符集    
      alter table student character set utf8;

-- 4.刪除表
    drop table tab_name;

---5 添加主鍵,刪除主鍵
    alter table tab_name add primary key(字段名稱,...) 
    alter table users drop primary key;

    eg:
    mysql> create table test5(num int auto_increment);
    ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
    create table test(num int primary key auto_increment);
    -- 思考,如何刪除主鍵?
    alter table test modify id int;   -- auto_increment沒了,但這樣寫主鍵依然存在,所以還要加上下面這句
    alter table test 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 article(
            id int primary key auto_increment ,
            title varchar(20),
            publish_date INT,
            click_num INT,
            is_top TINYINT(1),
            content TEXT
          );

  7.6:完整性約束值主鍵約束

  單字段主鍵

  主鍵字段特點:非空且唯一

技術分享
 create table users(
            id INT primary key,
            name varchar(20),
            city varchar(20)
          );
View Code

  多字段聯合主鍵

技術分享
create table users2(
            id INT,
            name varchar(20),
            city varchar(20),
            primary key(name,id)
          );
View Code

  (1)一張表只能有一個主鍵

  (2)主鍵類型不一定非是整型

      

  

【python之路】數據庫