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