• 数据库基础操作


    Ubuntu安装MySQL服务

    安装服务端: sudo apt-get install mysql-server
    安装客户端: sudo apt-get install mysql-client

    配置文件:/etc/mysql
    命令集: /usr/bin
    数据库存储目录 :/var/lib/mysql

    1. 启动/连接/关闭mysql

    • 启动/关闭/重启服务端: sudo /etc/init.d/mysql status | start | stop | restart
    • 客户端连接服务端: mysql -hlocalhost -uroot -p123456
    • 关闭连接: ctrl + d exit

    2. 数据库操作

    show databases; --> 查看数据库存储目录:/var/lib/mysql下有那些数据库

    create database db_name character set utf8;
    create database db_name charset=utf8;

    show create database db_name;

    select database();

    use db_name;

    drop database db_name;

    2. 表的操作

    create table t_name (col_name1 dt opt1 opt2, col_name2, dt opt1 opt2, ...);

    unsigned not null default primary_key auto_increment

    show tables;

    show create table t_name;

    desc t_name;

    drop table t_name;

    3. 数据的操作:

    insert into t_name values (v1, v2, ...);
    insert into t_name (col1, col2, ...) values (v1, v2, ...);

    select * from t_name;
    select * from t_name where ...;
    select col1, col2, ... from t_name where ...;

    update t_name set vol1 = v1, vol2 = v2, ... where ...;

    delete from t_name; --> 清空表中的全部记录
    delete from t_name where...;

    4. 字段的操作(表结构的修改)

    alter table t_name add col1 dt opt1 opt2 ..., ...;
    alter table t_name add col1 dt opt1 opt2 ..., ... first;
    alter table t_name add col1 dt opt1 opt2 ..., ... after col;

    alter table t_name drop col;

    alter table t_name modify col1 dt opt1 opt2 ..., col2 dt opt1 opt2 ..., ...;

    alter table t_name change old_col new_col dt opt;

    alter table t_name rename new_t_name;

    5. 时间类型

    date time year datetime timestamp

    now() curdate() curtime()

    创建表时,给一个时间类型字段设置默认值:
    create table test_time (id int, time datetime default now());

    select * from t_name where ...;

    select * from t_name where col 运算符 (时间 - interval 时间间隔单位)
    + / - interval
    时间间隔单位: 2 hour | 1 minute | 2 second | 2 year | 3 month | 1 day

    time('2:30:00') 得到指定的时间
    date('2019-8-13') 得到指定的日期
    主要用于时间运算

    6. 高级查询

    select * from t_name where col like '...';
    % 任意0或多个字符
    _ 任意单个字符

    select * from t_name where col regexp '...';

    select * from t_name where ... order by col1 col2 [asc [desc]];

    limit 1
    select update delete

    select ... union select ...;
    all --> 返回所有结果集, 包括重复的数据.
    两个查询语句的字段可以不同,但是数量必须保持相同.

    7. 导出/恢复数据库

    mysqldump -uroot -p stu > stu.sql

    mysql -uroot -p student < stu.sql

    8. Python操作MySQL数据库

    sudo pip3 install pymysql --> 安装模块pymysql

    db = pymysql.connect(...)
    cur = db.cursor()
    cur.execute('insert ...;')
    db.commit() / db.fetchall()
    cur.close() --> 不能使用这个游标了
    db.close() --> 关闭与数据库的连接

    db = pymysql.connect(host, port, user, password, database, charset)
    cur = db.cursor()
    db.commit()
    db.rollback()
    db.close()

    cur.execute(sql)
    cur.fetchone()
    cur.fetchmany(n)
    cur.fetchall()
    cur.close()

    写操作

    当向数据库commit时, 如果前面的execute中有错误的,这时数据库是不允许错误的execute提交,但是会让正确的execute提交.
    我们希望一次提交的内容中, 有一个有错误, 那所有的execute都不提交, 即回滚到上一次提交后的状态.
    所以需要使用try.

    try:
        db.commit()
    except:
        db.rollback()    # 如果提交异常, 则回到提交前的状态
    
    try:
        cur = db.cursor()
    
        name = input("Name: ")
        age = input("Age: ")
        gender = input("Gender: ")
        score = input("Score: ")
    
        # 提前把语句列出来 sql = ""
    
        # 1. 直接构建sql语句
        sql = "insert into class_1 (name, age, gender, score) " 
              "values ('%s', %s, '%s', %s)" % (name, age, gender, score)
        cur.execute(sql)
    
        # 2. 通过execute第二个参数列表构建sql语句  通常用作传字段值 例如不可用于传表名
        sql = "insert into class_1 (name, age, gender, score) " 
              "values (%s, %s, %s, %s)"
        cur.execute(sql, [name, age, gender, score])
    
        db.commit()
    except Exception as e:
        db.rollback()       # 如果提交异常, 则回到提交之前的状态  
    

    读操作

    不需要db.commit()

    # 数据库操作
    sql = "select name, age from class_1 where sex='m';"
    cur.execute(sql)
    
    # 获取查询结果
    one_row = cur.fetchone()          # 元组 / None
    many_rows = cur.fetchmany(3)      # 元组中嵌套元组 / None
    all_rows = cur.fetchall()         # 元组嵌套元组 / None
    
  • 相关阅读:
    selenium的
    condition版生产者与消费者模式
    Xpath语法详解
    requests库的基本使用
    urlib库的使用
    MVC5+EF6 入门完整教程六
    MVC5+EF6 入门完整教程五
    MVC5+EF6 入门完整教程四
    MVC5 + EF6 完整入门教程三
    MVC5 + EF6 入门完整教程二
  • 原文地址:https://www.cnblogs.com/NeverYa/p/11371610.html
Copyright © 2020-2023  润新知