约束
主键约束:
- 单字段主键: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
}
}
表结构修改
- 复制表结构
- create table 新表名 like 源表 ; --只复制表结构
- create table 新表名 select * from 源表 ; --复制表结构及数据
- 修改表结构
- alter table 表名 drop 字段名; --删除字段
- alter table 表名 add (字段1 数据类型,字段2 数据类型,..) ; --增加字段
- alter table 表名 change 旧字段名 新字段名 新数据类型; -- 修改字段名及类型
- alter table 表名 modify 字段名 新数据类型 ; --修改某个字段的数据类型
- 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编程
- 常量
- 字符串常量,如select 'hello' as coll
- 数值常量:整数常量(2018),小数常量(2.18)
- 日期时间常量:时间常量('14:30:24'),日期时间常量('2018-7-25 14:30:24')
- 布尔值:true 和false
- 二进制: 0和1,如select b'11'
- 十六进制:select X'41';
- null可用于各种字段类型
- 变量
- 系统变量(@@开头)
- 用户自定义变量:
用户会话变量(@开头):会话期间一直有效,不能跨客户机共享
局部变量
- 运算符
- 算术运算符(加减乘除,%,div),其中div是求商时取整
- 比较运算符(大于小于这些外,还有!=,is null,in,like,between .. and.. )
- 逻辑运算符(not,!,and,&&,or,||,xor)
- 位运算符(&,|,^,~,>>,<<)
- 流程语句
- 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
系统函数
- 数学函数,比如三角函数、对数函数等
- 字符串函数,比如获取字符串长度:char_length(x),加密函数:MD5(x)等
- 类型转换函数:convert(x,type) , cast(x as type) ,注意,type是有固定的,比如可以是char ,但不能是varchar
- 系统信息函数
- 获取当前服务版本号:version()
- 获取当前操作数据库:database();
- 获取当前时间、日期: current_time() ; current_date();
- 获取当前日期时间:now(); 这里需要注意一下,很多人潜意识中是date(),这是错误的
- 获取相隔天数:datediff(x1,x2), adddate(d,n); subdate(d,n);
还有其他常用函数如:Last_insert_id()、IP地址与整数转换函数(点击可查看我的另一篇博文)、uuid()等
临时表
- 存储位置
- 内容临时表
- 外存临时表
- 创建时机
- 自动创建临时表
- 手动创建临时表:create temporary table 表名...
感谢阅读~