From 82f382961d6adf5cd43dcf3d2a3492d7f5df2f11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=BF=97=E4=BC=9F?= <2152890632@qq.com> Date: Mon, 20 Feb 2023 23:37:29 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E6=AC=A1=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...55\345\217\245\347\273\203\344\271\240.md" | 411 ++++++++++++++++++ .../\345\221\275\344\273\244\350\241\214.md" | 204 +++++++++ ...72\346\234\254\346\246\202\345\277\265.md" | 115 +++++ 3 files changed, 730 insertions(+) create mode 100644 "06 \351\231\210\345\277\227\344\274\237/11\343\200\201DDL\345\222\214DML\350\257\255\345\217\245\347\273\203\344\271\240.md" create mode 100644 "06 \351\231\210\345\277\227\344\274\237/\345\221\275\344\273\244\350\241\214.md" create mode 100644 "06 \351\231\210\345\277\227\344\274\237/\345\237\272\346\234\254\346\246\202\345\277\265.md" diff --git "a/06 \351\231\210\345\277\227\344\274\237/11\343\200\201DDL\345\222\214DML\350\257\255\345\217\245\347\273\203\344\271\240.md" "b/06 \351\231\210\345\277\227\344\274\237/11\343\200\201DDL\345\222\214DML\350\257\255\345\217\245\347\273\203\344\271\240.md" new file mode 100644 index 0000000..d68455c --- /dev/null +++ "b/06 \351\231\210\345\277\227\344\274\237/11\343\200\201DDL\345\222\214DML\350\257\255\345\217\245\347\273\203\344\271\240.md" @@ -0,0 +1,411 @@ +## 第1题 + +1、创建数据库test01_market + +2、创建表格customers + +| 字段名 | 数据类型 | +| --------- | ----------- | +| c_num | int(11) | +| c_name | varchar(50) | +| c_contact | varchar(50) | +| c_city | varchar(50) | +| c_birth | date | + +**要求3:**将c_contact字段移动到c_birth字段后面 + +**要求4:**将c_name字段数据类型改为 varchar(70) + +**要求5:**将c_contact字段改名为c_phone + +**要求6:**增加c_gender字段到c_name后面,数据类型为char(1) + +**要求7:**将表名改为customers_info + +**要求8:**删除字段c_city + +```mysql +-- 第1题 +-- +-- 1、创建数据库test01_market +create database test01_market; +-- 2、创建表格customers +use test01_market; +create table customers( + c_num int(11), + c_name varchar(50), + c_contact varchar(50), + c_city varchar(50), + c_birth date +); +-- | 字段名 | 数据类型 | +-- | --------- | ----------- | +-- | c_num | int(11) | +-- | c_name | varchar(50) | +-- | c_contact | varchar(50) | +-- | c_city | varchar(50) | +-- | c_birth | date | +-- +-- **要求3:**将c_contact字段移动到c_birth字段后面 +alter table customers modify c_contact varchar(50) after c_birth; +-- **要求4:**将c_name字段数据类型改为 varchar(70) +alter table customers modify c_name varchar(70); +-- **要求5:**将c_contact字段改名为c_phone +alter table customers change c_contact c_phone varchar(50); +-- **要求6:**增加c_gender字段到c_name后面,数据类型为char(1) +alter table customers add c_gender char(1) after c_name; +-- **要求7:**将表名改为customers_info +alter table customers rename to customers_info; +show tables; +-- **要求8:**删除字段c_city +desc customers_info; +alter table customers_info drop c_city; + +``` + +## 第2题 + +1、创建数据库test02_library + +2、创建表格books + +| 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | +| ------- | -------- | ------------- | -------- | ---- | +| b_id | 书编号 | int(11) | 否 | 是 | +| b_name | 书名 | varchar(50) | 否 | 否 | +| authors | 作者 | varchar(100) | 否 | 否 | +| price | 价格 | float | 否 | 否 | +| pubdate | 出版日期 | year | 否 | 否 | +| note | 说明 | varchar(100) | 是 | 否 | +| num | 库存 | int(11) | 否 | 否 | + +3、向books表中插入记录 + +1) 指定所有字段名称插入第一条记录 + +2)不指定字段名称插入第二记录 + +3)同时插入多条记录(剩下的所有记录) + +| b_id | b_name | authors | price | pubdate | note | num | +| ---- | ------------- | --------------- | ----- | ------- | -------- | ---- | +| 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | +| 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | +| 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | +| 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | +| 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | +| 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | +| 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | + +4、将小说类型(novel)的书的价格都增加5。 + +5、将名称为EmmaT的书的价格改为40。 + +6、删除库存为0的记录 + +```mysql +-- ## 第2题 +-- +-- 1、创建数据库test02_library +create database test02_library; +-- 2、创建表格books +use test02_library; +create table books( + b_id int(11), + b_name varchar(50), + authors varchar(100), + price float, + pubdate year, + note varchar(100), + num int(11) +); +-- | 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | +-- | ------- | -------- | ------------- | -------- | ---- | +-- | b_id | 书编号 | int(11) | 否 | 是 | +-- | b_name | 书名 | varchar(50) | 否 | 否 | +-- | authors | 作者 | varchar(100) | 否 | 否 | +-- | price | 价格 | float | 否 | 否 | +-- | pubdate | 出版日期 | year | 否 | 否 | +-- | note | 说明 | varchar(100) | 是 | 否 | +-- | num | 库存 | int(11) | 否 | 否 | +-- +-- 3、向books表中插入记录 +insert into books values (1,'Tal of AAA','Dickes',23,1995,'novel',11); +-- 1) 指定所有字段名称插入第一条记录 +insert into books(b_id,b_name,authors,price,pubdate,note,num) values (2,'EmmaT','Jane lura',35,1993,'joke',22); +-- 2)不指定字段名称插入第二记录 +insert into books values (3,'Story of Jane','Jane Tim',40,2001,'novel',0); +-- 3)同时插入多条记录(剩下的所有记录) +insert into books values (4,'Lovey Day','George Byron',20,2005,'novel',30), +(5,'Old land','Honore Blade',30,2010,'law',0), +(6,'The Battle','Upton Sara',30,1999,'medicine',40), +(7,'Rose Hood','Richard haggard',28,2008,'cartoon',28); +select * from books; +-- | b_id | b_name | authors | price | pubdate | note | num | +-- | ---- | ------------- | --------------- | ----- | ------- | -------- | ---- | +-- | 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | +-- | 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | +-- | 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | +-- | 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | +-- | 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | +-- | 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | +-- | 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | +-- +-- 4、将小说类型(novel)的书的价格都增加5。 +update books set price =(price+5) where note = 'novel'; +-- 5、将名称为EmmaT的书的价格改为40。 +update books set price = 40 where b_name='EmmaT' +-- 6、删除库存为0的记录 +delete from books where num=0; +``` + + + +## 第3题 + +1、创建数据库test03_bookstore + +2、创建book表 + +```mysql ++----------+--------------+------+-----+---------+----------------+ +| Field | Type | Null | Key | Default | Extra | ++----------+--------------+------+-----+---------+----------------+ +| id | int(11) | NO | PRI | NULL | auto_increment | +| title | varchar(100) | NO | | NULL | | +| author | varchar(100) | NO | | NULL | | +| price | double(11,2) | NO | | NULL | | +| sales | int(11) | NO | | NULL | | +| stock | int(11) | NO | | NULL | | +| img_path | varchar(100) | NO | | NULL | | ++----------+--------------+------+-----+---------+----------------+ +``` + +尝试添加部分模拟数据,参考示例如下: + +```mysql ++----+-------------+------------+-------+-------+-------+----------------------------+ +| id | title | author | price | sales | stock | img_path | ++----+-------------+------------+-------+-------+-------+-----------------------------+ +| 1 | 解忧杂货店 | 东野圭吾 | 27.20 | 102 | 98 | upload/books/解忧杂货店.jpg | +| 2 | 边城 | 沈从文 | 23.00 | 102 | 98 | upload/books/边城.jpg | ++----+---------------+------------+-------+-------+-------+----------------------------+ +``` + +3、创建用户表users,并插入数据 + +```mysql ++----------+--------------+------+-----+---------+----------------+ +| Field | Type | Null | Key | Default | Extra | ++----------+--------------+------+-----+---------+----------------+ +| id | int(11) | NO | PRI | NULL | auto_increment | +| username | varchar(100) | NO | UNI | NULL | | +| password | varchar(100) | NO | | NULL | | +| email | varchar(100) | YES | | NULL | | ++----------+--------------+------+-----+---------+----------------+ +``` + +尝试添加部分模拟数据,参考示例如下: + +```mysql ++----+----------+----------------------------------+--------------------+ +| id | username | password | email | ++----+----------+----------------------------------+--------------------+ +| 1 | admin | 112233 | admin@mxdx.com | ++----+----------+----------------------------------+--------------------+ +``` + +4、创建订单表orders + +```mysql ++--------------+--------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++--------------+--------------+------+-----+---------+-------+ +| id | varchar(100) | NO | PRI | NULL | | +| order_time | datetime | NO | | NULL | | +| total_count | int(11) | NO | | NULL | | +| total_amount | double(11,2) | NO | | NULL | | +| state | int(11) | NO | | NULL | | +| user_id | int(11) | NO | MUL | NULL | | ++--------------+--------------+------+-----+---------+-------+ +``` + +尝试添加部分模拟数据,参考示例如下: + +```mysql ++----------------+---------------------+-------------+--------------+-------+---------+ +| id | order_time | total_count | total_amount | state | user_id | ++----------------+---------------------+-------------+--------------+-------+---------+ +| 15294258455691 | 2018-06-20 00:30:45 | 2 | 50.20 | 0 | 1 | ++----------------+---------------------+-------------+--------------+-------+---------+ +``` + +5、创建订单明细表order_items + +```mysql ++----------+--------------+------+-----+---------+----------------+ +| Field | Type | Null | Key | Default | Extra | ++----------+--------------+------+-----+---------+----------------+ +| id | int(11) | NO | PRI | NULL | auto_increment | +| count | int(11) | NO | | NULL | | +| amount | double(11,2) | NO | | NULL | | +| title | varchar(100) | NO | | NULL | | +| author | varchar(100) | NO | | NULL | | +| price | double(11,2) | NO | | NULL | | +| img_path | varchar(100) | NO | | NULL | | +| order_id | varchar(100) | NO | MUL | NULL | | ++----------+--------------+------+-----+---------+----------------+ +``` + +尝试添加部分模拟数据,参考示例如下: + +```mysql ++----+-------+--------+---------+---------+-------+----------------+----------------+ +| id |count| amount| title | author | price | img_path | order_id | ++----+-------+--------+------------+----------+-------+----------------+----------------+ +| 1 | 1 | 27.20| 解忧杂货店 | 东野圭吾 | 27.20 | static/img/default.jpg|15294258455691 | +| 2 | 1 | 23.00| 边城 | 沈从文 | 23.00 | static/img/default.jpg|15294258455691 | ++----+-------+--------+------------+----------+-------+------------+----------------+ +``` + +参考答案: + +```mysql +-- ## 第3题 +-- +-- 1、创建数据库test03_bookstore +create database test03_bookstore; +-- 2、创建book表 +use test03_bookstore; +create table book( + id int(11), + title varchar(100), + author varchar(100), + price double(11,2), + sales int(11), + stock int(11), + img_path varchar(100) +); +alter database test03_bookstore character set utf8; +-- +----------+--------------+------+-----+---------+----------------+ +-- | Field | Type | Null | Key | Default | Extra | +-- +----------+--------------+------+-----+---------+----------------+ +-- | id | int(11) | NO | PRI | NULL | auto_increment | +-- | title | varchar(100) | NO | | NULL | | +-- | author | varchar(100) | NO | | NULL | | +-- | price | double(11,2) | NO | | NULL | | +-- | sales | int(11) | NO | | NULL | | +-- | stock | int(11) | NO | | NULL | | +-- | img_path | varchar(100) | NO | | NULL | | +-- +----------+--------------+------+-----+---------+----------------+ +-- ``` +-- 尝试添加部分模拟数据,参考示例如下: +-- +----+-------------+------------+-------+-------+-------+----------------------------+ +-- | id | title | author | price | sales | stock | img_path | +-- +----+-------------+------------+-------+-------+-------+-----------------------------+ +-- | 1 | 解忧杂货店 | 东野圭吾 | 27.20 | 102 | 98 | upload/books/解忧杂货店.jpg | +-- | 2 | 边城 | 沈从文 | 23.00 | 102 | 98 | upload/books/边城.jpg | +-- +----+---------------+------------+-------+-------+-------+----------------------------+ +insert into book values (1,'zahuodian','zhuwu',27.20,102,98,'upload/books/jieyou.jpg'), +(2,'biancheng','shengcongwen',23.00,102,98,'upload/books/biancheng.jpg'); +select * from book; +-- +-- 3、创建用户表users,并插入数据 +create table users( + id int(11), + username varchar(100), + password varchar(100), + email varchar(100) +); +-- ```mysql +-- +----------+--------------+------+-----+---------+----------------+ +-- | Field | Type | Null | Key | Default | Extra | +-- +----------+--------------+------+-----+---------+----------------+ +-- | id | int(11) | NO | PRI | NULL | auto_increment | +-- | username | varchar(100) | NO | UNI | NULL | | +-- | password | varchar(100) | NO | | NULL | | +-- | email | varchar(100) | YES | | NULL | | +-- +----------+--------------+------+-----+---------+----------------+ +-- ``` +-- +-- 尝试添加部分模拟数据,参考示例如下: +-- +-- ```mysql +-- +----+----------+----------------------------------+--------------------+ +-- | id | username | password | email | +-- +----+----------+----------------------------------+--------------------+ +-- | 1 | admin | 112233 | admin@mxdx.com | +-- +----+----------+----------------------------------+--------------------+ +insert into users values (1,'admin',112233,'admin@mxdx.com'); +-- +-- 4、创建订单表orders +create table orsers( + id varchar(100), + order_time datetime, + total_count int(11), + total_amount double(11,2), + state int(11), + user_id int(11) +); +-- ```mysql +-- +--------------+--------------+------+-----+---------+-------+ +-- | Field | Type | Null | Key | Default | Extra | +-- +--------------+--------------+------+-----+---------+-------+ +-- | id | varchar(100) | NO | PRI | NULL | | +-- | order_time | datetime | NO | | NULL | | +-- | total_count | int(11) | NO | | NULL | | +-- | total_amount | double(11,2) | NO | | NULL | | +-- | state | int(11) | NO | | NULL | | +-- | user_id | int(11) | NO | MUL | NULL | | +-- +--------------+--------------+------+-----+---------+-------+ +-- ``` +-- +-- 尝试添加部分模拟数据,参考示例如下: +-- +-- ```mysql +-- +----------------+---------------------+-------------+--------------+-------+---------+ +-- | id | order_time | total_count | total_amount | state | user_id | +-- +----------------+---------------------+-------------+--------------+-------+---------+ +-- | 15294258455691 | 2018-06-20 00:30:45 | 2 | 50.20 | 0 | 1 | +-- +----------------+---------------------+-------------+--------------+-------+---------+ +-- ``` +insert into orsers values (15294258455691,'2018-06-20 00:30:45',2,50.20,0,1); +-- 5、创建订单明细表order_items +create table order_items( + id int(11), + count int(11), + amount double(11,2), + title varchar(100), + author varchar(100), + price double(11,2), + img_path varchar(100), + order_id varchar(100) +); +-- ```mysql +-- +----------+--------------+------+-----+---------+----------------+ +-- | Field | Type | Null | Key | Default | Extra | +-- +----------+--------------+------+-----+---------+----------------+ +-- | id | int(11) | NO | PRI | NULL | auto_increment | +-- | count | int(11) | NO | | NULL | | +-- | amount | double(11,2) | NO | | NULL | | +-- | title | varchar(100) | NO | | NULL | | +-- | author | varchar(100) | NO | | NULL | | +-- | price | double(11,2) | NO | | NULL | | +-- | img_path | varchar(100) | NO | | NULL | | +-- | order_id | varchar(100) | NO | MUL | NULL | | +-- +----------+--------------+------+-----+---------+----------------+ +-- ``` +-- +-- 尝试添加部分模拟数据,参考示例如下: +-- +-- ```mysql +-- +----+-------+--------+---------+---------+-------+----------------+----------------+ +-- | id |count| amount| title | author | price | img_path | order_id | +-- +----+-------+--------+------------+----------+-------+----------------+----------------+ +-- | 1 | 1 | 27.20| 解忧杂货店 | 东野圭吾 | 27.20 | static/img/default.jpg|15294258455691 | +-- | 2 | 1 | 23.00| 边城 | 沈从文 | 23.00 | static/img/default.jpg|15294258455691 | +-- +----+-------+--------+------------+----------+-------+------------+----------------+ +-- ``` +-- +``` + diff --git "a/06 \351\231\210\345\277\227\344\274\237/\345\221\275\344\273\244\350\241\214.md" "b/06 \351\231\210\345\277\227\344\274\237/\345\221\275\344\273\244\350\241\214.md" new file mode 100644 index 0000000..95dc093 --- /dev/null +++ "b/06 \351\231\210\345\277\227\344\274\237/\345\221\275\344\273\244\350\241\214.md" @@ -0,0 +1,204 @@ +### 命令行 + +1、查看所有的数据库 + +```mysql +show databases; +``` + +2、创建自己的数据库 + +```mysql +create database 数据库名 charset utf8; + +#创建mxdx数据库 +create database mxdx; +``` + +3、删除数据库 + +```mysql +drop database 数据库名; + +#删除mxdx数据库 +drop database mxdx; +``` + +4、使用自己的数据库 + +```mysql +use 数据库名; + +#使用mxdx数据库 +use mxdx; +``` + +### 数据表 + +1、查看某个库的所有表格 + +```mysql +show tables; #要求前面有use语句 + +show tables from 数据库名; +``` + +2、创建新的表格 + +```mysql +create table 表名称( + 字段名 数据类型, + 字段名 数据类型 +); +``` + +说明:如果是最后一个字段,后面就用加逗号,因为逗号的作用是分割每个字段。 + +```mysql +#创建学生表 +create table student( + id int, + name varchar(20) #说名字最长不超过20个字符 +); +``` + +3、查看定义好的表结构 + +```mysql +desc 表名称; +``` + +```mysql +desc student; +``` + +4、添加一条记录 + +```mysql +insert into 表名称 values(值列表); + +#添加两条记录到student表中 +insert into student values(1,'张三'); +insert into student values(2,'李四'); +``` + +5、查看一个表的数据 + +```mysql +select * from 表名称; +``` + +6、删除表 + +```mysql +drop table 表名称; +``` + +```mysql +#删除学生表 +drop table student; +``` + +### 修改表结构:删除字段 + +```mysql +alter table 表名称 drop 【column】 字段名称; +``` + +```mysql +alter table teacher drop column weight; +``` + +### 修改表结构:增加字段 + +```mysql +alter table 表名称 add 【column】 字段名称 数据类型; +alter table 表名称 add 【column】 字段名称 数据类型 first; +alter table 表名称 add 【column】 字段名称 数据类型 after 另一个字段; +``` + +```mysql +alter table teacher add weight double(5,2); +alter table teacher drop column weight; + +alter table teacher add weight double(5,2) first; +alter table teacher drop column weight; + +alter table teacher add weight double(5,2) after salary; +alter table teacher drop column weight; +``` + +### 修改表结构:修改字段的数据类型 + +```mysql +alter table 表名称 modify 【column】 字段名称 新的数据类型; +``` + +### 修改表结构:修改字段的名称 + +```mysql +alter table 表名称 change 【column】 旧字段名称 新的字段名称 新的数据类型; +``` + +### 修改表结构:修改字段位置 + +```mysql +alter table 表名称 modify 【column】 字段名称 数据类型 first; +alter table 表名称 modify 【column】 字段名称 数据类型 after 另一个字段; +``` + +### 修改表名称(重命名表) + +```mysql +alter table 旧表名 rename 【to】 新表名; +rename table 旧表名称 to 新表名称; +``` + +## 添加语句 + +### (1)添加一条记录到某个表中 + +```mysql +insert into 表名称 values(值列表); #值列表中的值的顺序、类型、个数必须与表结构一一对应 +``` + +### 2)添加一条记录到某个表中 + +```mysql +insert into 表名称 (字段列表) values(值列表); #值列表中的值的顺序、类型、个数必须与(字段列表)一一对应 +``` + +### (3)添加多条记录到某个表中 + +```mysql +insert into 表名称 values(值列表),(值列表),(值列表); #值列表中的值的顺序、类型、个数必须与表结构一一对应 +``` + +```mysql +insert into 表名称 (字段列表) values(值列表),(值列表),(值列表); #值列表中的值的顺序、类型、个数必须与(字段列表)一一对应 +``` + +## 修改语句 + +### 修改所有行 + +```mysql +update 表名称 set 字段名 = 值, 字段名 = 值; #给所有行修改 +``` + +```mysql +#修改所有人的薪资,都涨了1000 +update teacher set salary = salary + 1000 ; +``` + +### 修改部分行 + +```mysql +update 表名称 set 字段名 = 值, 字段名 = 值 where 条件; #给满足条件的行修改 +``` + +```mysql +#修改天琪的薪资降低5000 +update teacher set salary = salary-5000 where tname = '天琪'; +``` + diff --git "a/06 \351\231\210\345\277\227\344\274\237/\345\237\272\346\234\254\346\246\202\345\277\265.md" "b/06 \351\231\210\345\277\227\344\274\237/\345\237\272\346\234\254\346\246\202\345\277\265.md" new file mode 100644 index 0000000..f9fce3c --- /dev/null +++ "b/06 \351\231\210\345\277\227\344\274\237/\345\237\272\346\234\254\346\246\202\345\277\265.md" @@ -0,0 +1,115 @@ +### 基本概念 + +数据库是存储数据的地方“Database”简称Db + +数据库管理系统是一种操纵和管理数据库的大型软件“DataBase Management System”简称DBMS + +数据管理系统有MySQL、Oracle、SqlServer是一种操纵和管理数据库的大型软件 + +SQL是结构化查询语言"Structure Query Language",专门用来操作/访问数据库的通用语言。 + +根据数据库的分类,DBMS也分两大类: + +​ 一是关系型数据库管理系统 :MySQL , Oracle , SQL Server , SQLite , DB2 , ... + +​ 二是非关系型数据库管理系统:Redis , MongoDB , ... + +**关系型数据库**,采用关系模型来组织数据,简单来说,**关系模型指的就是二维表格模型**。类似于Excel工作表。 + +**非关系型数据库**,可看成传统关系型数据库的功能阉割版本,基于键值对存储数据,通过减少很少用的功能,来提高性能。 + +### 表的关系 + +MySQL是关系型数据库管理系统,而在关系数据库管理系统中,很多表之间是有关系的,表之间的关系分为一对一关系、一对多关系和多对多关系。 + +### 数据类型 + +#### 整数类型 + +​ 整数类型,MySQL还支持在类型名称后面加小括号(M),而小括号中的M表示显示宽度,M的取值范围是(0, 255)。int(M)这个M在字段的属性中指定了unsigned(无符号)和zerofill(零填充)的情况下才有意义。表示当整数值不够M位时,用0填充。如果整数值超过M位但是没有超过当前数据类型的范围时,就按照实际位数存储。当M宽度超过当前数据类型可存储数值范围的最大宽度时,也是以实际存储范围为准。 + +#### 小数类型 + +​ 浮点数有两种类型:单精度浮点数(FLOAT)和双精度浮点数(DOUBLE),定点数只有DECIMAL。浮点数和定点数都可以用(M,D)来表示。 + +​ 注意!!!(M是精度,表示该值总共显示M位,包括整数位和小数位,对于FLOAT和DOUBLE类型来说,M取值范围为0~255,而对于DECIMAL来说,M取值范围为0~65。D是标度,表示小数的位数,取值范围为0~30,同时必须<=M。) + +#### 字符串类型 + +MySQL的字符串类型有CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM、SET等。MySQL的字符串类型可以用来存储文本字符串数据,还可以存储二进制字符串。 + +#### CHAR(M)为固定长度的字符串 + + CHAR(M)为固定长度的字符串,M表示最多能存储的字符数,取值范围是0~255个字符,如果未指定(M)表示只能存储1个字符。例如CHAR(4)定义了一个固定长度的字符串列,其包含的字符个数最大为4,如果存储的值少于4个字符,右侧将用空格填充以达到指定的长度,当查询显示CHAR值时,尾部的空格将被删掉。) + +#### VARCHAR(M)为可变长度的字符串 + +​ M表示最多能存储的字符数,最大范围由字符集及M共同决定 + +​ M不可缺省,必须指定(M),否则报错。 + +​ 实际长度达不到M值时,以实际长度为准。 + +​ VARBINARY类型的数据除了存储数据本身外,还需要1或2个字节来存储数据的字节数。 + +#### 日期时间类型 + +​ 如果仅仅是表示年份信息,可以只使用YEAR类型,这样更节省空间,格式为“YYYY”,例如“2022”。YEAR允许的值范围是1901~2155。 + +​ 如果要表示年月日,可以使用DATE类型,格式为“YYYY-MM-DD”,例如“2022-02-04”。 + +​ 如果要表示时分秒,可以使用TIME类型,格式为“HH:MM:SS”,例如“10:08:08”。 + +​ 如果要表示年月日时分秒的完整日期时间,可以使用DATATIME类型,格式为“YYYY-MM-DD HH:MM:SS”,例如“2022-02-04 10:08:08”。 + +​ 如果需要经常插入或更新日期时间为系统日期时间,则通常使用TIMESTAMP类型,格式为“YYYY-MM-DDHH:MM:SS”,例如“2022-02-04 10:08:08”。TIMESTAMP与DATETIME的区别在于TIMESTAMP的取值范围小,只支持1970-01-01 00:00:01 UTC至2038-01-19 03:14:07 UTC范围的日期时间值,其中UTC是世界标准时间,并且TIMESTAMP类型的日期时间值在存储时会将当前时区的日期时间值转换为时间标准时间值,检索时再转换回当前时区的日期时间值,这会更友好。而DATETIME则只能反映出插入时当地的时区,其他时区的人查看数据必然会有误差的。另外,TIMESTAMP的属性受MySQL版本和服务器SQLMode的影响很大。 + +#### Enum和Set类型 + + 无论是数值类型、日期类型、普通的文本类型,可取值的范围都非常大,但是有时候我们指定在固定的几个值范围内选择一个或多个,那么就需要使用ENUM枚举类型和SET集合类型了。 + +比如性别只有“男”或“女”;上下班交通方式可以有“地铁”、“公交”、“出租车”、“自行车”、“步行”等。 + +枚举和集合类型字段声明的语法格式如下: + +字段名ENUM(‘值1’,‘值2’,…‘值n’) + +字段名 SET(‘值1’,‘值2’,…‘值n’) + + +ENUM类型的字段在赋值时,只能在指定的枚举列表中取值,而且一次只能取一个。枚举列表最多可以有65535个成员。ENUM值在内部用整数表示,每个枚举值均有一个索引值, MySQL存储的就是这个索引编号。例如,定义ENUM类型的列(‘first’, ‘second’, ‘third’)。 + +#### 数据字段属性 + + **unsigned** + +- 无符号的 + +- 声明该数据列不允许负数 + + **ZEROFILL** + +- 0填充的 + +- 不足位数的用0来填充 , 如int(3),5则为005 + +**auto_increment** + +- 自动增长的 , 每添加一条数据 , 自动在上一个记录数上加 1(默认) +- 通常用于设置主键 , 且为整数类型 +- 可定义起始值和步长 + - 当前表设置步长(AUTO_INCREMENT=100) : 只影响当前表 + - SET @@auto_increment_increment=5 ; 影响所有使用自增的表(全局) + +**NULL 和 NOT NULL** + +- 默认为NULL , 即没有插入该列的数值 +- 如果设置为NOT NULL , 则该列必须有值 + +**DEFAULT** + +- 默认的 + +- 用于设置默认值 + +- 例如,性别字段,默认为"男" , 否则为 "女" ; 若无指定该列的值 , 则默认值为"男"的值 -- Gitee