zoukankan      html  css  js  c++  java
  • MySQL基础使用

    数据库

    其实我们常常说的数据库,应该叫数据库系统。

    表和库

    数据表:用来保存数据的表格

    数据库:用来统一管理数据表的容器

    启动mysql 关闭mysql

    service mysqld start(启动)
    
    service mysqld stop(关闭)
    

    进入mysql

    mysql -uroot -p
    

    修改数据库管理员密码

    /usr/bin/mysqladmin -u root password '新密码'
    

    库的操作

    查看库

    show databases;
    

    创建一个数据库

    create database 您要创建的数据库名称;
    //创建数据库并指定编码和校对集
    create database `数据库名称` character set utf8 collate utf8_general_ci;
    create database `数据库名称` character set utf8mb4 collate utf8mb4_general_ci;
    

    修改已存在的数据库编码

    alter database 数据库名 charset=新的编码
    

    删除数据库

    drop database 要删除的数据库名称;
    

    切换当前数据库

    use 数据库名称
    

    数据表的操作

    查看某个数据库里面的数据表的列表

    show tables;
    

    创建数据表

    create table 表名(
    
    	字段名1 类型(长度),
    	字段名2 类型(长度),
    	字段名3 类型(长度),
    	……
    )
    

    比如:

    CREATE TABLE `x2` (
      `id` smallint(5),
      `name` varchar(4),
      `sex` tinyint(1),
      `mobile` char(11),
      `address` varchar(100),
      `add_time` datetime
    )
    
    

    创建数据表的时候指定数据表的编码

    CREATE TABLE `x5` (
      `id` smallint(5) DEFAULT NULL,
      `name` varchar(4) DEFAULT NULL,
      `sex` tinyint(1) DEFAULT NULL,
      `mobile` char(11) DEFAULT NULL,
      `address` varchar(100) DEFAULT NULL,
      `add_time` datetime DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    

    修改数据表

    增加列(字段)

    alter table 数据表名 add 列名以及类型、约束等信息
    //一次增加多列
    alter table 数据表名 add (列名1以及类型、约束等信息,列名2以及类型、约束等信息)
    

    修改列(字段)

    //列名必须是已经存在的
    alter table 数据表名 modify 列名以及类型、约束等信息
    
    //旧列名必须存在,新列名可以和旧列名一样,但不能和其它列名相同
    alter table 数据表名 change 旧列名称 新列名以及类型、约束等信息
    

    删除列

    alter table 数据表名称 drop 列名
    

    修改数据表的编码

    alter table 数据表名 charset=新的编码
    

    字段类型

    字段类型 意义 表示范围
    tinyint 微小整型 -128-127 ; 0-255
    smallint 小整型 -32768-32767 ; 0-65535
    mediumint 中等整型 -8388608-8388607 ;0-16777215
    int 整型 -2147493648-2147493647;0-4294967295
    bigint 大整型 -9223372036854775808-9223372036854775807;0-18446744073709551615
    float 单精度浮点型
    double 双精度浮点型
    char 字符型
    varchar 字符型
    text 文本型 支持65535个字符。要求长度+2字节的存储
    mediumtext 中等文本型 支持16777215个字符。需要长度+3字节的存储
    longtext 长文本型 支持4294967295个字符。需要长度+4字节的存储
    datetime 日期类型
    timestamp 时间戳日期

    字段约束

    名称 含义 备注
    not null 限制字段值不能为null
    default 设置默认值
    primary key 设置主键 也可以在最后使用 key(字段名)的形式设置主键
    auto_increment 设置自动增长 只能设置主键字段,且类型为整数型
    unsigned 设置字段为无符号类型
    comment 注释

    查看建表语句

    show create table 数据表名;
    

    删除数据表

    drop table 表名;
    

    数据操作

    插入数据

    insert into 表名 (字段名1,字段名2,……) values (字段1的值,字段2的值,……),(字段1的值,字段2的值,……),(字段1的值,字段2的值,……);
    
    //从一个表中选择数据插入到另一个表中
    insert into user (name,sex,age,mobile,address,native,card_id,number,room,xxx) select name,sex,age,mobile,address,native,card_id,number,room,xxx from student;
    

    查询数据

    select * from 表名;
    
    查询用户
    select * from mysql.user G;
    
    查看user表结构 需要具体的项可结合表结构来查询
    desc mysql.user;
    
    查看MYSQL数据库中所有用户
    SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;
    
    查询特定字段数据
    select number,name,age,address,sex from student where native='湖北';
    
    多条件查询
    select number,name,age,address,sex from student where native='湖北' and sex=1;
    select number,name,age,address,sex from student where native='湖北' && sex=1;
    
    
    select number,name,age,address,sex from student where native='湖北' or native='湖南';
    select number,name,age,address,sex from student where native='湖北' || native='湖南';
    select * from student where native in ('湖南','湖北');
    
    where 子句

    可以使用各种运算符:

    比较运算符: >、 <、 >=、 <=、 !=、 =、 <>

    逻辑运算符:and(&&)、or(||)

    小括号可以改变各个条件的运算顺序。

    字段名 in (条件值)字段名 not in (条件值)

    字段名 between A值 and B值 (包含边界) / 字段名 not between A值 and B值(不包含边界)

    字段名 like '%字符%'字段名 not like '%字符%' %可有可无,可在前,可在后。

    字段名 is null字段名 is not null 针对值为null的查询处理。

    order 子句

    可以对查询结果集根据某些字段进行正序(asc)或倒序(desc)排序。可以同时根据多个字段排序,优先以前面的排序,当前面的排序值一样的时候,以紧跟其后的排序规则进行排序,以此类推。

    limit 子句

    该子句后面可以跟两参数,第一个表示向后偏移量;第二个表示要查询的数量。

    当偏移量为0的时候,可以省略。

    where、order、limit子句如果两两同时出现,那么顺序应该是:where最前,order次之,limit最后。

    group 子句

    分组查询,先根据某个分组字段进行分组,然后在组内分别计算。

    having 子句

    当having不和group子句一起使用的时候,其外在表现和where子句一样。

    当having和group同时出现的时候,having要放到group后面。表示,先分组计算处理,然后从分组后的结果中筛选符合条件的数据。

    聚合函数

    sum() 求和

    avg() 求平均数

    max() 求最大值

    min() 求最小值

    count() 求数量

    大多数聚合函数的值,可以使用其他语句得到相同值。

    其他常用函数
    abs() 求绝对值
    
    ceil() 进一法取整
    
    floor() 退一法取整
    
    round(n, m)  对n四舍五入,m表示小数位,默认是0位
    
    mod(a, b) 求a/b的余数(取模)
    
    pi() 获取π的值
    
    rand(n) 获取一个0-1之间的随机数,如果n存在,多次获取,结果的值不变。
    
    sqrt(n) 返回n的平方根
    
    ascii() 获取一个字符在ascii表中的十进制数字值
    
    concat(str1,str2,……,strn); 将多个字符串拼成一个字符串
    concat_ws(a, str1,str2,……,strn)  将多个字符串拼成一个字符串,将str1-strn使用a字符拼分割拼接成一个长字符串。
    //select concat_ws('-',name,age,mobile,native) from student;
    
    insert(a,m,n,b)  将a字符(字段的值)从第m位开始,选取n个,被替换成b。
    //select insert(card_id,7,8,'********') from student;
    
    find_in_set(a, b) 在b列表中寻找a(b需要时使用逗号分割的,比如:'数学,英语,物理' ),返回的是a在b中的位置,为0时表示不存在。
    //select find_in_set('数学', subject),id,name from student;
    
    group_concat(字段名) 将一组内的某个字段的所有值使用逗号连接成一个字符串。
    
    ucase(str) / upper(str) 将 str全部转成大写
    lcase(str) / lower(str)将 str全部转成小写
    
    length(str) 计算字符str的长度,其中每个汉字占用3位。
    
    left(str,n) 从字符str的左侧开始,选取n位作为结果。
    right(str,n) 从字符str的右侧开始,选取n位作为结果。
    
    trim(str) 清除str中开头和结尾的空格部分
    ltrim(str) 清除str中开头空格部分
    rtrim(str) 清除str中结尾的空格部分
    
    replace(str,old, new) 将str中的old字符(串)替换成new字符(串)
    
    reverse(str) 将str颠倒顺序
    
    
    curdate() 当前日期
    curtime() 当前时间
    unix_timestamp() 获取时间戳
    now() 获取当前时间和日期
    
    
    md5() 计算哈希值,使用的是md5算法
    sha1() 计算hash值,使用的是sha1算法
    
    
    if(a,b,c) 如果a为真,则返回b,否则返回c,经测试:a为字符(串)的时候,一直返回c。
    
    ifnull(a,b) 如果a为null,则返回b,否则返回a。
    
    

    删除数据

    delete from 数据表名称;
    delete from 数据表名称 where 条件;
    

    修改数据

    update 数据表名 set 字段名=新的值 where 条件;
    update 数据表名 set 字段名1=新的值,字段名2=新的值 where 条件;
    

    用户管理

    创建用户

    //创建完默认情况下不能本地登录,只能远程登录
    create user 用户名 identified by 密码
    
    //创建用户并只能可以通过某个地址的客户端登录
    create user 用户名@主机地址 identified by 密码
    
    //使用授权命令授权的时候创建新用户并授权
    grant all privileges on xxxx.* to dddd@'%' identified by '654321';
    

    授权

    //使用授权命令授权的时候创建新用户并授权
    grant 权限类型 on 数据库.数据表 to 用户@主机地址 identified by 密码;
    
    //给已经存在的用户授权
    grant 权限类型 on 数据库.数据表 to 已存在的用户名;
    
    //给用aaa在xxxx数据库中的所有表都授有select权限
    grant select on xxxx.* to aaa;
    //对于有些权限的设置 需要加上host地址,这个地址一般和该用户在mysql.user表中的host字段的值相同
    grant select on xxxx.* to aaa@'host地址';
    
    //给用aaa在xxxx数据库中的所有表都授有update和delete权限
    grant update,delete on xxxx.* to aaa;
    

    常用的权限类型:

    权限类型 说明
    all privileges 所有权限
    all 所有权限
    select 读取权限
    delete 删除权限
    update 更新权限
    create 创建权限
    drop 删除数据库、数据表权限

    主机地址

    主机类型 含义
    localhost 只允许该用户在本地登录,不能远程登录
    % 允许在除本机之外的任何一台机器远程登录
    192.168.52.32 具体的IP表示只允许该用户从特定IP登录

    撤销权限

    基本格式:

    revoke 权限类型 on 数据库.数据表 from 用户名;
    

    例子:

    //撤销某一类权限
    revoke update on xxxx.* from aaa;
    
    //一次性多个权限
    revoke select,insert,delete on xxxx.* from aaa;
    
    //一次性撤销所有权限
    revoke all  on xxxx.* from aaa;
    revoke all privileges on xxxx.* from aaa;
    

    刷新权限

    flush privileges;
    

    注意:权限更新后,如果之前已经连接到服务端的用户,并不会马上生效新权限更改。只有退出后重新登录才生效。

    密码修改

    方法1:

    mysqladmin -u 用户名 password 新密码 -p
    

    例:

    mysqladmin -u root password '654321' -p
    

    方法2:

    使用grant授权的时候给已存在用户进行密码修改

    //给qqq用户在xxxx库中所有表的所有权限。
    //如果qqq用户不存在,那么会创建一个新用户qqq,并且设置密码为111111。
    //如果qqq用户已经存在且原密码不是111111,那么会将密码修改为111111。
    grant all on xxxx.* to qqq@'localhost' identified by '111111';
    

    方法3:

    //给当前登录用户修改密码
    set password=password('222222');
    
    //权限比较高的用户为其他用户或者自己修改密码
    set password for aaa@'%'=password('333333');
    

    方法4:

    直接修改mysql库里面的user表里面的数据

    //将用户bbb的密码修改为111111.注意一定要使用password()函数处理
    update user set Password=password('111111') where User='bbb';
    
    //该方法修改完密码以后需要刷新一下
    flush privileges;
    

    附加1 mysql权限类型

    权限 含义
    usage 连接(登陆)权限,建立一个用户,就会自动授予其usage权限(默认授予)。该权限只能用于数据库登陆,不能执行任何操作;且usage权限不能被回收,也即REVOKE用户并不能删除用户。
    file 拥有file权限才可以执行  select ..into outfile和load data infile…操作,但是不要把file, process,  super权限授予管理员以外的账号,这样存在严重的安全隐患。
    super 这个权限允许用户终止任何查询;修改全局变量的SET语句;使用CHANGE  MASTER,PURGE MASTER LOGS。
    select 必须有select的权限,才可以使用select  table
    insert 必须有insert的权限,才可以使用insert  into ….. values….
    update 必须有update的权限,才可以使用update  table
    delete 必须有delete的权限,才可以使用delete  from ….where….(删除表中的记录)
    alter 必须有alter的权限,才可以使用alter  table
    alter routine 必须具有alter  routine的权限,才可以使用{alter | drop} {procedure|function}
    create 必须有create的权限,才可以使用create  table
    drop 必须有drop的权限,才可以删除库、表、索引、视图等
    create routine 必须具有create  routine的权限,才可以使用{create | alter
    create temporary tables (注意这里是tables,不是table) 必须有create  temporary tables的权限,才可以使用create temporary tables.
    create view 必须有create  view的权限,才可以使用create view
    create user 要使用CREATE  USER,必须拥有mysql数据库的全局CREATE USER权限,或拥有INSERT权限。
    show database 通过show  database只能看到你拥有的某些权限的数据库,除非你拥有全局SHOW DATABASES权限。对于root@localhost用户来说,没有对mysql数据库的权限,所以以此身份登陆查询时,无法看到mysql数据库:
    show view 必须拥有show  view权限,才能执行show create view
    index 必须拥有index权限,才能执行[create  | drop] index
    excute 执行存在的Functions,Procedures
    event event的使用频率较低建议使用root用户进行创建和维护。要使event起作用,MySQL的常量GLOBAL event_scheduler必须为on或者是1
    lock tables 必须拥有lock  tables权限,才可以使用lock tables
    references 有了REFERENCES权限,用户就可以将其它表的一个字段作为某一个表的外键约束。
    reload 必须拥有reload权限,才可以执行flush  [tables | logs | privileges]
    replication client 拥有此权限可以查询master  server、slave server状态。
    replication slave 拥有此权限可以查看从服务器,从主服务器读取二进制日志。
    Shutdown 关闭mysql权限
    grant option 拥有grant  option,就可以将自己拥有的权限授予其他用户(仅限于自己已经拥有的权限)
    process 通过这个权限,用户可以执行SHOW  PROCESSLIST和KILL命令。默认情况下,每个用户都可以执行SHOW PROCESSLIST命令,但是只能查询本用户的进程。
    all privileges 所有权限。with  grant option 可以连带授权

    导入和导出

    导出

    导出某个库的所有表结构和数据

    基本结构:

    mysqldump -u 用户名 -p 数据库名 > 导出的文件路径
    

    例子:

    mysqldump -u root -p xxxx > ./xxxx.sql
    

    导出某个库的所有表结构

    基本结构:

    mysqldump -u 用户名 -p -d 数据库名 > 导出的文件路径
    

    例子:

    mysqldump -u root -p -d xxxx > ./xxxx.sql
    

    导出某个库的某个表的结构和数据

    基本结构:

    mysqldump -u 用户名 -p 数据库名 数据表名 > 导出的文件路径
    

    例子:

    mysqldump -u root -p xxxx user > ./xxxx.sql
    

    导出某个库的某个表的结构

    基本结构:

    mysqldump -u 用户名 -p -d 数据库名 数据表名 > 导出的文件路径
    

    例子:

    mysqldump -u root -p -d xxxx user > ./xxxx.sql
    

    导出所有的数据库结构和数据

    mysqldump -uroot -p --all-databases > aaa.sql
    

    导出所有的数据库结构

    mysqldump -uroot -p -d --all-databases > aaa.sql
    

    更多请参考:https://www.cnblogs.com/emanlee/p/5410177.html

    导入

    方法1:

    在mysql命令行:

    source 备份文件路径
    
    //例
    source /root/123.sql
    

    方法2:

     mysql -u 用户名 -p 数据库名 < 数据文件路径  
     
    //例
    mysql -u username -p test_db < test_db.sql  
    

    杂项

    起别名:as

  • 相关阅读:
    Vue 异步组件按需加载
    Net core 连接 Minio 出现 Access Denied 错误
    vue 脚手架打包 生成时间戳版本号
    vue tab 切换动画
    想尽办法不出错的语言太可怕了
    .NET Core:处理全局异常
    C#获取当前路径的方法
    [C#]解决生成的缩略图模糊的问题
    C# 正则表达式 —— 中文/英文空格(全角/半角空格)处理
    用C# 7.0的switch...case模式匹配取代一堆if语句
  • 原文地址:https://www.cnblogs.com/spmt/p/10662727.html
Copyright © 2011-2022 走看看