欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

数据库之mysql

程序员文章站 2022-11-14 13:31:26
1、安装mysql-server的命令:sudo apt-get install mysql-server 安装mysql-client客户端:sudo apt-get install mysql-client 查是否安装成功并且启用:sudo netstat -tap | grep mysql 关 ......

1、安装mysql-server的命令:sudo apt-get install mysql-server

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

   查是否安装成功并且启用:sudo netstat -tap | grep mysql

   关闭mysql服务器命令:service mysql stop

  开头mysql服务器命令:service mysql start

  重启mysql服务器命令:service mysql restart

2、创建一个用户并且授权:grant all privileges on *.* to test@"%" identified by "123456" with grant option;

  登录数据库:mysql -utest -p123456

  显示所有数据库:show databases;

  选择某一个数据库:use students:

  查看当前数据库的所有表单:show tables;

  查看某个表的结构:desc students;

  查看当前表(user)的所有数据:select * from user;

  查看当前表(user)的user,host两列的数据:select user,host from user;

  删除表中某个id=1的数据:delete from students where id=1;

  查看当前使用的数据库:select database();

  创建数据库:create database test charset=utf8;

  删除数据库:drop database test;

  修改用户密码:mysqladmin -test -p123456 password 110110

3、E-R模型:E-R模型是当前物理的数据库都是按照E-R模型进行设计的,其中

       E表示entity,实体;相当于python中的对象包含的信息。

      R表示relationship,关系;如当百度王宝强时会有马蓉的相关消息。它是一个实体转换为数据库的一个表。

      对字段约束方式:

        主键primary key;不能重复,唯一标识,物理存储方式,速度快

        非空not null;当保存为null时就会报错;

        唯一unique;这个值是唯一的,有重复就会报错。

        默认default ;如果不写就会有个默认值,这种叫默认,只有类型。

        外键 foreign key

4、用sql语句创建表:  auto_increment 表示自增长;   primary key:主键    not null:不能为空

  create table students(

          id int(10)auto_increment primary key  not null,          

          name varchar(40),

          gender bite(1)  default 0

                                   )charset=utf8;

5、删除表单:drop table 表单名;

6、查看表单中的所有数据:select * from students;

     取别名:select name as 姓名,gender as 性别 fromstudents

7、查找表中id为1的所有字段:select * from students where id=1;

8、查找表中id为1的id和name:select id,name from students where id=1;

9、从表中查找所有数据中的id和name的字段数据: select id,name from students

10、insert into students(id,name,gender) values(3,'zhangsan','男'),(4,'lishi','男');

11、删除表单中id为1的或者name为mysql的数据:delete from students where id=1 or name=mysql;

12、修改表单中id为2的,把name改为mysql的数据:update students set name='mysql' where id=2;

13、将表单中的记录清空:delete from students;

14、备份:mysqldump -uroot -p test2 > ~/0000mysql.sql

         还原:mysql -uroot -p test1 < 0000mysql.sql

15、消除重复行,如查询性别:  select distinct gender from students;

16、查询id大于3的女同学:select id,name from students where id>3 and gender =0;

17、查询姓郭的学生:select * from students where name like '郭%';   %表示一个或者多个

18、查询姓黄并且名字是一个字的学生:selcet * from students where name like '黄_';   _表示一个

19、查询姓黄或者叫靖的学生:select name from students where name like '黄%' or name like '%靖%';

20、查询id是1或3或8的学生:select * from students where id in(1,3,8);

21、查询学生id是3至8的学生:select * from students where id between 3 and 8;

22、查询没有写性别的学生:select * from students where gender is null;

23、查询写了性别的学生:select * from students where gender is  not null;

24、查询女生id的最大值:select max(id) from students where gender=0;  最小值用min ,和用sum,平均值用avg ,总个数用count

25、一个语句统计男生和女生总人数:select gender,count(id) from students group by gender;

26、查询男生总人数:

  使用where语句 :select gender,count(id) from students where gender=1;

  使用分组后筛选:select gender,count(id) from students group by gender having gender =1;

27、查询未删除男生学生信息,按id降序:select id,name from students where gender=1 order by desc;    (order by asc 升序)

28、分面查找:(n-1)*m   从第一页开始查找    n表示页数,m表示每页显示数据的条数

  查询学生表,每页5条数据,页数从1开始 :

  第一页:select * from students limit 0,5;

       第二页:select * from students limit 5,5;  ......

29、创建分数表(scores)直接创建约束: foreign key(stuid) 表示外键    references表示与...相连

    

        create table scores(

 

             id int primary key auto_increment ,

 

             score decimal(4,1),

 

             stuid int,

 

             subid int,

 

             foreign key(stuid) references students(id),

 

             foreign key(subid) references students(id)

 

         )charset=utf8;

30、插入数据:insert into scores values(1,92,3,3),当插入外键在主表单中不存在时,会报错,这就是不合法数据.

31、查询每个学生的每个科目的分数:

  第一种写法:

            select students.name,subjects.title,scores.score from scores

    inner join students on scores.stuid=students.id

    inner join subjects on scores.subid=subjects.id;

  第二种写法:

    select students.name,subjects.title,scores.score from students

    inner join scores on scores.stuid=students.id

    inner join subjects on scores.subid=subjects.id;

  第三种写法:

    select students.name,subjects.title,scores.score from subjects

    inner join scores on scores.stuid=subjects.id

    inner join students on scores.stuid=students.id;

32、左连接(left join):表示表A和表B进行匹配,会完整显示出表A的数据,表B只显示与表A对应的数据

       右连接(right join )与此相反

    select students.name,subjects.title,scores.score from subjects

    left join scores on scores.stuid=subjects.id

    left join students on scores.stuid=students.id;

33、查询男生的姓名、总分:

  select students.name ,sum(scores.score)from scores

  inner join students on scores.stuid=students.id where gender=1 group by students.name;

34、查询未删除科目的名称、平均分:

  select subjects.title,avg(scores.score)from scores

  inner join subjects on scores.subid=subjects.id where isdelete=0 group by subjects.title;

35、使用python代码实现把mysql数据库封装成MysqlTool模块,该模块中MySqlHelper类:

import pymysql

# 创建MysqlHelper类
class MysqlHelper(object):
    # 创建初始化参数
    def __init__(self,host,user,password,db):
        self.host=host
        self.prot=3306
        self.user=user
        self.password=password
        self.db=db
        self.charset='utf8'

    # 打开数据库链接返回connect对象-conn
    def open(self):
        self.conn=pymysql.connect(
            host=self.host,
            port=self.prot,
            user=self.user,
            password='1122',
            db='python2',
            charset='utf8'
        )
        # 得到cursor对象
        self.cursor=self.conn.cursor()

    # 关闭链接
    def close(self):
        self.cursor.close()
        self.conn.close()

    # 修改提交数据
    def change(self, sql, parms=[]):
        try:
            self.open()
            self.cursor.execute(sql,parms)
            self.conn.commit()
            self.close()
        except Exception as result:
            print(result)
    def get_all(self,sql,prams=[]):
        try:
            self.open()
            self.cursor.execute(sql, prams)
            result = self.cursor.fetchall()
            self.close()
            for i in result:
                print(i)
        except Exception as result:
            print(result)

 

 

 

 

查询未删除科目的名称、平均分、最高分: