mysql基础

一、 创建数据库

   create database  数据库名;
   
   
二、删除数据库
   
   drop database  数据库名;
   
三、 数据类型

1、 数值类型
  1) tinyint  大小:1个字节   范围:-128~127   用途: 小整数值
  2) smallint   大小:2个字节   范围: -32768~32767  
  3) mediumint  大小:3个字节   范围: -8388608~8388607
  4) int   大小:4个字节   范围: -2147483648~2147483647
  5) bigint 大小:8个字节   范围: -9223372036854775~99223372036854775807
  6) flat  大小:4个字节  
  7) double 大小:8个字节
  8) decimal 大小: decimal(m,d) 整数位数=m-d  小数位数=d
  
  注意: 数值类型的长度限制并不是针对数字的字符长度
  
2、日期时间类型
  1) date 大小: 3个字节  范围: 0000-01-01~9999-12-31    格式: yyyy-mm-dd
  2) time 大小: 3个字节  范围: -838-59-59~838-59-59     格式: HH:mm:ss
  3) year 大小: 1个字节  范围: 1901-2155                格式: yyyy
  4) datetime  大小: 8个字节  范围: 0000-01-01 00:00:00 ~ 9999-12-31 23:59:59   格式: yyyy-mm-dd HH:mm:ss
  5) timestamp 大小: 4个字节  范围: 1970-01-01 00:00:00 ~ 2038-01-19 11:14:07   格式: yyyy-mm-dd HH:mm:ss
  
3、字符串类型
  1) char    大小:0~255个字节   定长字符串
  2) varchar  大小:0~65535个字节   变长字符串
  3) tinyblob 大小:0~255个字节    不超过255个字符的二进制字符串 不可定义范围
  4) tinytext 大小:0~255个字节    短文本字符串  不可定义范围
  5) blob     大小:0~65535个字节       二进制形式的长文本数据 不可定义范围
  6) text     大小:0~65535个字节       长文本数据 不可定义范围
  7) mediumblob 大小:0~16777215个字节   二进制形式的中等长度数据
  8) mediumtext 大小:0~16777215个字节   中等长度文本数据
  9) longblob   大小:0~4294967295  二级制的极大文本数据
  10) longtext  大小:0~4294967295  极大文本数据
  
  varchar 和 text的最大的不同是 text不可以设置默认值,不可以指定长度,不是变长字符串
  
  总结:
     经常变化的字段用 varchar
     知道固定长度的用 char
     尽量用 varchar
     超过 255 字符的只能用 varchar 或者 text
     能用 varchar 的地方不用 text
     
     
四、数据库表操作

1、创建表:  create  table  表名 (字段名 字段类型);
    
    如下:
    CREATE TABLE `invite_exchange_return_record` (
      `id` bigint(18) NOT NULL AUTO_INCREMENT,
      `order_id` varchar(64) NOT NULL COMMENT '币币订单号',
      `base_id` bigint(18) NOT NULL COMMENT '结算用户',
      `tran_id` bigint(18) NOT NULL COMMENT '交易用户',
      `return_level` tinyint(4) NOT NULL COMMENT '返佣等级 1-9',
      `return_rate` decimal(12,5) NOT NULL COMMENT '返佣系数 返佣比例',
      `return_symbol` varchar(32) NOT NULL COMMENT '返佣币种',
      `return_amount` decimal(18,8) NOT NULL COMMENT '返佣数量',
      `origin_amount` decimal(18,8) NOT NULL,
      `return_time` date DEFAULT NULL COMMENT '返佣时间',
      PRIMARY KEY (`id`),
      KEY `order_id` (`order_id`) USING BTREE,
      KEY `base_id` (`base_id`) USING BTREE,
      KEY `tran_id` (`tran_id`) USING BTREE,
      KEY `return_symbol` (`return_symbol`) USING BTREE,
      KEY `return_level` (`return_level`) USING BTREE
    ) ENGINE=InnoDB AUTO_INCREMENT=504 DEFAULT CHARSET=utf8 COMMENT='邀请返佣记录';

    
2、删除表:    drop table 表名;
3、插入数据: insert into 表名(字段名1,字段名2,字段名3)values(值1,值2,值3);
   insert into country(id,country_name,country_en_name,address)values(4,'俄罗斯','els','地球');
4、更新数据: update 表名 set 字段名=值 where 字段名=''
   update country set address='亚洲' where id = 4;
5、查询数据: select * from country where id = 3;
6、删除数据: delete from 表名 where 字段名='';
   delete  from country where id=2;

五、查询语句

1) like  模糊查询关键字  
   '%key': 模糊查询以key结尾的值、
   'key%': 模糊查询以key开头的值、
   '%key%': 模糊查询包含key的值
   例如:select * from country where address like '%亚%';
   
2) union 连接两个以上的查询结果到一个结果集合中
   select  u.id,u.user_name,u.email from `user` u union all select c.id,c.country_name,c.address from country c;
   注意:两条sql语句返回的列数必须相同,类型可以不同,
   公式: SELECT expression1, expression2, ... expression_n
            FROM tables
            [WHERE conditions]
            UNION [ALL | DISTINCT]
            SELECT expression1, expression2, ... expression_n
            FROM tables
            [WHERE conditions];
    注意 union后的 all/distinct all表示展示全部,distinct 表示去除重复的记录,此处重复的记录是所有字段都重复。
    
3) order by  排序  格式: order  by  字段名 asc/desc;
   例: select * from user  order by id  asc ;  
   asc: 表示正序排序  为缺省值
   desc:  表示倒序排序  

4) group by  分组  格式: select 字段1, function(字段2) from  表名 group by 字段名;
   例:select name,count(*) from user group by country;  查询相同国家的用户数量列表
   
5) inner join ; left join ; right join   连接表
   inner join:获取两个表中字段匹配关系的记录,没有匹配的忽略掉。
   left join:获取左边所有记录,右边记录没有匹配则空值代替
   right join:获取右边所有记录,左边记录没有匹配则空值代替
   
   例:select * from user u left  join country c on u.country_id = c.id;
   
6) null处理  
   is null: 如果值为null,则返回true
   is not null: 如果值不为null,则返回true
   <=>: 如果两个值相等,或者两个值都为null,则返回true
   例:select * from user where name is not null;
   注意: mysql中'=null' 或者 '!=null' 都不可作为查询条件,不起作用。
   
   ifnull(字段名,0): 标识如果字段为null则用0代替,否则取字段值
   
7) regexp 正则表达式  
   例: select * from user  where user_name regexp '^st'  查询所有用户名以st开头的数据
  
   
   
六、事务处理

    事务的四大特性: ACID  原子性(Atomicity),一致性(Consistency),隔离性(Isolation),持久性(Durability)
    原子性: 一个事务中所有的操作,要么全部执行,要么全部不执行性,不会停留在中间的某个环节,事务执行中产生的错误会自动回滚到事务开始前的状态。
    一致性: 在事务开始前和事务结束后,数据的完整性没有被破坏
    隔离性: 数据库允许多个事务同时对数据进行读写操作,隔离性保证不同的事务之间不会相互干扰。数据库的隔离级别有四种:读未提交,读已提交,可重复读,可串行化
             一般数据库隔离级别缺省值为:读已提交, mysql的默认隔离级别比较特殊是: 可重复读
    持久性: 事务处理结束后,对数据库的更新是永久的。
    
    begin或start transaction:  表示开启一个事务
    commit或commit work: 表示提交事务
    rollback或 rollback work: 表示回滚一个事务
    savepoint 保存点名称: 允许在事务中创建一个保存点,嵌套事务,一个事务中可以有多个savepoint
    release savepoint identifier: 删除一个事务的保存点。
    rollback to identifier: 把事务回滚到标记点。
    set transaction: 用来设置事务的隔离级别 READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE。
    set autocommit=0 禁止自动提交  =1表示开启自动提交,缺省值0
  
七、alter命令
    更新表名,或者更新字段信息是可使用alter命令
    alter table  user  drop user_name; 删除user表中user_name字段。 注意如果表中只有一个字段则不可删除
    alter table user add type varchar(40) comment '类型'; 在user表中添加字段type 类型为varchar
    alter table user add type varchar(40) null comment '类型' after id; 在user表中添加字段,指定字段位置。
    alter table user add type varchar(40) null comment '类型' first; 在user表中添加字段,字段放置在首位
    alter table user modify type varchar(64);  将user表中的type类型改成varchar(64)
    alter table user modify type varchar(64) first; | after id; 更改字段的相对位置
    alter table user change type user_type varchar(64); 将user表中的字段type名称改成user_type。
    alter table user alter type set  default '测试';将user表中的type字段的默认值该成'测试'
    alter table user alter type drop default ; 删除user表中type字段的默认值 ,没有默认值则缺省值为null
    
    alter table user rename to member; 修改表名user为member
    
    alter table user engine=myisam;  修改表user的存储引擎为myisam;
    alter table user drop foreign key country_id; 删除user表的外键country_id约束
    
八、索引
   四种索引类型
   alter table  user add primary key(id);添加主键,意味着索引必须唯一不可为空
   alter table  user add unique user_name(user_name); 添加user_name唯一索引,标识值必须唯一,但可以为空,null可以存在多个
   alter table  user add index type(type); 添加普通索引
   alter table  user add fulltext text_field(user_name,email,type,local); 添加全文索引,用于全文检索
   
   注意:索引策略有两种  btree和hash 缺省值为btree
   
   alter table user  add primary key(id) 为user表添加主键
   alter table user  drop  primary key;  删除主键
   
九、临时表操作

   创建临时表
   create temporary table test(
       id bigint(18) primary key,
       user_name varchar(64) null,
       email varchar(64) null
   );
   注意: mysql的临时表只在连接中起效,连接关闭后临时表会被自动删除。
   

十、函数相关
    ### 字符串相关函数
    select  CHAR_LENGTH('hello world') as len; ##返回hello world的长度

    select  CHARACTER_LENGTH('背景') as len; ##返回背景的长度

    select CONCAT('hello','world','china') as str; ## 拼接hello  world  china三个字符串

    select CONCAT_WS(',','张三','李四','王五'); ##拼接张三,李四,王五用','分隔

    select GROUP_CONCAT(user_name) u from user; ## 查询所有用户名用逗号分隔

    select FIELD('1','3','c','d','1') as e; ## 查询第一个'1'在后面的第几为出现。从1开始数

    select FIND_IN_SET('a','d,c,d,e,a') as c; ## 查询'a'在第二个参数中第几为出现,从1开始数

    select FORMAT(100.3146,3) as f; ## 保留100.3146后面3为小数,最后一位四舍五入

    select INSERT('hello world',1,5,'goe') as i; ## 将hello world从第一个字符开始到第五个用goe替换

    select LOCATE('w','hello world') as l; ## 查询w在hello world字符串中出现的位置

    select LEFT('hello world',4) as l; ## 截取从最左边开始四个字符

    select LOWER('HELLO WORLD') as l; ## 将字符串小写

    select LTRIM('  hello world') as l; ## 去掉字符串左边的空格

    select MID('hello world',7,5) as m; ## 截取字符串hello world,从第7为开始截取,截取5位

    select repeat('hello',4) as r; ## 将hello重复四次连接输出

    select replace('hello world','hello','go') as r; ## 将hello world中的hello用go替换

    select REVERSE('987654321') as r; ## 将数字字符串颠倒

    select RTRIM('hello world    ') as r; ## 去除字符串右边的空格

    select SPACE(10) as s; ## 返回10个空格字符串

    select strcmp('hello','hello') as s; ## 如果两个参数相同,返回0。第一个大于第二个返回1 ,小于第二个返回-1

    select SUBSTR('hello world',7,5) as s; ## 截取字符串 从第七位开始截取,截取5位

    select TRIM('  hello world  ') as t; ## 去除字符串左边和右边的空格

    select  UCASE('hello world') as u; ## 字符串大写

    select UPPER('hello world') as u; ## 字符串大写

    ### 数字函数

    select abs(-231) as a; ## 获取绝对值

    select avg(id) from user; ## 获取平均值

    select ceiling(3.4) as c; ## 返回大于3.4或者等于3.4的最小整数

    select count(0) from user; ## 获取总数

    select 10 div 2 as d; ## 10/2 取整

    select exp(2) as e;  ## 返回 e 的 x 次方

    select floor(3.6) as f; ## 返回小于或等于3.6的最大整数

    select GREATEST(32,35,646,2432,7,34) as g; ## 获取参数中的最大值

    select LEAST(24,523,53,42,3) as l; ## 获取参数中的最小值

    select max(id) from user; ## 获取表中字段的最大值

    select min(id) from user; ## 获取表中字段的最小值

    select mod(7,3) as m; ## 获取7/3的余数 等价于7%3

    select pi() as p; ## 圆周率

    select pow(3,4) as p; ##获取3的4次方

    select rand() as r; ## 获取0-1的随机小数

    select truncate(rand()*100,0) as r; ##获取0-100的随机整数

    select round(4.5) as r; ## 获取4.5的四舍五入整数

    select sign(23) as s; ## 返回参数的符号 参数大于0返回1,小于0返回-1,等于0返回0

    select sqrt(4) as s; ## 返回4的平方根

    select sum(id) from user; ## 获取表中id字段的总和

    select truncate(324.4223,1) as t; ## 返回324.4223,保留1为小数

    ### 日期函数

    select adddate('2019-12-31 12:23:42',10) as a; ## 返回10天后的时间

    select addtime('2019-12-31 12:23:42',40) as a; ## 返回40秒后的时间

    select curdate() as c; ## 返回当前日期

    select curtime() as c; ## 返回当前时间

    select date('2019-12-31') as d; ## 自定义日期

    select abs(datediff('2019-12-31','2020-01-12')) as d; ## 返回两个时间之间的间隔天数

    select subdate('2020-01-12',2) as s; ## 返回2天前的日期

    select day('2020-05-22') as d; ## 返回指定日期为当月的第几天

    select dayname('2020-01-13') as d; ## 返回指定日期为星期几

    select dayofmonth('2020-04-14') as d; ## 返回指定日期是当月的第几天

    select dayofweek('2020-01-04') as d; ## 返回指定日期是周几 周日为1

    select dayofyear('2020-06-03') as d; ## 返回指定日期是当年的第几天

    select hour('21:32:24') as h; ## 获取小时的时间

    select last_day('2020-02-01') as l; ## 获取当月的最后一天

    select now() as n; ## 获取当前日期时间

    select weekday('2020-01-06') as w; ## 获取指定日期是周几 周一为0

    ### 高级函数

    select bin(1023) as b; ## 返回10进制1023的二进制数据

    select binary('abc') as b; ## 返回指定字符串的二进制数据

    select case 
       when 1>1 then 1
       when 2>0 then 2
       when 3>0 then 3
    end as c;


    select cast('232.24' as signed) as c; ### 可转换的类型有: binary   char  date  datetime  time  decimal  signed  UNSIGNED 类型转换

    select connection_id() as c; ## 当前连接数量

    select conv(255,10,2) as c; ## 将255的10进制数据,转换成二进制返回

    select charset(convert('abc' using gbk)) as c; ## utf8格式的abc字符串转成gbk

    select current_user() as c; ## 返回当前用户

    select database() as d; ## 返回当前正在使用的数据库

    select if(1>0,'true','false') as i; ## 如果1>0 返回true,否则返回false

    select ifnull(null,'hello world') as i; ## 如果第一个参数为null,则返回默认值hello world

    select isnull(null) as i; ## 判断参数是否为null。是返回1 否则返回0

    select last_insert_id() as l; ## 返回最近一次自增的主键id

    select nullif(1,1) as n; ## 如果两个参数相同,返回空,否则返回第一个参数

    select session_user() as s; ## 获取当前session用户

    select system_user() as s; ## 获取系统用户

    select user() as u; ## 获取当前用户

    select version() as v; ## 获取mysql数据库版本  
  
  
  
  
  
  

你可能感兴趣的:(mysql)