数据库基础操作

Posted shenxm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库基础操作相关的知识,希望对你有一定的参考价值。

数据库基础操作

mysql数据库中开启使用tab键补全功能

    1)修改主配置文件/etc/mysql/my.cnf(mysql和mariadb目录有些不同)
        vim /etc/mysql/my.cnf
            [mysql]
            #no-auto-rehash
            auto-rehash
    2)重启并登录测试
    3)可以设置临时支持他不键补全
        msyql -uroot -p --auto-rehash

使mysql支持简体中文

    vim /etc/msyql/my.cnf(mysql和mariadb目录有些不同)
        [client]
        default-character-set=uft8
        [mysql]
        default-character-set=uft8
    service mysqld restart

mysql数据库表和库管理操作

    注意:大部分命令不区分大小写,且有些唯一的命令可以简写
    1)查看数据库结构
        1》查看数据库列表信息
            show database;
            help show
            help item:item在下面所示,来进行更进一步查看帮助
                show authors
                show {binary | master} logs
                show binlog events [in ‘log_name‘] [from pos] [limit [offset,] row_count]
                show character set [like_or_where]
                show collation [like_or_where]
                show [full] columns from tbl_name [from db_name] [like_or_where]
                show contributors
                show create database db_name
                show create event event_name
                show create function func_name
                show create procedure proc_name
                show create table tbl_name
                show create trigger trigger_name
                show create view view_name
                show databases [like_or_where]
                show engine engine_name {status | mutex}
                show [storage] engines
                show errors [limit [offset,] row_count]
                show events
                show function code func_name
                show function status [like_or_where]
                show grants for user
                show index from tbl_name [from db_name]
                show master status
                show open tables [from db_name] [like_or_where]
                show plugins
                show procedure code proc_name
                show procedure status [like_or_where]
                show privileges
                show [full] processlist
                show profile [types] [for query n] [offset n] [limit n]
                show profiles
                show slave hosts
                show slave status
                show [global | session] status [like_or_where]
                show table status [from db_name] [like_or_where]
                show [full] tables [from db_name] [like_or_where]
                show triggers [from db_name] [like_or_where]
                show [global | session] variables [like_or_where]
                show warnings [limit [offset,] row_count]
                    like_or_where:
                        LIKE ‘pattern‘| WHERE expr
                
        2》查看数据表信息
            use  数据库名称;##使用数据库
            show tables;
            help use
                user db_name;
                use db1;
                select count(*) from mytable;   # selects from db1.mytable
                use db2;
                select count(*) from mytable;   # selects from db2.mytable
                
        3》显示数据表的结构(字段)
            describe [数据库.]表名
            describe mysql.user;
            help describe
                {DESCRIBE | DESC} tb_name [col_name | wild]
                    tbl_name:表名
                    col_name:列名
                    
    2)DDL(数据定义语言)语句操作
        1》create 创建新库和创建新表
            create database 数据库名;
            create table 表名(定义字段);
            help create 
            help item:items在下面所示,来进一步查看帮助
                create database
                create event
                create function
                create function udf
                create index
                create procedure
                create server
                create table
                create tablespace
                create trigger
                create user
                create view
            示例:
                MariaDB [mysql]> create database auther;
                MariaDB [mysql]> use auther;
                MariaDB [auther]> create table users (user_name char(20) not null,user_passwd char(30) default ‘‘,primary key (user_name));
                MariaDB [auther]> show tables ;
                MariaDB [auther]> desc users;
        2》drop 删除库和删除表
            drop table [数据库名.]表名;
            drop database 数据库名;
            drop [temporary] table [if exists] tb_name [,tb_name2...];
            help drop
            help item:item是下面所示,来进一步查看帮助
                drop database
                drop event
                drop function
                drop function udf
                drop index
                drop procedure
                drop server
                drop table
                drop tablespace
                drop trigger
                drop user
                drop view
            示例:
                MariaDB [haha]> drop table haha.users ;
                MariaDB [haha]> drop database haha;
        3》alter 更改表结构
            alter table [数据库名.]表名
            help alter
            help item:item是下面所示,来进一步查看帮助
                alter database
                alter event
                alter function
                alter logfile group
                alter procedure
                alter server
                alter table
                alter tablespace
                alter view
        4》复制表
            create table tb_name2 select * from tb_name1;
            create table tb_name2 select id,user_name from tb_name1;
        5》创建临时表
            create temporary table tb_name;
        6》表重命名
            alter table tb_name_old to tb_name_new;
            rename table tb_nam_old to tb_name_new;
            help rename
            help item:item是下面所示,来进一步查看帮助
                rename table
                rename user
                
    3)DML(数据库操作语言)语句操作
        1》insert 插入新数据
            insert into 表名(字段1,字段2,....)values([调用函数]‘字段1的值‘,[调用函数]‘字段2的值‘,...);
            help insert
                insert [low_priority | delayed | high_priority] [ignore][into] tbl_name 
                [(col_name,...)] {values | value} ({expr | default},...),(...),... [ on duplicate key update col_name=expr [, col_name=expr] ... ]
                
                insert [low_priority | delayed | high_priority] [ignore][into] tbl_name 
                set col_name={expr | default}, ... [ on duplicate key update col_name=expr [, col_name=expr] ... ]
        
                insert [low_priority | high_priority] [ignore] [into] tbl_name [(col_name,...)] 
                select ... [ on duplicate key update col_name=expr[, col_name=expr] ... ]
                
            示例:
                MariaDB [auther]> insert into users(user_name,user_passwd) values(‘shen‘,password(‘1234‘));
                MariaDB [auther]> insert into users values(‘list‘,password(‘1234‘)); ##字段内容也可以省略
                MariaDB [auther]> select * from users ;
                +-----------+--------------------------------+
                | user_name | user_passwd                    |
                +-----------+--------------------------------+
                | list      | *A4B6157319038724E3560894F7F93 |
                | shen      | *A4B6157319038724E3560894F7F93 |
                +-----------+--------------------------------+
        2》update 更改原有数据
            update 表名 set 字段名1=值1[,字段2=值2] where 条件表达式;
            help update
                single-table syntax:
                    update [low_priority] [ignore] tbl_name
                        set col_name1={expr1|default} [, col_name2={expr2|default}] ...
                        [where where_condition]
                        [order by ...]
                        [limit row_count]
                
                multiple-table syntax:
                    update [low_priority] [ignore] tbl_name
                        set col_name1={expr1|default} [, col_name2={expr2|default}] ...
                        [where where_condition]
                
            示例:
                MariaDB [auther]> update auther.users set user_passwd=password(‘‘) where user_name=‘list‘;
                MariaDB [auther]> select  * from auther.users;
                +-----------+--------------------------------+
                | user_name | user_passwd                    |
                +-----------+--------------------------------+
                | list      |                                |
                | shen      | *A4B6157319038724E3560894F7F93 |
                +-----------+--------------------------------+
                MariaDB [(none)]> update mysql.user set password=password(‘xm1234‘) where user=‘root‘;  ##修改root的密码
                MariaDB [(none)]> flush privileges; ##刷新权限
        
        3》delete 删除不需要的数据
            delete from 表名 where 条件表达式;
            help delete
                single-table syntax:
                    delete [low_priority] [quick] [ignore] 
                        from tbl_name
                        [where where_condition]
                        [order by ...]
                        [limit row_count]
                multiple-table syntax:
                    delete [low_priority] [quick] [ignore] tbl_name[.*] [, tbl_name[.*]] ...
                        from table_references
                        [where where_condition]
                    delete [low_priority] [quick] [ignore]
                        from tbl_name[.*] [, tbl_name[.*]] ...
                        using table_references
                        [where where_condition]
            示例:
                MariaDB [auther]> delete from auther.users where user_name=‘list‘; 
            
    4)DQL(数据查询语言)语句操作
        select 查询语句
            select 字段名1,字段名2,....  from 表名 [where 条件表达式];
            help select
                select
                    [all | distinct | distinctrow ][high_priority][straight_join][sql_small_result] [sql_big_result] [sql_buffer_result][sql_cache | sql_no_cache] [sql_calc_found_rows]select_expr [, select_expr ...]
                    [from table_references
                    [where where_condition]
                    [group by {col_name | expr | position}[asc | desc], ... [with rollup]][having where_condition]
                    [order by {col_name | expr | position}[asc | desc], ...]
                    [limit {[offset,] row_count | row_count offset offset}][procedure procedure_name(argument_list)]
                    [into outfile ‘file_name‘ [character set charset_name] export_options|into dumpfile ‘file_name‘|into var_name [, var_name]]
                    [for update | lock in share mode]]
                    distinct:数据去重;
                    sql_cache:显式指定缓存查询语句的结果;
                    sql_no_cache:显式指定不缓存查询语句的结果;
                    query_cache_type服务器变量有三个值:
                        on:启用; 
                            sql_no_cache:不缓存;默认符合缓存条件都缓存;
                        off:关闭;
                        demand:按需缓存;
                            sql_cache:缓存;默认不缓存;
                    
            示例:
                MariaDB [auther]> select * from auther.users;
                MariaDB [auther]> select user_name from auther.users;
                MariaDB [auther]> select * from auther.users where user_name=‘shen‘;
        查询执行路径:
                请求-->查询缓存
                请求-->查询缓存-->解析器-->预处理器-->优化器-->查询执行引擎-->存储引擎-->缓存-->响应
        select语句的执行流程:
                from  --> where --> group by --> having --> order by --> select --> limit 
        字段可以使用别名 :
            col1 as alias1, col2 as alias2, ... :as有时可以省略
        
        多表查询:
            连接操作:
                交叉连接:笛卡尔乘积;
                内连接:
                    等值连接:让表之间的字段以等值的方式建立连接;
                    不等值连接:
                    自然连接
                    自连接
                外连接:
                    左外连接:
                        from tb1 left join tb2 on tb1.col = tb2.col 
                    右外连接:
                        from tb1 right join tb2 on tb1.col = tb2.col 
                        
        子查询:在查询中嵌套查询;
            
            用于where子句中的子查询;
                (1) 用于比较表达式中的子查询:子查询仅能返回单个值; 
                (2) 用于in中的子查询:子查询可以返回一个列表值; 
                (3) 用于exists中的子查询:
            用于from子句中的子查询;
                select tb_alias.col1, ... from (select clause) as tb_alias where clause; 
                
        联合查询:将多个查询语句的执行结果相合并;
            union 
                select clause union select cluase;
        
        
        
    5)条件控制(非常重要,一般不能没有控制条件)
        1》where语句
            指明过滤条件以实现“选择”功能;过滤条件:布尔型表达式;
            where where_condition
            select * from tb_name where A=b;
        2》group by 语句
            根据指定的字段把查询的结果进行“分组”以用于“聚合”运算;
            
        3》order by 语句
            根据指定的字段把查询的结果进行排序,升序asc,降序desc。
        4》having 语句
                对分组聚合后的结果进行条件过滤
                select * from tb_name group by score having count(*)>n;
        5》limit 语句
            对输出的结果进行数量限制
            [limit {[offset,] row_count | row_count offset offset}]
            limit row_count
        6》相关条件控制符
            算术操作符:+, -, *, /, %
            比较操作符:=, <>, !=, <=>, >, >=, <, <=
            区间:between min and max 
            列表:in()
            模糊比较:like(),% 为匹配任意,_  匹配一个字符
            值:is null,is not null
            逻辑操作符:and,or,not
        7》query cache:缓存查询的执行结果;
            key:查询语句的hash值; 
            value:查询语句的执行结果;
    6)mysql的函数
        1》concat():字符串连接函数
        2》数学函数
            avg()、sum()、max()、min()、count();
        3》文本处理函数
            trim()、locate()、upper()、lower()、substring();
        4》时间函数
            date()、curtime()、day()、year()、now()
    7)示例:
        建立数据库imployee_salary
            show databases;
            create database imployee_salary;
            use imployee_salary;
            create table IT_salary(岗位类别 char(20) not null,姓名 char(20) not null,年龄 int, 员工 ID int not null, 学历 char(6), 薪资 int not null,primary key (员工 ID));
            insert into IT_salary(岗位类别,类别,姓名,年龄,员工 ID,学历,年限,薪资) values(‘网络工程师‘,‘wang‘,27,011,‘本科‘,3,4800);
            select * from IT_salary;
    8)explain:
        分析查询语句的执行路径

其他常用命令

    show status :显示广泛的服务器状态信息
    status:显示当前服务器状态
    show grants:显示授权用户的安全权限
    show errors or warnings:显示服务器错误或警告信息
    select user() or current_user:显示当前连接用户
    select now() or current_timestamp:显示当前时间
    select database():显示当前数据库

mysql数据乱码的解决方法

    1)mysql数据乱码的可能原因
        服务器系统字符设置问题
        数据表语系设置问题
        客户端连接语系的问题
    2)解决方法
        1》在创建数据库时设定
            create database 库名 character set ‘utf8‘ collate ‘utf8_general_ci‘;
        2》在创建表时设定字符集
            create table tbl_name(字段 格式) default charset=utf8;
        3》使用set names 设置默认字符集
            set names utf8;  ##或者charset utf8
        4》永久修改,修改主配置文件在[mysql]字段中加入default_character_set=utf8。
            vim /etc/my.cnf
                [mysql]      ##注意,不是[mysqld],否则启动时会报错。
                default-character-set=utf8

以上是关于数据库基础操作的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程

centos 7部署并汉化Gitlab及基础操作

多线程 Thread 线程同步 synchronized

《Python学习之路 -- Python基础之切片》