文档章节

mysql基本语法及使用

d
 doudou___9958
发布于 2016/11/09 22:28
字数 3331
阅读 8
收藏 0

环境:centos6.8

软件:mysaql 5.6.20

1.mysql交互式基本指令
            ;mysql交互式默认的语句结束符,
            如果没有结束会出现‘->’这个符号来告知你语句没有结束
            show databases;查看有那些数据库存在
            use db_name;选择使用那个数据库
            show tables;查看db_name下的表有那些
            ?,\?,help:查看帮助信息
            \q,quit推出mysql交换环境
            \c;提前结束语句,如果前面有分号的将提前结束失败
            \d,设置语句结束符
            \G,显示方式设置
            \.,source 执行sql脚本
            \s,查看mysql系统相关信息

            存储引擎:
                非事务:
                    MyISAM
                    对于读性能有要求,中小型企业使用
                事务:
                    innodb
                    默认所有表共享一个表空间
                    innodb_file_per_table| ON 最好把新建一个表就分配一个表空间的功能打开
                    事务提交:
                        commit
                    事务回滚:
                        rollback
                具体选择需要根据业务情况决定
                存储引擎是针对于表来说的

                mysql> show variables like '%eng%';查看系统默认存储引擎
                mysql> show variables like '%innodb%';查看innodb参数
                mysql> show table status like 'user'\G;查看表的属性
                mysql> desc user;查看表结构
                mysql> set global innodb_file_per_table=1 设置变量的开启或关闭情况

                DBA:
                    开发DBA:
                        数据库设计,sql语句,存储过程,触发器
                    管理DBA:
                        安装,升级,备份,恢复,用户管理,权限管理,监控,性能分析,基准测试

                    数据类型:
                        数值型:
                            int
                            decimal
                            float,double,real
                        字符型:
                            char
                            varchar
                            text
                            blob
                        时间类型:
                            date
                            time
                            datetime
                    字符集:
                            utf8国际标准,对于有国外信息的存储的时候可以使用
                            gbk中国标准

                            mysql> show character set;查看mysql支持的字符集和排序规则
                            mysql> show collation;查看排序规则

 


                    查看当前选择了什么数据库
                        mysql> select database();
                        +------------+
                        | database() |
                        +------------+
                        | uplooking  |
                        +------------+
                        1 row in set (0.00 sec)
                    查看最后一条insert语句的id
                    mysql> select last_insert_id();
                    +------------------+
                    | last_insert_id() |
                    +------------------+
                    |                0 |
                    +------------------+
                    1 row in set (0.00 sec)

                SQL:
                    DML:数据修改语句
                        update
                        insert
                        delete
                        select
                    DDL:数据定义语句
                        create:
                            创建数据库
                            CREATE DATABASE db_name;
                            CREATE DATABASE db_name CHARACTER SET [=] charset_name COLLATE [=] collation_name;
                            创建表
                            CREATE TABLE up01(id int not null  primary key,name varchar(20));创建表并自定义表的字段(结构)
                            CREATE TABLE up02 select * from up01;创建表,并把up01的数据也一并复制到新表当中,但是表的属性复制可能会有遗漏(key键遗漏);
                            CREATE TABLE up03 like up01;创建新表,并把up01的表的属性也一并复制过来,但是数据不会进行复制
                            engine = Myisam|innodb 创建表的时候可以选择存储引擎
                            auto_increment创建字段的时候可以使用自动增长规则(字段必须primary key(非空唯一字段))
                            SHOW CREATE DATABASE   db_name打印创建数据库的指令
                            SHOW CREATE TABLE table_name 打印创建表的指令
                        alter:修改表属性
                            alter database db_name character set gbk collate gbk_chinese_ci;修改数据库的字符集(gbk)和排序规则(gbk_chinese_ci)
                            alter table up06 add(age int);给表添加一个字段
                            alter table up06 change age age2 varchar(20);修改表字段的名字和属性
                            alter table up06 modify age int(16);修改表字段的属性
                            alter table up06 drop age;删除表的字段
                            alter table up06 rename up111;给表重命名
                        drop:删除
                            drop database db_name删除数据库
                            drop table table_name删除表

2.mysql安装总结:
            源码
                需要依赖cmake的指令
                cmake . 编译参数
                make
                make install
                cd $MYSQL_BASE
                scripts/mysql_install_db --user=mysql --datadir=path
                cp support-files/my-default.cnf /etc/my.cnf
                cp support-files/mysql.server /etc/init.d/mysqld56
                chkconfig --add mysqld56
                chkconfig --list mysqld56
                service mysqld56 start


            rpm
                下载rpm包直接使用rpm进行安装
                注意:rpm包安装的话会默认生成一个root用户的随机密码,在~/.mysql_secret文件中

            修改root用户密码
                源码:mysqladmin -uroot password 'new_pass'
                mysql交互式中:update user set Password=password('new_pass') where User='root'
                rpm:由于默认有一个随机密码所以使用mysqladmin的时候需要加上密码
                mysqladmin -uroot -pxxxxxx password 'new_pass'
                他无法在修改密码之前在mysql交互环境中使用update指令
mysql存储引擎:
            Myisam:非事务
            innodb:事务

mysql客户端链接指令
    mysql
    mysql -uroot -p
    mysql -uroot -pxxxx
    mysql -uroot -pxxxxx -h host
    mysql -uroot -pxxxxx -h host -D db_name -P port
    设置了用户的密码但是在使用mysql链接的时候又不想输入密码
    在家目录下创建.my.cnf的文件
    vim ~/.my.cnf
    [client]
    user=root
    password=123456
    host=127.0.0.1

mysql交互基本指令
    \?,?,help获取帮助
    \c提前结束语句
    \d设置语句结束符
    \G对查询结果进行显示设置
    \s查看mysql服务器状态信息
    \q推出mysql交互环境
    \#,rehash可以补全指令,但是不推荐使用,消耗不必要的资源
    \!执行shell命令
    show databases;查看数据库
    show tables;查看表
    show variables like '%eng%' 查看存储引擎
    show variables like '%innodb%'查看innodb参数
    show character set查看mysql支持的字符集
    show collation查看mysql支持的排序规则的

sql DDL语句
    create database db_name #创建数据库
    create database db_name character set utf8 collate utf8_generic_ci #创建数据库并设置字符集为utf8 设置排序规则为utf8_generic_ci 。

    create table tb_name(col_name col_type col_CONSTRAINT) #创建表并设置相关条件
    create table test(id int not null unique primary key auto_increment,name varchar(20))  创建Test表并设置表格的id号 数值型为int,非空的 键值为key 内性为varchar(20)如下图:


    create table test1(id int,name varchar(20)) engine Myisam #创建表设置参数并选择引擎为:Myisam

    create table tb_name2 select * from tb_name1   #创建tb_name2  像tb_name1  那样,注意复制时表属性会有遗失。
    create table tb_name3 like tb_name1#创建tb_name2  像tb_name1  那样 说白了就是复制tb_name1表格属性但是tb_name1内的数据是不会复制过来的。

    create index index_name on table_name(col)  #创建索引

    alter database tb_name character set gbk collate gbk_chinese_ci #修改表的字符集和排序规则。
    alter table tb_name add col_name col_type  #给表添加一个字段
    alter table tb_name change old_col_name new_col_name col_type #修改表字段的名字和属性
    alter table tb_name modify col_name col_type #修改表字段的属性
    alter table tb_name rename new_tb_name #给表重命名
    alter table tb_name drop col_name  #删除表的字段

    drop database db_name # 删除数据库
    drop table tb_name  #删除表


变量:
    全局变量show global variables
    会话变量show [session] variables

DML:
    select
    select * from tb_emp;查询表中所有的字段和记录
    select empno,ename,deptno from tb_emp;查询表中特定字段的所有记录
    select empno,ename,deptno from tb_emp limit 3显示前三条查询记录
    select empno,ename,deptno from tb_emp limit 2,3;跳到第二条记录之后,然后显示三条
    select distinct(job) from tb_emp;去重
    select * from tb_emp where sal >= 3000;按照条件查询记录
    where col (<|>|<=|>=|=|!=)
    
    select * from tb_emp where sal >= 3000 or deptno=30;   #or: 满足一个条件
    where (and|or|not)
    

    select * from tb_emp where sal between 2000 and 3000; #and:满足2个条件才行
    where between.....and....


     select ename from tb_emp where ename like '%a%';表示包含至少一个字母是a的
     select ename from tb_emp where ename like 'a_';表示两个长度以a打头
     where col_name like (%|_)

     select ename from tb_emp where ename rlike '.*a.*';
     也支持正则


    select ename from tb_emp where ename in ('eddy','peter'); 只搜索'eddy','peter'。
    select ename from tb_emp where ename not in ('eddy','peter');
    where col_name (in|not in) (内容范围)

    where col_name is null|is not null

    排序
        select * from tb_emp order by empno asc;升序mysql默认的
        select * from tb_emp order by empno desc;降序


    聚合
        select sal from tb_emp group by sal;
        过滤
        select sal from tb_emp group by sal having sal > 2000;
        使用having对聚合之后记录进行过滤
    函数:
        avg(),distinct(),sum(),max(),min(),abs(),count()
        lower(),upper(),length()


    连接:
        交叉连接,也叫笛卡尔积
        连接的作用:更丰富的显示查询记录
        自然连接,内连接
            查询相同字段的具有相同值记录
        select * from tb_name1,tb_name2 where tb_name1.deptno = tb_name2.deptno

        外连接:
            左外连接
                left...join...on
                select e.ename,d.dname from tb_emp as e left join tb_dept as d on e.deptno=d.deptno;
            右外连接
                right..join...on
                select e.ename,d.dname from tb_emp as e right join tb_dept as d on e.deptno=d.deptno;
            左和右:写在前面的表就是左表,写在后面的就是右表
                    左外连接:就是以左表为标准,只要左表存在的记录都要显示出来,右表类似

        子查询:
            select * from tb_emp where sal = (select sal from tb_emp sal=1000)
            select * from tb_emp where sal in (select sal from tb_emp sal >1000)
        
        联合查询:
            select clo1,col2 from tb_name1 union select col1,col2 from tb_name2
                注意:联合的两边字段数要一样,最好具有相同意义


        insert
            insert into up01(id,name) values (1,'name');
            insert into up01 values (2,'name');
            insert into up01(name) values ('name');
            insert into up01 set id=4,name='name';
            insert into up01 select empno,ename from tb_emp;

            insert into up select * from up01

            有大量数据查询的时候要记住加上索引(字段值唯一,最好选择有数值)
            解析sql语句
            explain(SQL语句)

        delete
            delete from tb_emp;删除表中的所有记录
            delete from tb_emp where condition


        truncate
            truncate table_name清空整张表,并把相应计数器也清空

        update
            update up01 set name='linux1';更新表中字段为name的值都为linux1
            update up01 set name='linux1' where id=1;更新表中字段为name的且id=1的记录为linux1
        
        注意:以上delete,update,truncate使用的时候一定要注意加上限制条件,除非你明确知道这个表所全表清空

        视图:
            create view
                create view view_name as select SQL
                用来做select语句的缓存表也叫虚表
            drop view view_name
            drop view sct

        隔离:
            并发控制
            多个回话去修改数据库中的数据的时候,那一个回话是最终生效的这需要数据库提供并发解决方案
            从行为上分析:
                读锁:
                    共享锁
                写锁:
                    独占锁|排他锁
            从颗粒度上分析:
                表级锁:mysql当中默认的锁机制(Myisam)
                行级锁:需要存储引擎支持(innodb)
            
            存储引擎:
                mysql默认存储引擎:myisam
                    不支持事务
                    表锁
                innodb:
                    支持事务
                    行锁

                手动锁表
                    lock tables tb_name lock_type(read|write)
                手动解锁
                    unlock tables 会解除数据库中所有锁住的表

                隔离级别:
                    RDBMS:都应支持事务型,必须要满足acid要求测试
                    ACID:
                        原子性:事务所引起的数据库操作要么全部执行,要么全部都不执行
                        一致性:总的和一样A:2000 B:3000====>b-1000-->a a+b=5000
                        隔离性:靠数据库本身的事务调度来实现
                        持久性:服务器出现故障当机等情况放生,重启服务器之后,数据库中的数据也不会丢失

                    事务日志:
                        重做日志:redo log
                        撤销日志:undo log
                        有一个事务正在做删除操作,其实实际存储的数据并没有被真实删除而只是在事务日志中标记了,当事务提交之后在进行实际数据的删除操作

                    隔离级别
                        1.read uncommitted读未提交
                        2.read committed 读提交
                        3.repeatable read 可重读 mysql默认的隔离级别
                        4.seriableizable 可串行
                        1--->4隔离级别逐次提高
                        级别越高性能越差
                    查看隔离级别:
                        show variables like '%iso%';
                    设置隔离级别:
                        set tx_isolation='read-uncommitted'
                        set tx_isolation='read-committed'
                        set tx_isolation='repeatable-read'
                        set tx_isolation='serializable'


                    事务开始:
                                start transaction
                                    SQL
                    事务结束    commit 提交事务
                                rollback 回滚事务

                    savepoint  #在实际工作中在对数据库进行操作时候必须建立一个食物开始这样的好处是给每一条记录创建一个savepoint (保存点) 防止在操作中出现错误,可以利用rollback回滚到某一个事物存点,防止例误操作。
                      步骤:1。  start transaction;
                                  2.  savepoint a1
                                        insert1 ....

                                        savepoint a2
                                        insert2 ....
                                        savepoint a3
                                rollback to a2 回滚到inser1后的数据
                                rollback to a1 回滚到未插入数据的时候
                    autocommit(自动提交)
                        show variables like '%autocommit%'
                        set autocommit=0|OFF

                    建议实际工作当中关闭自动提交功能
                    明确指明开始事务

                    创建用户和授权
                   参照官网学习: http://dev.mysql.com/doc/refman/5.6/en/grant.html
                    create user eddy@'%' identified by '123456'
                    flush privileges手动刷新授权表
                    创建用户之后自带USEAGE权限只能连接不能创建库或表等其他操作

                    grant all privileges on db.* to user@'%'
                    授权给一个用户所有的权限

                    grant execute on function db.abc@ user@'%'
                    授权给一个用户在db库中abc这个函数拥有执行权限

                    show grants for user@'host'
                    查看用户具体授权信息

                    grant insert,select on db.* to eddy@'%'
                    授权db下所有表的插入,查询权限给一个用户
                    gratn alter on db.* to eddy@'%'
                    授权db下所有表的修改表属性权限给一个用户
                    grant update(age) on db.abc to edd@'%'
                    授权db下abc表的age字段的更新权限给一个用户

                    grant super on *.* to eddy@'%'
                    授权CHANGE MASTER TO, KILL, PURGE BINARY LOGS, SET GLOBAL,

                    with grant option可以给授权人授予权限
                    一般不是用,也不建议使用特别生产环境

                    使用技巧
                    创建用户和授权在一条语句中搞定
                    grant all on *.* to eddy@'%' identified by '123456';

                    dorp user username@'%'

                    重命名用户和主机
                    rename user old new
                    rename user up02@'%' to up03@'127.0.0.1';
                    
                    回收权限
                    revoke select on db.* from user@'%'
                    revoke update(age) on up01.up02 from up03@'127.0.0.1';
                    revoke all privileges on *.* from up03@'127.0.0.1';


             忘记root密码解决方法:

                源码安装时可以在/usr/local/mysql/my.cnf或者 /etc/my.cnf增加如下内容:                  

                    --skip-grant-tables
                    --skip-networking

                传哦能

注意:授权之后最好让会话重新链接一次以便让权限生效


                    图形化工具:
                        navicat for mysql
                        mysql-workbench
                        主要有SQL语法高亮,关键字补全,语法帮助,快速备份,快速恢复。。。。。。。。

 

© 著作权归作者所有

共有 人打赏支持
d
粉丝 4
博文 44
码字总数 54288
作品 0
成都
私信 提问
2、关于数据库的基本操作

一、概述 第一章内容介绍了,MySQL数据库的基本结构组成和SQL语言的组成部分,本章内容将从一些基本操作命令和MySQL数据库自带的库以及新建的库进行一些基本操作的使用说明。 二、MySQL数据库...

CARYFLASH
2017/11/14
0
0
九、MySQL存储过程和函数

存储过程就是一条或者多条SQL语句的集合,可视为批文件,但是其作用不仅限于批处理。 9.1、创建存储过程和函数 存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别是...

运维菜鸟丶
2017/08/04
0
0
史上最简单的 MySQL 教程(四十)「数据库变量」

变量 在 MySQL 数据库中,变量有两种,分别为:系统变量和自定义变量。 根据变量的作用范围,又分为: 会话级别变量:仅对当前客户端当次连接有效; 全局级别变量:对所有客户端的任一次连接...

qq_35246620
2017/12/03
0
0
MySQL数据库高级(二)——自定义函数

MySQL数据库高级(二)——自定义函数 一、自定义函数简介 自定义函数 (user-defined function UDF)是一种对MySQL扩展的途径,其用法和内置函数相同。 自定义函数的两个必要条件: A、参数 ...

642960662
2018/04/02
0
0
跟王老师学MySQL: 基本查询语句

跟王老师学MySQL: 基本查询语句 主讲教师:王少华 QQ群号:483773664 学习内容 查询语句的基本语法 查询数据指从数据库中获取所需要的数据。MySQL中是使用SELECT语句来查询数据的 一、selec...

imentors
2016/07/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

LTS

长期技术支持 Long-Term Support,长期技术支持(版本)。Ubuntu Long Term Support:Ubuntu 长期技术支持版(三年),一般的版本支持为18个月。注意,这里的T是term而不是time。Ubuntu的母公...

嘿嘿嘿IT
13分钟前
1
0
SpringSecurity的基本原理

SpringSecurity的基本原理

chendom
13分钟前
1
0
完美解决tomcat启动速度相当慢 快死的状态了

先粘一下日志 ---- Started Application in 3319.145 seconds (JVM running for 3324.59) 3319.145 seconds 多么感人的时间,快一个小时了 重新编译神马的操作根本没有效果,最后看了一下断点...

jaffreyen
22分钟前
3
0
C/C++可变参数,“## __VA_ARGS__”宏的介绍和使用

下面是C99的方法: 1 #define dgbmsg(fmt,...) printf(fmt,__VA_ARGS__) 代码 #include <stdarg.h>#include <stdio.h>#define LOGSTRINGS(fm, ...) printf(fm,__VA_ARGS__) int main(......

青春无极限
28分钟前
0
0
es6默认参数

es5 要实现默认参数,一般是 在大括号里 写, function calc(x, y) { x = x || 0; y = y || 0; // to do with x, y // return x/y} es6后,直接用语言本身来处理, 写...

东东笔记
31分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部