DB, DBMS, DBApython
定義: 對大量信息進行高效管理的解決方案,按照必定數據結構進行數據的組織、存儲和管理數據的庫。mysql
創建在關係模型上的數據庫系統sql
如平常生活中,學生管理系統,將實體(學生)和實體屬性(學號、性別、姓名)保存在數據中,應該如何處理實體結構數據庫
MySQL是基於C/S架構的。安全
Not Only SQL, 非關係型數據庫系統,如mongoDB,MemBase服務器
面向對象模型的關係映射數據結構
net start service-name net stop service-name
C:\Users\GeneJiang>mysql -hlocalhost -P3306 -uroot -p
-h: 服務器名
-P: 端口號
-u:用戶名
-p:密碼架構
Create database db_name(數據庫選項);
`
在硬盤上,建立數據庫就是建立一個目錄,目錄名就是數據庫名。目錄內存在一個db.opt文件,用於保存數據庫屬性選項信息。nosql
-- 建立數據庫 CREATE DATABASE php_1; CREATE DATABASE `1234`; CREATE DATABASE `CREATE`; CREATE DATABASE `傳播智客`;
1.語法
SHOW DATABASES;
mysql也有用於維護本身的數據庫
1.語法
SHOW CREATED db_name;
DROP DATABASE db_name;
ALTER DATABASE db_name [修改指令];
表是數據的容器,數據庫是是表的容器,表必須屬於一個數據庫,進行表操做時候,必需要指定數據庫
CREATE TABALE table_name(列結構) 表選項();
CREATE TABLE python_class( class_no varchar(20), date_start date );
SHOW TABLES table_name; SHOW TABLES [like 'Pattern']; SHOW CREATE TABLE table_name; SHOW CREATE TABLE table_name\G DESCRIBE table_name; DESC table_name;
CREATE TABLE info_student( name varchar(20), stu_no varchar(2) ); CREATE TABLE exam_student( name varchar(20), stu_no varchar(2), score int ); CREATE TABLE exam_question( content varchar(100), answer varchar(20) ); SHOW TABLE like 'exam_%'; ----------------------------------------------------------- -- Result SHOW CREATE TABLE exam_student; SHOW CREATE TABLE exam_student\G ------------------------------------------------------------ DESCRIBE table_name; DESC table_name;
DROP TABLE [if exists] table_name;
-- 重命名錶:修改表名,支持同時修改多個表,支持跨數據庫重命名 RENAME TABLE old_tb_name to new_tb_name[, old_tb_name to new_tb_name]; --- 修改列的定義 ALTER TABLE table_name new_options; -- 1. 增長一個列 ALTER TABLE tb_name ADD col_name col_type; -- 2. 修改一個列 ALTER TABLE tb_name MODIFY col_name col_type; -- 3. 刪除一個列 ALTER TABLE tb_name DROP col_name; -- 4. 重命名一個列 ALTER TABLE tb_name CHANGE old_col_name new_col_name; --- 修改表的屬性 ALTER TABLE tb_name CHARACTER SET gbk/utf8;
-- 表的列修改 -- 1.增長一個列 ALTER TABLE exam_student ADD height int; -- 2. 刪除一個列 ALTER TABLE exam_student DROP height; -- 3. 修改一個列 ALTER TABLE exam_student MODIFY stu_no varchar(40); -- 4. 重命名一個列 ALTER TABLE exam_student CHANGE score int_score int; -- 表的屬性修改 ALTER TABLE exam_student CHARACTER SET utf8;
INSERT INTO tb_name( 字段列表)VALUES (值列表);
INSERT INTO exam_student (name, stu_no) VALUES ('jack', 1);
SELECT 字段列表 FROM tb_name 查詢條件;
SELECT name, stu_no FROM exam_student WHERE 1; SELECT * FROM exam_student WHERE 1;
UPDATE tb_name SET 字段=新值,... 條件
DELETE FROM tb_name 條件
DELETE FROM exam_student WHERE score <=90;
SHOW VARIABLES LIKE 'character_%';
mysql> SHOW VARIABLES LIKE 'character_%'; +--------------------------+---------------------------------------------------------+ | Variable_name | Value | +--------------------------+---------------------------------------------------------+ | character_set_client | gbk | | character_set_connection | gbk | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | gbk | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ | +--------------------------+---------------------------------------------------------+ 8 rows in set, 1 warning (0.01 sec)
當前字符集內,字符之間的比較關係,如ASCI碼的比較,97=>'a'
每一個字符集都支持不定數量的校對規則。
SHOW COLLATION; SHOW COLLATION LIKE 'characterset_zone_ci/cs/bin'
SHOW COLLATION LIKE 'gbk%';
具體操做
-- 建立不一樣校隊規則的表 CREATE TABLE tb_first( name varchar(10) ) CHARACTER SET gbk COLLATE gbk_chinese_ci; CREATE TABLE tb_second( name varchar(10) ) CHARACTER SET gbk COLLATE gbk_bin; -- 分別插入數據 INSERT INTO tb_first VALUES('a'); INSERT INTO tb_first VALUES('B'); INSERT INTO tb_first VALUES('C'); INSERT INTO tb_second VALUES('a'); INSERT INTO tb_second VALUES('B'); INSERT INTO tb_second VALUES('C'); -- 顯示數據進行排序 SELECT * FROM tb_first ORDER BY name; SELECT * FROM tb_second ORDER BY name;
結果
mysql> select * from tb_first order by name; +------+ | name | +------+ | a | | B | | C | +------+ 3 rows in set (0.01 sec) mysql> select * from tb_second order by name; +------+ | name | +------+ | B | | C | | a | +------+ 3 rows in set (0.00 sec)
類型 | 字節 | 值範圍 |
---|---|---|
TINYINT | 1 | -128/127 or 0-255(無符號) |
SMALLINT | 2 | |
MEDIUMINT | 3 | |
INT | 4 | |
BIGINT | 8 |
CREATE TABLE tb_int( a TINYINT UNSIGNED, b TINYINT ); INSERT INTO tb_int VALUES (255, 127); INSERT INTO tb_int VALUES (256, 128);
mysql> INSERT INTO tb_int VALUES (256, 128); ERROR 1264 (22003): Out of range value for column 'a' at row 1
ALTER TABLE tb_int add c TINYINT(3) ZEROFILL; INSERT INTO tb_int VALUES (0, 111, 1); INSERT INTO tb_int VALUES (0, 111, 11); INSERT INTO tb_int VALUES (0, 111, 12); INSERT INTO tb_int VALUES (0, 111, 113); SELECT * FROM tb_int;
mysql> SELECT * FROM tb_int; +------+------+------+ | a | b | c | +------+------+------+ | 255 | 127 | NULL | | 0 | 111 | 001 | | 0 | 111 | 011 | | 0 | 111 | 012 | | 0 | 111 | 113 | +------+------+------+ 5 rows in set (0.00 sec)
類型 | 字節 |
---|---|
float | 4 |
double | 8 |
DECIMAL | (M,D),默認M是10, D是2 |
CREATE TABLE tb_float( a float, b double ); INSERT INTO tb_float VALUES (12345678.123, 1234567890.12345678); SELECT * FROM tb_float;
結果1:
mysql> SELECT * FROM tb_float; +----------+--------------------+ | a | b | +----------+--------------------+ | 12345700 | 1234567890.1234567 | +----------+--------------------+ 1 row in set (0.00 sec)
ALTER TABLE tb_float ADD c DECIMAL(10,2); INSERT INTO tb_float VALUES(123, 123.44, 11111111.222); SELECT * FROM tb_float;
結果2:
mysql> SELECT * FROM tb_float; +----------+--------------------+-------------+ | a | b | c | +----------+--------------------+-------------+ | 12345700 | 1234567890.1234567 | NULL | | 123 | 123.44 | 11111111.22 | +----------+--------------------+-------------+ 2 rows in set (0.00 sec)
Example:
CREATE TABLE tb_datetime( a DATETIME, b TIMESTAMP ); INSERT INTO tb_datetime VALUES ('2018-02-27 12:34:08', '2018-02-27 12:34:09'); SELECT * FROM tb_datetime;
結果:
mysql> SELECT * FROM tb_datetime; +---------------------+---------------------+ | a | b | +---------------------+---------------------+ | 2018-02-27 12:34:08 | 2018-02-27 12:34:09 | +---------------------+---------------------+ 1 row in set (0.00 sec)
D HH:MM:SS
example:
-- time的格式 CREATE TABLE tb_datetime_1( ago time ); INSERT INTO tb_datetime_1 VALUES ('23:12:12'); INSERT INTO tb_datetime_1 VALUES ('211212'); INSERT INTO tb_datetime_1 VALUES ('5 20:15:13');
結果:
mysql> SELECT * FROM tb_datetime_1; +-----------+ | ago | +-----------+ | 23:12:12 | | 21:12:12 | | 140:15:13 | +-----------+ 3 rows in set (0.00 sec)
總結:
字符 | Char(5) | VarChar(5) | 解釋 |
---|---|---|---|
"" | 5個字節 | 1個字節 | |
'a' | 5個字節 | 2個字節 | |
'ab' | 5個字節 | 3個字節 |
gender enum('female', 'male')
example:
```
-- enum type
CREATE TABLE tb_enum(
gender ENUM('female', 'male')
);
INSERT INTO tb_enum VALUES ('male');
INSERT INTO tb_enum VALUES ('female');
-- error
INSERT INTO tb_enum VALUES ('other');
SELECT gender FROM tb_enum;
SELECT gender+0 FROM tb_enum;
```
Example:
-- set type CREATE TABLE tb_set( hobby SET('basket', 'football', 'pingpang') ); INSERT INTO tb_set VALUES('basket'); INSERT INTO tb_set VALUES('basket, football');
mysql> SELECT hobby FROM tb_set; +--------+ | hobby | +--------+ | basket | +--------+ 1 row in set (0.00 sec) mysql> SELECT hobby+0 FROM tb_set; +---------+ | hobby+0 | +---------+ | 1 | +---------+ 1 row in set (0.00 sec)
在數據庫中能夠保存二進制,可是不會直接在數據庫中直接保存圖片
經常使用類型:
1.int/tinyint