MySQL数据库总结(二)

约束

主键约束:

  • 单字段主键:student_no char(11) primary key;
  • 多字段主键:primary key(字段1,字段2...)  ---联合主键,确保唯一性

自增:

  • auto_increment

主键生成策略

  • 主键自增
  • 使用UUID
  • 时间戳
  • ....

主键选择自增好还是UUID好?

使用自增长做主键的优点:
1、很小的数据存储空间
2、性能最好
3、容易记忆
使用自增长做主键的缺点:
1、如果存在大量的数据,可能会超出自增长的取值范围
2、很难(并不是不能)处理分布式存储的数据表,尤其是需要合并表的情况下
3、安全性低,因为是有规律的,容易被非法获取数据
使用UUID做主键的优点:
1、它是独一无二的,出现重复的机会少
2、适合大量数据中的插入和更新操作,尤其是在高并发和分布式环境下
3、跨服务器数据合并非常方便
4、安全性较高
使用UUID做主键的缺点:
1、存储空间大(16 byte),因此它将会占用更多的磁盘空间
2、会降低性能
3、很难记忆

拓:UUID生成系统主键

package test;

import java.util.UUID;
/**
 * 使用uuid自动生成主键
 * @author Legend
 * 2018年7月24日
 */
public class TestUUID {
	 public static void main(String[] args) {
	        UUID uuid = UUID.randomUUID();
	        System.out.println(uuid);//e7375574-d87f-43b0-93f5-5915d58d960f
	        String dxmbid = uuid.toString().replaceAll("-", "");
	        System.out.println(dxmbid);//e7375574d87f43b093f55915d58d960f
	        System.out.println(dxmbid.length());//32
	    }
}

表结构修改

  • 复制表结构
  1. create table 新表名 like 源表 ;  --只复制表结构
  2. create table 新表名 select * from 源表  ;  --复制表结构及数据
  • 修改表结构
  1. alter table 表名 drop 字段名; --删除字段
  2. alter table 表名 add (字段1 数据类型,字段2 数据类型,..) ;  --增加字段
  3. alter table 表名 change 旧字段名 新字段名 新数据类型;  -- 修改字段名及类型
  4. alter table 表名 modify 字段名 新数据类型 ;  --修改某个字段的数据类型
  5. alter table 旧表名 to 新表名 ;  --修改表名

索引

参考网址:https://blog.csdn.net/w_xuexi666/article/details/53897007

缺点:占用空间,维护成本高(增删改查)

原则:

  • 放在where后效率最高,也可以放在select后;
  • 离散性高的列;
  • 模糊查询时候最好交给搜索引擎

注意:

  • 使用索引时,SQL语句中的条件前面不能有%,正确如 :where  a like 'xxx%';
  • 主键创建是自动创建索引;

表数据增删改查操作命令

这个相对比较基础就不详细讲,可以参考一下:https://blog.csdn.net/wxw20147854/article/details/55549296

限制记录行数

  • Distinct:过滤重复记录,放在select后面
  • Limit: select 字段列表 from 表名 limit [start,]length;

Sql编程

  • 常量
  1. 字符串常量,如select 'hello' as coll
  2. 数值常量:整数常量(2018),小数常量(2.18)
  3. 日期时间常量:时间常量('14:30:24'),日期时间常量('2018-7-25  14:30:24')
  4. 布尔值:true 和false
  5. 二进制: 0和1,如select b'11'
  6. 十六进制:select X'41';
  7. null可用于各种字段类型
  • 变量
  1. 系统变量(@@开头)
  2. 用户自定义变量:

           用户会话变量(@开头):会话期间一直有效,不能跨客户机共享

            局部变量

  • 运算符
  1. 算术运算符(加减乘除,%,div),其中div是求商时取整
  2. 比较运算符(大于小于这些外,还有!=,is null,in,like,between .. and.. )
  3. 逻辑运算符(not,!,and,&&,or,||,xor)
  4. 位运算符(&,|,^,~,>>,<<)
  • 流程语句
  1. Begin--end
declare @r int ,@s int ,@t int

select @r=2,@s=3

 print @r

while @r <5

 begin

     select @t=100*@r+@s

     print @t

     select @r=@r+2

    Select @s=1

end

系统函数

  1. 数学函数,比如三角函数、对数函数等
  2. 字符串函数,比如获取字符串长度:char_length(x),加密函数:MD5(x)等
  3. 类型转换函数:convert(x,type)  ,  cast(x as type) ,注意,type是有固定的,比如可以是char ,但不能是varchar
  4. 系统信息函数
  • 获取当前服务版本号:version()
  • 获取当前操作数据库:database();
  • 获取当前时间、日期: current_time() ; current_date();
  • 获取当前日期时间:now(); 这里需要注意一下,很多人潜意识中是date(),这是错误的
  • 获取相隔天数:datediff(x1,x2), adddate(d,n); subdate(d,n);

还有其他常用函数如:Last_insert_id()、IP地址与整数转换函数(点击可查看我的另一篇博文)、uuid()等

临时表

  • 存储位置
  1. 内容临时表
  2. 外存临时表
  • 创建时机
  1. 自动创建临时表
  2. 手动创建临时表:create temporary table 表名...

感谢阅读~

猜你喜欢

转载自blog.csdn.net/weixin_37704921/article/details/81194238