原生mysql

mysql数据库练习:
展示数据库 show databases;
创建数据库 create database xxx;
删除数据库 drop database xxx;
选择数据库 use xxx;

展示数据表   show tables;
创建数据表   create table student(id int)
            create table if not exists `teacher`(
                  `id`  int unsigned auto_increment,
                 `name` varchar(32) not null,
                 `time` date ,
                 primary key(`id`)
            )engine=innodb default charset=utf8;    
删除数据表  drop table xxx;

插入数据    insert into teacher (id,name,time) values(1,'alex','2018-2-9');
查询语句    select * from  teacher
修改语句    update teacher set name='wusir' where id =1;
删除行     delete from teacher where id =2;

其他查询:
    like    select * from teacher where name like 'al%';
            模糊匹配
            '%a'     //以a结尾的数据
            'a%'     //以a开头的数据
            '%a%'    //含有a的数据
            '_a_'    //三位且中间字母是a的
            '_a'     //两位且结尾字母是a的
            'a_'     //两位且开头字母是a的
    union      用于将不同表中相同列中查询的数据展示出来(不包括重复数据)
    union all  用于将不同表中相同列中查询的数据展示出来(包括重复数据)
       使用形式如下
       SELECT 列名称 FROM 表名称 UNION SELECT 列名称 FROM 表名称 ORDER BY 列名称;
       SELECT 列名称 FROM 表名称 UNION ALL SELECT 列名称 FROM 表名称 ORDER BY 列名称;
    order by  select * from teacher order by id asc / desc ; 升序/降序
    group by  分组
    inner join / left join / right join
    A表5行数据,B表10条数据;则  A left join B 最多行数为 14行(B表中的数据全部重复对应A表的一行数据),最少行数为5行(B表和A表没有对应关系)
    null值处理 is null / is not null 
    
    case语句的查询
    推荐博客:https://blog.csdn.net/u013514928/article/details/80969949
    select case when state='1' then '成功' when state='2' then '失败' else '其他' end from student
    或者
    select state case when '1' then '成功' when '2' then '失败' else '其他' end from student;
    case语句的修改
    update student set name=case when name='a' then 'aa' when name='b' then 'bb' else 'cc' end where ...
    
    rlike 正则匹配
    事务
        原子性 一致性 隔离性 持久性
        控制语句
            begin / start transaction
            commit  / commit work
            rollback  / rollback work 
            savepoint identifiler 在事务中创建一个保存点
            release savepoint identifier 把事务回滚到标记点
            set transaction 设置事务的隔离级别,innodb存储引擎提供事务的隔离级别有read uncommitted、read commmitted、depeatable read 和serlalizable
        mysql事务处理主要有两种方法
            1,begin开始一个事务
            1,begin开始一个事务
              操作语句 for update
              rollback事务回滚
              commmit事务确认
            2,直接使用set来改变mysql的自动提交模式
              set autocommit = 0 禁止自动提交
              set autocommit = 1 开启自动提交
    alter命令,修改数据表名或修改数据表字段
        展示表的字段类型            show columns from 表名
        展示表的各种信息(引擎等)   show table status like 'course'
        增 alter table 表名 add 字段名 字段类型
        删 alter table 表名 drop 字段名
        改 alter table 表名 modify 字段名 新的字段类型
           或 alter table 表名 change 原字段名 新字段名 新字段类型
        alter table默认设置字段为空值,也可以设置默认值 在上边的语句后面加上 not null default 100
        修改字段默认值
            alter table 表名 alter 字段名 set default 默认值;
        删除字段默认值
            alter table 表名 alter 字段名 drop default
        修改表类型,如将表的类型有innodb修改为myisam
            alter table 表名 engine = myisam
        修改表名
            alter table 表名 rename to 新表名
        删除外键约束
            alter table 表名 drop foreign key keyName(keyName是外键别名)
        修改字段的相对位置(这里name1为想要修改的字段,type1为该字段原来类型,first和after二选一,这应该显而易见,first放在第一位,after放在name2字段后面)
            alter table 表名 modify name1 type1 first|after name2;
            
        还可以用来创建及删除mysql数据表的索引
        
    触发器 基于行触发
        创建触发器
            CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW trigger_stmt
            trigger_name:触发器的名称
            tirgger_time:触发时机,为BEFORE或者AFTER
            trigger_event:触发事件,为INSERT、DELETE或者UPDATE
            tb_name:表示建立触发器的表明,就是在哪张表上建立触发器
            trigger_stmt:触发器的程序体,可以是一条SQL语句或者是用BEGIN和END包含的多条语句
            六种触发器
                BEFORE INSERT,BEFORE DELETE,BEFORE UPDATE
                AFTER INSERT,AFTER DELETE,AFTER UPDATE
            创建多个执行语句的触发器
                CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件
                ON 表名 FOR EACH ROW
                BEGIN
                    执行语句列表
                END
            一般情况下,mysql默认是以 ; 作为结束执行语句,与触发器中需要的分行起冲突

   为解决此问题可用DELIMITER,如:DELIMITER ||,可以将结束符号变成||
   当触发器创建完成后,可以用DELIMITER ;来将结束符号变成;

            在BEGIN...END语句中也可以定义变量,但是只能在BEGIN...END内部使用:
            DECLARE var_name var_type [DEFAULT value] #定义变量,可指定默认值
            SET var_name = value  #给变量赋值
            
            数据
                NEW.columnname:新增行的某列数据
                OLD.columnname:删除行的某列数据
                
            示例
                user表
                    CREATE TABLE `users` (
                      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
                      `name` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,
                      `add_time` int(11) DEFAULT NULL,
                      PRIMARY KEY (`id`),
                      KEY `name` (`name`(250)) USING BTREE
                    );
                logs表
                    CREATE TABLE `logs` (
                    `Id` int(11) NOT NULL AUTO_INCREMENT,
                    `log` varchar(255) DEFAULT NULL COMMENT '日志说明',
                    PRIMARY KEY (`Id`)
                    );
                创建触发器   
                    DELIMITER $
                    CREATE TRIGGER user_log AFTER INSERT ON users FOR EACH ROW
                    BEGIN
                    DECLARE s1 VARCHAR(40)character set utf8;
                    DECLARE s2 VARCHAR(20) character set utf8;#后面发现中文字符编码出现乱码,这里设置字符集
                    SET s2 = " is created";
                    SET s1 = CONCAT(NEW.name,s2);     #函数CONCAT可以将字符串连接
                    INSERT INTO logs(log) values(s1);
                    END $
                    DELIMITER ;
                然后就可以发现当我们在user表中插入新值后,log表就会增加相应字段,如插入 user.name = aaa,则log.log = aaa is created
            
            


    函数
        定义变量(推荐博客:https://www.cnblogs.com/EasonJim/p/7966918.html)
        1,在set 或select直接赋值,变量名以@开头
            例如 set @var = 1; (注意select中要使用 :=)
        2,以declare关键字声明的变量,只能在存储过程中使用,称为存储过程变量
            例如 declare var1 int default 0;
        菜鸟教程地址:http://www.runoob.com/mysql/mysql-functions.html
        字符串相关
            ascii char_length charaacter_length concat concat_WS field  find_in_set  format  insert locate lcase left locate lower lpad ltrim mid  ....
            可以使用 select char_length('abc') as 长度 ,这样的查询形式来输出函数结果
            set @s="runoob";
            select char_length(@s) as 测试;
        数字相关
            abs acos asin atan atan2 avg ceil ceiling cos cot count degrees div exp greatest least  max ...
        日期相关
            adddate addtime courdate current_date current_time date day 
        高级函数
            bin binary    case when  then when then end   cast  coalesce connection_id conv convert 
    运算符
        算术运算符
            + - * / %  select 1+2
        比较运算符
            = <> != > <   between  not between in  not in <=> like rlike is null  is not null   
        逻辑运算符
            not ! and or xor(异或)
        位运算符
            &(按位与) |(按位或) ^(按位异或) !(取反) <<左移 >>右移
        运算符优先级
            由低到高
            :=
            || or xor
            && and
            not
            between case when then else
            = <=> >= > <= < <> != IS like regexp in
            |
            &
            << >>
            - +
            * / div % mod
            ^
            -(一元减号)  ~(一元比特反转)
            ! binary collate


数据类型
    数值
    https://blog.csdn.net/shenziheng1/article/details/79471340
        类型          大小      范围(有符号)             范围(无符号)   用途
        tinyint         1字节      (-128,127)             (0,255)         小整数值
        smallint        2字节      (-32768,32767)         (0,65535)       大整数值
        mediumint       3字节      (-8388608,8388607)     (0,16777215)    大整数值
        int或integer     4字节      以此类推,2的32次方                        大整数值
        bigint          8字节      以此类推,2的64次方                        极大整数值
        float           4字节(指数位8位,尾数位有23位,符号位1位)-2^128 ~ +2^128 单精度/浮点数值
        double          8字节(指数位11位,尾数位有52位,符号位1位)-2^1024 ~ +2^1024  双精度/浮点数值
        decimal  对decimal(M,D),如果M>D,为M+2否则为D+2                     小数值
    字符串类型
        char           0-255字节     定长字符串
        varchar        0-65535字节       变长字符串
        tinyblob       0-255字节     不超过255个字符的二进制字符串
        tinytext       0-255字节     短文本字符串
        blob           0-65535字节       二进制形式的长文本数据
        text           0-65535字节       长文本数据
        mediumblob     0-16777215字节 二进制形式的中等长度文本数据
        mediumtext     0-16777215字节 中等长度文本数据
        longblob       0-4294967295字节    二进制形式的极大文本数据
        longtext       0-4294967295字节    极大文本数据
        
    日期和时间类型
        类型          大小(字节)      范围                格式                用途
        database        3       1000-01-01/9999-12-31       YYYY-MM-DD          日期值
        time            3       '-838:59:59'/'838:59:59'    HH:MM:SS            时间值或持续时间
        year            1       1901/2155                   YYYY-MM-DD          年份值
        datatime        8       1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS  混合日期和时间值
        timestamp       4       1970-01-01 00:00:00/2038    YYYYMMDDHHMMSS      混合日期和时间值,时间戳
        

时间相关函数:https://www.cnblogs.com/ggjucheng/p/3352280.html
查询2011的数据:select * from 表 where year(date)='2011';
查找月份为12的数据:select * from 表 where month(date)='12';
查找天数为本年第二天的数据:select * from 表 where dayofyear(date)='2';
select * from 表 where 这是必须的
year,month,dayofyear是mysql的函数,分别是取得年,月,和当前时间在本年是第几天的3个函数
date就是你保存时间的字段

猜你喜欢

转载自www.cnblogs.com/perfey/p/10432844.html