diff --git "a/39 \345\247\234\344\274\237\345\261\261/20230217 mysql\344\275\234\344\270\232.md" "b/39 \345\247\234\344\274\237\345\261\261/20230217 mysql\344\275\234\344\270\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..215a8ebd1b7882344b0dfb1527d535ab51f31f2d --- /dev/null +++ "b/39 \345\247\234\344\274\237\345\261\261/20230217 mysql\344\275\234\344\270\232.md" @@ -0,0 +1,235 @@ +## 1 SQL的分类 + +| 名称 | 解释 | 命令 | +| :-------------------: | :-------------------------------------------: | :----------------------------------------------------------: | +| DDL (数据定义语言) | 定义和管理数据对象结构,如数据库,数据表等 | 创建(create),修改(alter),删除(drop) show(展示)结构 | +| DML (数据操作语言) | 用于操作数据库对象中所包含的数据 | 增(insert),删(delete),改(update) 数据 | +| DQL (数据查询语言) | 用于查询数据库数据 | 查(select) | +| DCL (数据控制语 言) | 用于管理数据库的语言,包括管理权限及数 据更改 | grant(授权),commit(确认),rollback(回滚) | + +## 2 SQL语法规范 + +1)mysql的sql语法不区分大小写 + +2)命名时:尽量使用26个英文字母大小写,数字0-9,下划线,不要使用其他符号 + +3)建议不要使用mysql的关键字等来作为**表名、字段名、数据库**名等,如果不小心使用,请在SQL语句中使用`(飘号/反引号)引起来,说明 : 反引号用于区别MySQL保留字与普通字符而引入的 (键盘esc下面的键) + +4)数据库和表名、字段名等对象名中间不要包含空格 + +```mysql +reate database my mxdx; + +ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mxdx' at line 1 +``` + +5)同一个mysql软件中,数据库不能同名,同一个库中,表不能重名,同一个表中,字段不能重名 + +## 3 SQL脚本中如何加注释 + +```mysql +create table tt( + id int, #编号 + `name` varchar(20), -- 姓名 + gender enum('男','女') + /* + 性别只能从男或女中选择一个, + 不能两个都选,或者选择男和女之外的 + */ +); +``` + +## 4 mysql脚本中的标点符号 + +1. ### 小括号(): + + - 在创建表、添加数据、函数使用、子查询、计算表达式等等会用()表示某个部分是一个整体结构。 + - 思考: 2+3 * 6 =20 和 (2+3) * 6 =30的区别 + +2. 单引号'':**字符串和日期类型的数据值使用单引号''引起来**,数值类型的不需要加标点符号。 + +3. “2023-10--10” + +4. 双引号"":列的别名可以使用引号"",**给表名取别名不要用引号**。 + +5. 在MySQL中双引号通常等价于单引号 + +```mysql +create table tt( + id int + ; + +ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 2 +``` + +# MySQL支持的数据类型 + +### 数值类型:包括整数和小数 + +1 整数类型 + +对于整数类型,MySQL还支持在类型名称后面加小括号(M),而小括号中的M表示显示宽度,M的取值范围是(0, 255)。int(M)这个M在字段的属性中指定了unsigned(无符号)和zerofill(零填充)的情况下才有意义。表示当整数值不够M位时,用0填充。如果整数值超过M位但是没有超过当前数据类型的范围时,就按照实际位数存储。当M宽度超过当前数据类型可存储数值范围的最大宽度时,也是以实际存储范围为准。 + +实例 + +```mysql +#演示整数类型 +#创建一个表格,表格的名称“t_int”, +#包含两个字段i1和i2,分别是int和int(2)类型 +#create table t_int(i1 int,i2 int(2)); +create table t_int( + i1 int, + i2 int(2) #没有unsigned zerofill,(2)没有意义 +); + +#查看当前数据库的所有表格 +show tables; +show tables from 数据库名; + +#查看表结构 +desc 表名称; +desc t_int; + +mysql> desc t_int; ++-------+------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-------+------+------+-----+---------+-------+ +| i1 | int | YES | | NULL | | +| i2 | int | YES | | NULL | | ++-------+------+------+-----+---------+-------+ +2 rows in set (0.01 sec) + +#创建一个表格,表格的名称“t_int2”, +#包含两个字段i1和i2,分别是int和int(2)类型 +create table t_int2( + i1 int, + i2 int(2) unsigned zerofill +); + +mysql> desc t_int2; ++-------+--------------------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-------+--------------------------+------+-----+---------+-------+ +| i1 | int | YES | | NULL | | +| i2 | int(2) unsigned zerofill | YES | | NULL | | ++-------+--------------------------+------+-----+---------+-------+ +2 rows in set (0.01 sec) + +#添加数据到表格中 +insert into 表名称 values(值列表); +insert into t_int values(1234,1234); +insert into t_int2 values(1234,1234); + +#查询数据 +select * from 表名称; +select * from t_int; +select * from t_int2; + +#添加数据到表格中 +insert into 表名称 values(值列表); +insert into t_int values(1,1); +insert into t_int2 values(1,1); + +insert into t_int values(12222228854225548778455,12222228854225548778455); +mysql> insert into t_int values(12222228854225548778455,12222228854225548778455); +ERROR 1264 (22003): Out of range value for column 'i1' at row +``` + +2 小数类型 + +MySQL中使用浮点数和定点数来表示小数。 + +浮点数有两种类型:单精度浮点数(FLOAT)和双精度浮点数(DOUBLE),定点数只有DECIMAL。浮点数和定点数都可以用(M,D)来表示。 + +- M是精度,表示该值总共显示M位,包括整数位和小数位,对于FLOAT和DOUBLE类型来说,M取值范围为0~255,而对于DECIMAL来说,M取值范围为0~65。 +- D是标度,表示小数的位数,取值范围为0~30,同时必须<=M。 + +DECIMAL实际是以字符串形式存放的,在对精度要求比较高的时候(如货币、科学数据等)使用DECIMAL类型会比较好。浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的数据范围,它的缺点是会引起精度问题。 + +实例 + +```mysql +#演示小数类型 +#创建表格 +create table t_double( + d1 double, + d2 double(5,2) #-999.99~999.99 +); + +#查看表结构 +desc t_double; + +#添加数据 +insert into t_double values(2.5,2.5); + +#查看数据 +select * from t_double; +mysql> select * from t_double; ++------+------+ +| d1 | d2 | ++------+------+ +| 2.5 | 2.50 |#d2字段小数点后不够2位用0补充 ++------+------+ +1 row in set (0.00 sec) + +#添加数据 +insert into t_double values(2.5526,2.5526); +insert into t_double values(2.5586,2.5586); + +mysql> select * from t_double; ++--------+------+ +| d1 | d2 | ++--------+------+ +| 2.5 | 2.50 | +| 2.5526 | 2.55 |#小数点后有截断现象,并且会四舍五入 +| 2.5586 | 2.56 |#小数点后有截断现象,并且会四舍五入 ++--------+------+ +3 rows in set (0.00 sec) + + +#添加数据 +insert into t_double values(12852.5526,12852.5526); + +#d2字段整数部分超过(5-2=3)位,添加失败 +mysql> insert into t_double values(12852.5526,12852.5526); +ERROR 1264 (22003): Out of range value for column 'd2' at row 1 + + +#创建表格 +create table t_decimal( + d1 decimal, #没有指定(M,D)默认是(10,0) + d2 decimal(5,2) +); + + +#查看表结构 +desc t_decimal; +mysql> desc t_decimal; ++-------+---------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-------+---------------+------+-----+---------+-------+ +| d1 | decimal(10,0) | YES | | NULL | | +| d2 | decimal(5,2) | YES | | NULL | | ++-------+---------------+------+-----+---------+-------+ +2 rows in set (0.01 sec) + +#添加数据 +insert into t_decimal values(2.5,2.5); + +#查看数据 +select * from t_decimal; +mysql> select * from t_decimal; ++------+------+ +| d1 | d2 | ++------+------+ +| 3 | 2.50 | #d1字段小数点后截断 ++------+------+ +1 row in set (0.00 sec) + +insert into t_decimal values(12852.5526,12852.5526); + +-- 把小数赋值给整数类型的字段时,会截断小数部分,考虑四舍五入 +insert into t_int2 values(1.5,1.5); +``` + +# ![2023-02-17](C:\Users\jiang\Documents\OneDrive\图片\屏幕快照\2023-02-17.png) \ No newline at end of file