MySQL 学习;python连接MySQL数据库;Django配置MySQL数据库

安装

下载:

https://www.mysql.com/downloads/

数据库泛型

  • 第一范式:每个字段不能再拆分------第一范式(1NF)无重复的列
  • 第二范式:记录必须被唯一区分------第二范式(2NF)属性完全依赖于主键
  • 第三范式:两个表之间不能有耦合------第三范式(3NF)属性不依赖于其它非主属性

常见数据库

甲骨文 Oracle、MySQL

IBM DB2

微软 Microsoft SQLserver

开源 PostgreSQL

python与数据库的链接

安装:

pip install pymysql

导入:

import pymysql

连接与断开服务器:

mysql -u 用户名 -p
输入秘密:

数据库操作

查看当前数据库

SELECT DATABASE();

显示当前时间、用户名、数据库版本:

SELECT now(),user(),version();

创建数据库

CREATE DATABASE 数据库名 数据库选项

例:CREATE DATABASE myDb;

数据库选项:

CHARACTER SET charset_name

COLLATE collation_name

查看已有库

SHOW DATABASES;

查看当前库信息:

SHOW CREATE DATABASE 数据库名

修改库的选项信息

ALTER DATABASE 库名 选项信息

删除库

DROP DATABASE 数据库名

同时 删除该数据库相关的目录及其目录内容

表的操作

创建表

CREATE [TEMPORARY] TABLE [库名]表名(表的结构定义)[表选项]

每个字段必须有数据类型

最后一个字段后不能有逗号

TEMPORARY 临时表,会话结束时表自动消失

对于字段的定义:

字段名 数据类型 [NOT NULL | NULL ] [DEFAULT default_value] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT ‘string’]

创建表例子:

CREATE TABLE `myDb`.student(
	id INTEGER NOT NULL AUTO_INCREMENT,
	name varchar(20) NOT NULL,
	CONSTRAINT student_PK PRIMARY KEY(id)
) ENGINE = InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

PRIMARY KEY:主键,一条记录的唯一标识

AUTO_INCREMENT:自增 1 2 3 。。。

字符集:CHARSET = charset_name 如果表没有设定,则使用数据库字符集

存储引擎:ENGINE = engine_name 表在管理数据时采用不同的数据结构,结构不同会导致处理方式、提供的特性操作等不同;常见的引擎有:InnoDB、MyISAM、Memory/Heap、BDB、Merge Example CSV、MaxDB、Archive;不同的引擎在保存表的结构和数据时采用不同的方式;

MyISAM表文件含义:.frm表定义,.MYD表数据,.MYI表索引

InnoDB表文件含义:.frm表定义,表空间数据和日志文件

SHOW ENGINES ------显示存储引擎的状态信息

SHOW ENGINE 引擎名 {LOGS | STATUS} ------显示存储引擎的日志或状态信息

自增起始数

AUTO_INCREMENT = 行数

数据文件目录

DATA DIRECTORY = ‘目录’

索引文件目录

INDEX DIRECTORY = ‘目录’

表注释

COMMENT = ‘string’

分区选项

PARTITION BY …

查看所有表

SHOW TABLES [LIKE ‘pattern’]

SHOW TABLES FROM 数据库名

查看表机构

SHOW CREATE TABLE 表名(信息更详细)

DESC 表名 / DESCRIBE 表名 / EXPLAIN 表名 / SHOW COLUMNS FROM 表名 [LIKE ‘PATTERN’]

SHOW TABLE STATUS [FROM db_name] [LIKE ‘pattern’]

修改表

修改表本身的选项

ALTER TABLE 表名 表的选项

eg:ALTER TABLE 表名 ENGINE=MYISAM;

对表进行重命名

RENAME TABLE 原表名 TO 新表名

RENAME TABLE 原表名 TO 库名.表名(可将表移动到另一个数据库)–RENAME(可以交换两个表名)

修改表的字段机构(ALTER TABLE 语法)

ALTER TABLE 表名 操作名

操作名

ADD[COLUMN]字段定义 --增加字段

AFTER 字段名 --表示增加在该字段名后面

FIRST --表示增加在第一个

ADD PRIMARY KEY(字段名) --创建主键

ADD UNIQUE [索引名] (字段名) --创建唯一索引

ADD INDEX [索引名](字段名) --创建普通索引

DROP [COLUMN] 字段名 --删除字段

MODIFY [COLUMN] 字段名 字段属性 --支持对字段属性进行修改,不能修改字段名(所有原有属性也需写上)

CHANGE [COLUMN] 原字段名 新字段名 字段数形 --支持对字段名修改

DROP PRIMARY KEY --删除主键(删除主键前需删除其AUTO_INCREMENT 属性)

DROP INDEX 索引名 --删除索引

DROP FOREIGN KEY 外键 --删除外键

删除表

DROP TABLE 表名

清空表数据

TRUNCATE [TABLE] 表名

复制表结构

CREATE TABLE 表名 LIKE 要复制的表名

复制表结构和数据

CREATE TABLE 表名 [AS] SELECT * FROM 要复制的表名

检查表是否有错误

CKECK TABLE tbl_name [,tbl_name]…[option]…

优化表

OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [,tbl_name]…

修复表

REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name[,tbl_name]…[QUICK] [EXTENDED]

分析表

ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [,tbl_name]…

数据操作

INSERT [INTO] 表名 [(字段列表)] VALUES(值列表) [,(值列表),…]

–如果要插入的值列表包含所有字段并且顺序一致,则可以省略字段列表。

–可同时插入多条数据记录!

REPLACE 与 INSERT 完全一样,可互换。

INSERT [INTO] 表名 SET 字段名=值[,字段名=值,…]

例:

INSERT INTO group3(`name`, card, sex) VALUES('赵子龙', '123456789987654321', 1);

SELECT 字段列表 FROM 表名 [其他子句]

–可来自多个表的多个字段

–其他子句可以不使用

–字段列表可以用 * 代替,表示所有字段

例:

SELECT * FROM group3;

DELETE FROM 表名[删除条件子句]

没有条件子句,则会删除全部

例:

DELETE FROM group3 where id <= 5;

UPDATE 表名 SET 字段名=新值[,字段名=新值] [更新条件]

例:

UPDATE group3 set name='张飞' where id=7;

Django中配置MySQL

  1. 创建test数据库

  2. 配置,如下:

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'test',
            'USER': '用户名',
            'PASSWORD': '用户密码',
            'HOST': '127.0.0.1',
            'PORT': '3306',
        }
    }
    

Python操作MySQL数据库

  1. 能操作MySQL的库不止一个,例如:PyMySQL、MySQLdb、mysql.connector、SQLAlchemy

  2. 连接数据库

    conn = pymysql.connect(
    	host = '127.0.0.1',
        port = 3306,
        user = '用户名',
        passwd = '用户密码',
        db = 'test',
        charset = 'utf8',
    )
    
  3. 获得游标

    cur = conn.cursor()

  4. 执行语句

    sql = 'INSERT INTO group3(`name`, card, sex) VALUES('李四', '1234567887654321', 1);'
    cur.execute(sql)	# 执行SQL语句
    conn.commit()	# 提交更改
    
  5. 撤销执行(回滚)

    conn.rollback()

  6. 获得查询结果

    res = cur.fetchall()
    for row in res:
    	print(row)
    
  7. 关闭数据库

    cur.close()
    conn.close()
    

你可能感兴趣的:(MySQL)