• MySQL 常见问题


    1、使用sql对数据库操作

    连接数据库命令: mysql -u root -p密码

    创建数据库:create database dbname;

    查看所有的数据库:show databases;

    删除数据库: drop database dbname;

    切换数据库:use dbname;

    2、使用sql对数据库表操作

    创建数据库表:语句 create table tablename (

    字段类型,

    字段类型

           )

    创建表 user,字段  id  username  password  sex

    create table user (

    id int,

    username varchar(40),

    password varchar(40),

    sex varchar(30)

    )

    mysql的数据类型

    字符串型 VARCHAR、CHAR

    当创建表时候,使用字符串类型,name varchar(40),指定数据的长度

    varchar和char的区别

    varchar的长度是可变的,比如name varchar(5),存值a ,直接把a存进去

    char的长度是固定的,比如 name char(5),存值b,把b存进去,后面加很多空格

    大数据类型BLOB、TEXT

    使用这个类型可以存储文件,一般开发,不会直接把文件存到数据库里面,存文件的路径

    数值型TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE

    对应java里面byte short  int  long  float  double

    逻辑性 BIT

    类似java里面的boolean

    日期型

    DATE:用于表示日期 1945-08-15

    TIME:用于表示时间 19:10:40

    下面的两个类型可以表示日期和时间

    DATETIME:手动添加时间到数据表里面

    TIMESTAMP:自动把时间添加到表里面

    查看表结构: desc tablename;

    mysql的约束有三种:

    第一种,非空约束 not null

    表示数据不能为空

    第二种,唯一性约束 unique

    表中的记录不能重复的

    第三种,主键约束 primary key

    表示非空,唯一性

    自动增长 auto_increment

    创建带约束的表:

    create table person (

    id int primary key ,

    username varchar(40) not null,

    sex varchar(20)

    )

    删除表: drop table tablename;

    查看当前的数据库里面有哪些表: show tables;

    3、使用sql对表中的记录进行操作(增删改查操作)

    (1)向表里面添加记录insert

    insert into user values(1,'aaa','123456','nan');

    自动增长的效果,创建一个表

    create table stu (

    id int primary key atuo_increment,

    sname varchar(40)

    )

    insert into stu values(null,'aaa');

    (2)修改表里面的记录update

    修改user表里面id=1的username修改为QQQ,修改password为999

    update user set username='QQQ',password='999' where id=1;

    (3)删除表里面的记录delete

    删除user表里面id=1的记录

    delete from user where id=1;

    不添加where条件,把表里面的所有的记录都删除

    (4)查询表中的记录select

    查询user表里面的所有的数据: select * from user;

    查询user表里面用户名和语文成绩: select username,chinese from user;

    查询user表里面id=2的数据: select * from user where id=2;

    (4)别名

    as 别名:  select username as u1,chinese as c1 from user;

    (5)distinct,去除表里面重复记录

    语句 select distinct * from tablename;

    (6)where子句

    第一,运算符 < > >= <=

    查询user表里面语文成绩大于60的所有的人员

    select * from user where chinese > 60;

    第二,in:在范围内

    查询user表里面英语成绩是80、90的人员的信息

    select * from user where english in (80,90);

    第三,and:在where里面如果有多个条件,表示多个条件同时满足

    查询user表里面语文成绩是100,并且英语成绩是30的人员的信息

    select * from user where chinese=100 and english=30;

    第四,得到区间范围的值

    查询user表里面语文成绩在70-100之间的值

    写法一,select * from user where chinese >=70 and chinese <=100;

    写法二,select * from user where chinese between 70 and 100;

    第五,like:模糊查询

    查询user表里面username包含a的人员信息

    Select * from user where username like '%a%';

    (7)查看当前的运行的数据库

    select database();

    (8)对表中查询的记录排序order by

     order by写在select语句的最后

    第一,升序 order by要排序字段 asc(asc可以省略,默认的情况下就是升序)

    对user表里面查询的数据,根据语文成绩进行升序排列

    select * from user order by chinese asc;

    第二,降序 order by要排序字段 desc

    对user表里面的英语成绩进行降序排列

    select * from user order by english desc;

    4、聚集函数

    第一,count()函数,根据查询的结果,统计记录数

    写法 select count(*) from ...where....

    查询user表里面有多少条记录

    select count(*) from user;

    查询user表里面语文成绩大于60的人员有多少

    select count(*) from user where chinese>60;

    第二,sum()函数,求和的函数

    写法 select sum(要进行求和字段) from ...where....

    得到user表里面的语文的总成绩

    select sum(chinese) from user;

    得到user表里面语文总成绩,英语的总成绩

    select sum(chinese),sum(english) from user;

    得到user表里面语文成绩的平均分(总的成绩/总的人数)

      select sum(chinese)/count(*) from user;

    第三,avg()函数,计算的平均数的函数

    写法 select avg(要计算平均数的字段名称) from ...

    得到user表里面语文成绩的平均分

    select avg(chinese) from user;

    第四,max()函数:计算最大值

    写法 select max(字段) from...

    第五,min()函数:计算最小值

    写法 select min(字段) from...

    得到user表里面语文成绩的最高分数,英语的成绩最低分数

    select max(chinese),min(english) from user;

    5、分组操作

    分组使用 group by根据分组的字段

    在分组的基础之上再进行条件的判断 having,后面可以写聚集函数

    (1)举例说明

    创建表 orders

    create table orders (

    id int,

    name varchar(40),

    price int

    )

    orders表里面每类商品的总的价格

    select name,sum(price) from orders group by name;

    对商品进行分类,得到每类商品的总价格大于66的商品

    select name,sum(price) from orders where sum(price)>66 group by name;

    上面的语句在逻辑上没有问题,在语法上,where里面不能写聚集函数,报错

    正确的写法:

    select name,sum(price) from orders group by price having sum(price)>66;

    6、mysql的关键字limit

    (1)limit关键字查询表中的某几条记录

    (2)limit关键字不是标准sql的关键字,只能在mysql数据库里面使用,实现分页的功能

    在oracle里面特有关键字rownum

    在sqlserver里面特有关键字top

    (3)使用limit查询前几条记录

    写法: limit前几条记录  limit 3

    查询user表里面前三条记录

    select * from user limit 3;

    select * from user limit 0,3;

    (4)使用limit查询第几条到第几条记录

    写法: limit第一个参数,第二个参数

    第一个参数开始的记录数的位置,从0开始的

    第二个参数从开始的位置向后获取几条记录

    查询user表里面第二条到第四条记录

    select * from user limit 1,3;

    7、重置mysql的root密码

    (1)知道密码,修改密码

    连接mysql数据库--->切换数据库 mysql use mysql---->-进行密码的修改 update user set password=password('要修改成的密码的值') where user='root';---->重新启动mysql服务

    (2)忘记密码,重置密码

    把mysql的服务关闭---->打开cmd窗口,输入命令mysqld --skip-grant-tables(不要加分号)---->再打开cmd窗口,连接数据库,不需要输入密码  mysql -u root--->切换数据库 mysql  use mysql---->进行密码的修改 update user set password=password('要修改成的密码的值') where user='root';---->把两个cmd窗口都关闭,打开任务管理器,找到mysqld进程,结束----->启动mysql服务

    8、其他命令

    清除表里的已有数据: truncate table tablename

    (不应该用 DELETE FROM table_name,也不应该用 DROP TABLE table_name)

    原因: DELETE的时候MySQL会有返回值(影响了多少条数据), 而TRUNCATE TABLE没有返回值, 所以速度更快,另外DROP TABLE的情况下需要重新创建表

    表重命名: alter table tablename rename to newtablename

    设置字段column_name为主键,自动增长: alter table tablename modify column_name int auto_increment primary key;

    设置字段值唯一: alter table tablename add unique(column_name)

    删除字段: alter table tablenamme drop column_name

    增加新的字段main_id: alter table tablename add main_id int(5);

    增加字段放在column字段之后: alter table tablename add 'newcolumn_name' int not null default 0 after 'this_column'

    增加字段放在最前面: alter table tablename add 'newcolumn_name' int not null default 0 first

    设置、修改、重命名字段(column)包括其属性/类型:

    change 和modify基本是一样的,唯一区别就是CHANGE具有重命名功能

    alter table tablename change column_name new_column_name varchar(20)...

    alter table tablename modify column_name new_column_name varchar(20)...

  • 相关阅读:
    HTTP传递数据的几种方法
    Python LOGGING使用方法
    EntityFramework Code First 添加唯一键
    The model backing the <Database> context has changed since the database was created.
    No connection string named '***' could be found in the application config file
    Generating a new ASP.NET session in the current HTTPContext
    add .json handler support in IIS 7
    Reset Entity-Framework Migrations
    Changing the type of a property with EF Code First
    命令行模式下 MYSQL导入导出.sql文件的方法
  • 原文地址:https://www.cnblogs.com/syycjh/p/10062369.html
Copyright © 2020-2023  润新知