当前位置:   article > 正文

[数据库]-数据类型与常见约束

短文本数据类型只有什么格式

数据类型

整型

  1. # 常见数据类型
  2. /*
  3. 数值型:
  4. 整型
  5. 小数:
  6. 定点数
  7. 浮点数
  8. 字符型:
  9. 较短文本:CHAR,VARCHAR
  10. 较长文本:TEXT,BLOB(较长的二进制数据)
  11. 日期型:
  12. */
  13. # 一,整型
  14. /*
  15. 分类:
  16. TINYINT,SMALLINT,MEDIUMINT,INT/INTEGER,BIGINT
  17. 字节数从左至右以此增大,分别是1,2,3,4,8字节
  18. 特点:
  19. 1. 不设置无符号类型,默认采用有符号类型。如果想设置无符号类型,需要添加UNSIGNED关键字
  20. 2. 如果插入数值超出范围会报out of range 异常,并且插入临界值
  21. 3. 如果不设置长度,会添加默认长度
  22. 4. 注意,这里设置的长度只是显示的长度,文本实际占用字节数并没有改变
  23. 仍然是按照规定大小创建,设置了长度后,如果输入内容超出长度限制,内容没有变化
  24. ,如果长度不足,剩余位数会用0填充
  25. 5. 即使用0填充后,输出内容我们直接也是看不到0的,想要看到0作为填充位,需要使用
  26. ZEROFILL关键字,并且这个关键字会默认设置整型为无符号整型
  27. */
  28. # 1. 如何设置无符号和有符号
  29. DROP TABLE IF EXISTS tab_int;
  30. CREATE TABLE tab_int(
  31. t1 INT,
  32. t2 INT UNSIGNED,
  33. t3 INT(8),
  34. t4 INT(5) ZEROFILL
  35. );
  36. INSERT INTO tab_int VALUES(-15498,45454,-445,123);
  37. DESC tab_int;
  38. SELECT* FROM tab_int;
  39. # 二,小数
  40. /*
  41. 类型:
  42. 浮点数类型:
  43. FLOAT(M,D) 4byte
  44. DOUBLE(M,D) 8byte
  45. 定点数类型:
  46. DEC(M,D)/DECIMAL(M,D) (M+2)byte
  47. (最大取值范围和DOUBLE相同,给定decimal的有效值范围
  48. 由M和D决定,精确度较高与DOUBLE)
  49. 特点:
  50. 1. M表示的是小数点和整数位数的和,小数为是2,所以整数位最多只能是3,所以超过后用最大值999.99代替
  51. 2. D表示的含义就是小数点保留位数,不足会自动补全,超出会四舍五入
  52. 3. M和D都可以省略
  53. 省略M和D后,DECIMAL默认填充(10,0)
  54. FLOAT和DOUBLE会根据插入数据自动调整
  55. 4. 定点型精确度较高,如果插入数据要求较高精确度例如:货币运算可以采用
  56. */
  57. DROP TABLE IF EXISTS tab_float;
  58. CREATE TABLE tab_float(
  59. f1 FLOAT(5,2),
  60. f2 DOUBLE(5,2),
  61. f3 DECIMAL(5,2)
  62. );
  63. INSERT INTO tab_float VALUES(123.45,123.45,123.45); # 能够正常插入
  64. INSERT INTO tab_float VALUES(123.4,123.4,123.4); # D表示的含义就是小数点保留位数,不足会自动补全,超出会四舍五入
  65. INSERT INTO tab_float VALUES(123.456,123.456,123.456);
  66. INSERT INTO tab_float VALUES(1234.45,1234.45,1234.45);
  67. # M表示的是小数点和整数位数的和,小数为是2,所以整数位最多只能是3,所以超过后用最大值999.99代替
  68. # 选择类型的原则
  69. /*
  70. 所选择的类型越简单越好
  71. 所选择的类型越小越好
  72. */

字符型

  1. # 串数据(文本类型+二进制数据)
  2. /*
  3. 较短的文本:
  4. CHAR(M) 表示固定长度字符
  5. VARCHAR(M) 表示可变长度的字符
  6. M 表示最长的字符数,CHAR可以省略,默认为1.VARCHAR不可以省略
  7. 较长的文本:
  8. TEXT
  9. BLOB(较大的二进制)
  10. 还有binary和varbinary用于保存较短的二进制
  11. enum用于保存枚举
  12. set用于保存集合
  13. 特点
  14. CHAR比较耗费空间,但是效率较高
  15. VARCHAR更节省空间,效率略低于CHAR
  16. */
  17. DROP TABLE IF EXISTS tab_char;
  18. CREATE TABLE tab_char(
  19. c1 ENUM('a','b','c','d') # 枚举类型,同样是字符型,只能插入枚举的内容
  20. # 不区分大小写
  21. );
  22. INSERT INTO tab_char VALUES('a');
  23. # SET类型类似枚举类型,但是能一次向一个单元插入多个值
  24. # 同样不区分大小写
  25. DROP TABLE IF EXISTS tab_set;
  26. CREATE TABLE tab_set(
  27. s1 SET('a','b','c','d')
  28. );
  29. INSERT INTO tab_set VALUES('a');
  30. INSERT INTO tab_set VALUES('b');
  31. INSERT INTO tab_set VALUES('a,b,c');

日期型

  1. # 日期型
  2. /*
  3. DATE 4字节 只能保存日期
  4. TIME 3字节 只能保存时间
  5. YEAR 1字节 只能保存年
  6. DATETIME 8字节 保存日期和时间 1000-9999
  7. TIMESTAMP 4字节 时间戳 1970-2038
  8. TIMESTAMP支持的时间范围较小,但是受实际的时区和MySQL版本影响,更能反映出实际的日期
  9. DATETIME 则只能反映插入时的当时地区
  10. */
  11. DROP TABLE IF EXISTS tab_date;
  12. CREATE TABLE tab_date(
  13. t1 DATETIME,
  14. t2 TIMESTAMP
  15. );
  16. INSERT INTO tab_date VALUES(NOW(),NOW());
  17. SELECT * FROM tab_date;
  18. SHOW VARIABLES LIKE 'time_zone'; # 显示当前时区
  19. SET time_zone='+9:00'; # 修改当前时区,可以看到修改完时区后,TIMESTAMP数据跟随时区变化,DATETIME数据不变化

常见约束介绍

  1. # 常见的约束介绍
  2. /*
  3. 约束含义:一种限制,用于限制表中的数据,为了保证表中数据的准确和可靠性(一致性)
  4. CREATE TABLE text(
  5. 字段名 字段类型 约束
  6. );
  7. 六大约束:
  8. NOT NULL:非空约束,保证该字段的值不能为空
  9. DEFAULT:默认约束,用于该字段有默认值
  10. PRIMARY KEY:主键,用于保证该字段的值具有唯一性并且非空
  11. UNIQUE:保证该字段的值具有唯一性,但是可以为空值
  12. CHECK:【Mysql不支持】检查约束,比如年龄,性别可以用来限制
  13. FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自主表的关联列的值
  14. (在从表添加外键约束,用于引用主表中的某列的值)
  15. 添加约束的时机:
  16. 1. 新建表时
  17. 2. 修改表时
  18. 约束的添加分类:
  19. 列级约束:六大约束语法都支持,但外键约束没有实际效果
  20. 表级约束:除了非空,默认约束,其他都支持
  21. */
  22. # 创建表时添加约束
  23. # 创建列级约束
  24. /*
  25. 直接在字段名和类型后面追加,约束类型即可
  26. 只支持:默认,非空,主键,唯一
  27. */
  28. CREATE DATABASE students;
  29. USE students;
  30. CREATE TABLE stu_info(
  31. id INT PRIMARY KEY, # 添加主键约束
  32. stuName VARCHAR(20) NOT NULL, # 非空约束
  33. gender CHAR(1) CHECK(gender='男' OR gender='女'), # 检查约束,在Mysql中没有效果
  34. seat INT UNIQUE, # 唯一约束
  35. age INT DEFAULT 18, # 默认约束
  36. majorID INT REFERENCES major(id) # 外键约束,没有实际效果
  37. );
  38. CREATE TABLE major(
  39. id INT PRIMARY KEY,
  40. majorName VARCHAR(20)
  41. );
  42. # 查看stuinfo表中所有的索引,包括主键,外键,唯一
  43. SHOW INDEX FROM stu_info;
  44. # 添加表级约束
  45. /*
  46. 语法:
  47. 在各个字段的最下面添加
  48. 【CONSTRAINT 约束名】 约束类型(字段名)
  49. 一般情况下,为了简便,我们只把外键放在表级约束中
  50. */
  51. DROP TABLE IF EXISTS stu_info;
  52. CREATE TABLE stu_info(
  53. id INT,
  54. stuName VARCHAR(20) ,
  55. gender CHAR(1) ,
  56. seat INT ,
  57. age INT ,
  58. majorID INT,
  59. CONSTRAINT pk PRIMARY KEY(id), # 主键
  60. CONSTRAINT uq UNIQUE(seat), # 唯一键
  61. CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id) # 外键
  62. );
  63. # 主键和唯一键的区别
  64. /*
  65. 1. 主键不允许为空,唯一键允许为空
  66. 2. 都允许组合键(只要列中有一项信息不同即可,完全相同仍旧不可以插入)不推荐使用
  67. */
  68. # 外键
  69. /*
  70. 要求在从表设置外键关系
  71. 从表的外键列的类型和主表的关联列的类型要求一致或兼容
  72. 主表的关联列必须是一个KEY(主键/唯一键)
  73. 插入数据时,先插入主表,再插入从表
  74. 删除数据时,先删除从表,再删除主表
  75. */
  76. # 修改表时添加约束
  77. /*
  78. 列级约束:
  79. ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型 新约束;
  80. 表级约束
  81. ALTER TABLE 表名 ADD 【CONSTRAINT 约束名】 约束类型(字段名);
  82. */
  83. DROP TABLE IF EXISTS stu_info;
  84. CREATE TABLE stu_info(
  85. id INT,
  86. stuName VARCHAR(20) ,
  87. gender CHAR(1) ,
  88. seat INT,
  89. age INT ,
  90. majorID INT
  91. );
  92. # 用列级约束修改
  93. # 与直接修改表的格式一样,都是重新定义表的类型然后直接再后面增加约束即可
  94. ALTER TABLE stu_info MODIFY COLUMN stuName VARCHAR(20) NOT NULL;
  95. # 主键和唯一键等还可以用表级约束修改
  96. ALTER TABLE stu_info ADD PRIMARY KEY(id);
  97. ALTER TABLE stu_info ADD UNIQUE(id);
  98. # 外键只有用表记约束才有效果
  99. ALTER TABLE stu_info ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id);
  100. # 修改表时删除约束
  101. # 删除列级约束仍然向上面修改时一样,只需要不写,或者用NULL代替即可
  102. # 修改表级约束需要用到DROP关键字
  103. ALTER TABLE stu_info DROP PRIMARY KEY;
  104. ALTER TABLE stu_info DROP INDEX seat;
  105. # 删除外键
  106. ALTER TABLE stu_info DROP FOREIGN KEY fk_stuinfo_major;
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/999641
推荐阅读
相关标签
  

闽ICP备14008679号