主键 超键 候选键 外键
主 键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。
超 键:在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键。
候选键:是最小超键,即没有冗余元素的超键。
外 键:在一个表中存在的另一个表的主键称此表的外键。
数据库事务的四个特性及含义
数据库事务transanction正确执行的四个基本要素。ACID,原子性(Atomicity)、一致性(Correspondence)、隔离性(Isolation)、持久性(Durability)。
原子性:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性:在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
隔离性:隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行 相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。
持久性:在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
这几个先记着,事务处理会用到。
数据类型
数值数据类型
整型
TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT 分别使用 8, 16, 24, 32, 64 位存储空间,一般情况下越小的列越好。
INT(11) 中的数字只是规定了交互工具显示字符的个数,对于存储和计算来说是没有意义的。
浮点数
FLOAT 和 DOUBLE 为浮点类型,
DECIMAL 为高精度小数类型。
CPU 原生支持浮点运算,但是不支持 DECIMAl 类型的计算,因此 DECIMAL 的计算比浮点类型需要更高的代价。
FLOAT、DOUBLE 和 DECIMAL 都可以指定列宽,例如 DECIMAL(18, 9) 表示总共 18 位,取 9 位存储小数部分,剩下 9 位存储整数部分。
字符串
主要有 CHAR 和 VARCHAR 两种类型,一种是定长的,一种是变长的。
VARCHAR 这种变长类型能够节省空间,因为只需要存储必要的内容。
但是在执行 UPDATE 时可能会使行变得比原来长,当超出一个页所能容纳的大小时,就要执行额外的操作。
MyISAM 会将行拆成不同的片段存储,而 InnoDB 则需要分裂页来使行放进页内。
在进行存储和检索时,会保留 VARCHAR 末尾的空格,而会删除 CHAR 末尾的空格。
字符串与文本数据类型除了char与varchar,还有:
本质区别主要是blob是二进制字符串(字节字符串)
text是非二进制字符串(字符字符串)
在TEXT或BLOB列的存储或检索过程中,不存在大小写转换。日期时间数据类型
MySQL 提供了 FROM_UNIXTIME() 函数把 UNIX 时间戳转换为日期,并提供了 UNIX_TIMESTAMP() 函数把日期转换为 UNIX 时间戳。
默认情况下,如果插入时没有指定 TIMESTAMP 列的值,会将这个值设置为当前时间。
应该尽量使用 TIMESTAMP,因为它比 DATETIME 空间效率更高。
创建存储过程的一般写法
创建 存储过程 名字(out 参数1,in参数2,...)
begin
语句
end
参数:
in 输入参数,传入值
out 输出参数,返回值
inout 输入输出参数,尽量少用
实例:
--查询
CREATE PROCEDURE getUserById(IN uid VARCHAR(8))
BEGIN
SELECT id,name,partment,position FROM t_employ WHERE id=uid;
END
--插入用户
CREATE PROCEDURE insert_user(
OUT u_id INTEGER,
IN u_name VARCHAR(20),
IN u_sex VARCHAR(20),
IN u_age INTEGER)
BEGIN
INSERT INTO t_user (name,sex,age) VALUES (u_name,u_sex,u_age);
SET u_id=LAST_INSERT_ID();--??
END
Navicat中使用SQL命令
存储过程写进SQL文件时
@mysql.sql直接执行
内置函数
GREATEST() 最大值
LEAST() 最小值。
FLOOR() 获得小于一个数的最大整数值
CEILING() 获得大于一个数的最小整数值
ROUND() 获得一个数的四舍五入的整数值
TRUNCATE() 把一个数字截取为一个指定小数个数的数字
ABS() 获得一个数的绝对值
SIGN() 返回数字的符号,返回的结果是正数(1)、负数(1)或者零(0):
POW() 以一个数作为另外一个数的指数
SIN()、COS()和TAN()函数返回一个角度(弧度)的正弦、余弦和正切值
BIN()、OTC()和HEX()函数分别返回一个数的二进制、八进制和十六进制值
ASCII() 返回字符表达式最左端字符的ASCII值
CHAR() 转换为字符
LEFT | RIGHT ( str ,x ) 分别返回从字符串str左边和右边开始指定x个字符
TRIM | LTRIM | RTRIM(str) TRIM删除字符串首部和尾部的所有空格。
LTRIM和RTRIM分别删除字符串中前面的空格和尾部的空格
#类型转换函数
CAST() 进行数据类型转换,它可以把一个值转换为指定的数据类型。
#日期和时间函数
NOW() 可以获得当前的日期和时间