【python之路】數據庫
一、數據庫的簡介
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]
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之路】數據庫