数据库学习笔记

关于MySQL的数据类型:

在 MySQL 中,有三种主要的类型:Text(文本)、Number(数字)和 Date/Time(日期/时间)类型。

Text 类型:
数据类型 描述
CHAR(size) 保存固定长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的长度。最多 255 个字符。
VARCHAR(size) 保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。注释:如果值的长度大于 255,则被转换为 TEXT 类型。
TINYTEXT 存放最大长度为 255 个字符的字符串。
TEXT 存放最大长度为 65,535 个字符的字符串。
BLOB 用于 BLOBs(Binary Large OBjects)。存放最多 65,535 字节的数据。
MEDIUMTEXT 存放最大长度为 16,777,215 个字符的字符串。
MEDIUMBLOB 用于 BLOBs(Binary Large OBjects)。存放最多 16,777,215 字节的数据。
LONGTEXT 存放最大长度为 4,294,967,295 个字符的字符串。
LONGBLOB 用于 BLOBs (Binary Large OBjects)。存放最多 4,294,967,295 字节的数据。
ENUM(x,y,z,etc.) 允许您输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值。如果列表中不存在插入的值,则插入空值。注释:这些值是按照您输入的顺序排序的。可以按照此格式输入可能的值: ENUM('X','Y','Z')
SET 与 ENUM 类似,不同的是,SET 最多只能包含 64 个列表项且 SET 可存储一个以上的选择。
Number 类型:
数据类型 描述
TINYINT(size) 带符号-128到127 ,无符号0到255。
SMALLINT(size) 带符号范围-32768到32767,无符号0到65535, size 默认为 6。
MEDIUMINT(size) 带符号范围-8388608到8388607,无符号的范围是0到16777215。 size 默认为9
INT(size) 带符号范围-2147483648到2147483647,无符号的范围是0到4294967295。 size 默认为 11
BIGINT(size) 带符号的范围是-9223372036854775808到9223372036854775807,无符号的范围是0到18446744073709551615。size 默认为 20
FLOAT(size,d) 带有浮动小数点的小数字。在 size 参数中规定显示最大位数。在 d 参数中规定小数点右侧的最大位数。
DOUBLE(size,d) 带有浮动小数点的大数字。在 size 参数中规显示定最大位数。在 d 参数中规定小数点右侧的最大位数。
DECIMAL(size,d) 作为字符串存储的 DOUBLE 类型,允许固定的小数点。在 size 参数中规定显示最大位数。在 d 参数中规定小数点右侧的最大位数。
注意:以上的 size 代表的并不是存储在数据库中的具体的长度,如 int(4) 并不是只能存储4个长度的数字。

实际上int(size)所占多少存储空间并无任何关系。int(3)、int(4)、int(8) 在磁盘上都是占用 4 btyes 的存储空间。就是在显示给用户的方式有点不同外,int(M) 跟 int 数据类型是相同的。

例如:

1、int的值为10 (指定zerofill)

int(9)显示结果为000000010
int(3)显示结果为010
就是显示的长度不一样而已 都是占用四个字节的空间
Date类型
数据类型 说明
DATE() 日期。格式:YYYY-MM-DD 注释:支持的范围是从 '1000-01-01' 到 '9999-12-31'
DATETIME() *日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS 注释:支持的范围是从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'
TIMESTAMP() *时间戳。TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的秒数来存储。格式:YYYY-MM-DD HH:MM:SS 注释:支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC
TIME() 时间。格式:HH:MM:SS 注释:支持的范围是从 '-838:59:59' 到 '838:59:59'
YEAR() 2 位或 4 位格式的年。注释:4 位格式所允许的值:1901 到 2155。2 位格式所允许的值:70 到 69,表示从 1970 到 2069。
*即便 DATETIME 和 TIMESTAMP 返回相同的格式,它们的工作方式很不同。在 INSERT 或 UPDATE 查询中,TIMESTAMP 自动把自身设置为当前的日期和时间。TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD。
MySQL的Limit子句

  Limit子句可以被用于强制 SELECT 语句返回指定的记录数。Limit接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。

  //初始记录行的偏移量是 0(而不是 1):
  mysql> SELECT * FROM table LIMIT 5,10; //检索记录行6-15

  //为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:
  mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last

  //如果只给定一个参数,它表示返回最大的记录行数目。换句话说,LIMIT n 等价于 LIMIT 0,n:
  mysql> SELECT * FROM table LIMIT 5;     //检索前 5 个记录行

MySql使用子查询的时候要给子查询加一个别名才可以通过,不然通过不了,加一个就好了.但是in和not in的时候,子查询又不需要加别名

--查看创建数据库信息
show create database 数据库名字;
--删除数据库
drop database 数据库名字
--创建表
create table 表名 (列名一 数据类型(数据长度),列名二 数据类型(数据长度),);
--查看创建数据表信息
show create table 表名 或者describe 表名;
--修改表名
alter table 表名 rename 新表名;
--修改字段
alter table 表名 change 原字段名 新字段名 新数据类型;
--修改字段的数据类型
alter table 表名 modify 字段名 新数据类型;
--添加字段
alter table 表名 add 新字段名 新数据类型;
--删除字段
alter table 表名 drop 字段名;
注意: alter table的语句们可以通过逗号的方式合并成一句
--删除数据表
drop table 表名;
--插入数据,如果省略列名,那么需要全部列的值对应上才可以
insert into 表名(列1,列2...) values (值1,值2...);
--批量插入数据
insert into 表名(列1,列2...) values (值1,值2...),(值1,值2...),(值1,值2...)...;
--更新数据
update 表名 set 字段名1=值1 [,字段名2=值2,...] [where 条件表达式];
--删除数据
delete from 表名 where 条件表达式;
--清空数据,并把自增字段重置为1
turncate 表名;
--关于like,%表示任意0-n个字符,_表示任意一个字符
--去除重复数据
select distinct 字段名 from 表名;
--对结果进行排序(默认升序,若想要降序,请在最后加一个desc)
select 字段名 from 表名 order by 字段名;
--增加主键约束
alter table 表名 add primary key (列名);  或者在建表的时候直接指定主键,在想要的列名的数据类型后面加一个primary key即可. 或者是,在创建表的时候,括号里加一句primary key(列名);
--增加唯一约束
创建表的时候,在想要的列名的数据类型后面加一个unique即可.或者是 alter table 表名 add unique(列名);
--自动增长列
创建表的时候,在想要的列名的数据类型后面加一个auto_increment即可
--创建索引(index前加一个unique就是唯一索引)
在创建表的时候括号里加一句 index [索引名](列名);
--增加索引(index前加一个unique就是唯一索引)
create index 索引名 on 表名(列名);
--非空约束
创建表的时候,在想要的列名的数据类型后面加一个not null即可
或者是 alter table 表名 modify 列名 数据类型 not null;
--默认值约束
创建表的时候,在想要的列名的数据类型后面加一个default 默认值即可,或者见非空约束另一种方法
--添加外键约束
alter table 表名 add foreign key (外键列名) reference 主表表名(主键字段名);或者是在创建表的时候括号里加一句 foreign key (外键列名) reference 主表表名(主键字段名);
--删除外键约束
alter table 表名 drop foreign key 外键名;
--union可以合并查询结果
--内连接查询
select 查询字段 from 表1 join 表2 on 表1.列名 = 表2.列名 where 查询条件
--左外连接的话就是left join 右外连接是right join  全连接是 full join
--子查询的谓词有in,存在的意思
--any all 子查询里的所有的结果的意思
--exists 若子查询非空 外层where为真,否则为假
--子查询也可以作为一个表,但是主要要给它起一个别名.
--创建视图
create view 视图名(列名1,列名2,列名3) as select 列名1 ,列名2,列名3 from 表名
as 后面其实就是一个正常的查询.
--修改视图
alter view 视图名 as 查询;
--更新以及删除视图和更新表是一样的.
--开启事务:start transaction 提交:commit  回滚:rollback
对于空值null的判断是用is null 或者 is not null,不要用 = 号;
数据库的特性:A(原子性) C(一致性) I(隔离性) D(持续性)

脏读(读到别人未提交的数据)
不可重复读,(两次读到的数据不一样)
幻读(两次读到的条数不一样)

读未提交:脏读,不可重复读,幻读
读已提交:不可重复读,幻读
可重复读:幻读
可串行化:无



posted @ 2019-11-24 15:58  时光轻轻吹  阅读(224)  评论(0编辑  收藏  举报