博客列表 >总结mysql 常用DDL, DML语言

总结mysql 常用DDL, DML语言

小丑0o鱼
小丑0o鱼原创
2021年07月20日 18:51:32354浏览
  1. 1. 总结mysql 常用DDL, DML语言
  2. 数据类型
  3. 数值型 整形
  4. 整形 占用字节数 范围
  5. tinyint 1 -128~127
  6. smallint 2 -32768~32767
  7. mediumint 3 -8388608~8388607
  8. int 4 -2147483648~2147483647
  9. bigint 8 -9223372036854775808~9223372036854775807
  10. 选择的范围尽可能小,范围越小占用资源越少
  11. 可选参数有
  12. 无符号整形(unsigned 无符号整形就是没有负数,无符号整数是整数的两倍
  13. 整形支持显示宽度,显示宽带是最小的显示位数,如int(11)表示整形最少用11位表示,如果不够位数用0填充。显示宽度默认不起作用,必须结合zerofill才起作用。
  14. num int(5) zerofill # 添加前导0,int(5)显示宽带是5
  15. 1、范围要尽可能小,范围越小,占用空间越少
  16. 2、无符号整数是整数的两倍
  17. 3、整形支持显示宽度,显示宽带是最小的显示位数,必须结合zerofill才起作用
  18. 浮点型
  19. 浮点型 占用字节数 范围
  20. float(单精度型) 4 -3.4E+38~3.4E+38
  21. double(双精度型) 8 -1.8E+308~1.8E+308
  22. 浮点型的声明:float(M,D) double(M,D)
  23. M:总位数 D:小数位数
  24. 1、浮点数有单精度和双精度
  25. 2、浮点数支持科学计数法
  26. 3、浮点数精度会丢失
  27. 小数(定点数
  28. 原理:将整数部分和小数部分分开存储
  29. 语法:
  30. decimal(M,D)
  31. 1decimal是变长的,大致是每9个数字用4个字节存储,整数和小数分开计算。M最大是65,D最大是30,默认是(10,2)。
  32. 2、定点和浮点都支持无符号、显示宽度0填充。
  33. 字符型
  34. 在数据库中没有字符串概念,只有字符,所以数据库中只能用单引号
  35. 数据类型 描述
  36. char 定长字符,最大可以到255
  37. varchar 可变长度字符,最大可以到65535
  38. tinytext 2**81 =255
  39. text 2**161 =65535
  40. mediumtext 2**241
  41. longtext 2**321
  42. 1char是定长,varchar是变长
  43. 2char最大值是255varchar最大值是65535,具体要看字符编码
  44. 3text系列在表中存储的是地址
  45. 4、一条记录的总长度不能超过65535
  46. 日期时间型
  47. 数据类型 描述
  48. datetime 日期时间,占用8个字节
  49. date 日期 占用3个字节
  50. time 时间 占用3个字节
  51. year 年份,占用1个字节
  52. timestamp 时间戳,占用4个字节
  53. 1datetimedate
  54. datetime格式:年-月-日 小时:分钟:秒。支持的范围是’1000-01-01 00:00:00’到’9999-12-31 23:59:59’。
  55. 2timestamp(时间戳)
  56. datetime类型和timestamp类型表现上是一样的,他们的区别在于:
  57. datetime10009999,而timestamp1970年~2038年(原因在于timestamp占用4个字节,和整形的范围一样,2038011911:14:07以后的秒数就超过了4个字节的长度)
  58. 3year
  59. 只能表示1901~2155之间的年份,因为只占用1个字节,只能表示255个数
  60. 4time
  61. 可以表示时间,也可以表示时间间隔。范围是:-838:59:59~838:59:59
  62. 枚举(enum)
  63. 从集合中选择一个值作为数据(单选)
  64. 枚举值是通过整形数字来管理的,第一个值是1,第二个值是2,以此类推,枚举值在数据库存储的是整形数字。
  65. 枚举优点:
  66. 1)、限制值
  67. 2)、节省空间
  68. 3)、运行速度快(整形比字符串运行速度快)
  69. 枚举占用两个字节,2字节=16位,216=65536,范围是(0-65535),由于枚举从1开始,所以枚举值最多有65535
  70. 集合(set)
  71. 从集合中选择一些值作为数据(多选)
  72. 集合和枚举一样,也为每个集合元素分配一个固定值,分配方式是从前往后按2012、…次方,转换成二进制后只有一位是1,其他都是0
  73. 集合类型占8个字节,集合中最多有64个选项.
  74. 表的操作
  75. 创建表
  76. 语法:
  77. create table [if not exists] 表名(
  78. 字段名 数据类型 [null|not null] [default] [auto_increment] [primary key] [comment],
  79. `字段名 数据类型 …
  80. )[engine=存储引擎] [charset=字符编码]
  81. null not null 是否为空
  82. default: 默认值
  83. auto_increment 自动增长,默认从1开始,每次递增1
  84. primary key 主键,主键的值不能重复,不能为空,每个表必须只能有一个主键
  85. comment: 备注
  86. engine 引擎决定了数据的存储和查找 myisam、innodb
  87. 表名和字段名如果用了关键字,要用反引号引起来。
  88. CREATE TABLE `users` (
  89. `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  90. `username` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '帐号',
  91. `sex` enum('先生','女士') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '先生' COMMENT '性别',
  92. `age` tinyint(3) unsigned NOT NULL COMMENT '年龄',
  93. `created_at` timestamp NULL DEFAULT NULL,
  94. `updated_at` timestamp NULL DEFAULT NULL,
  95. PRIMARY KEY (`id`)
  96. ) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
  97. 修改表
  98. 1、添加字段:alter table 表名add [column] 字段名 数据类型 [位置]
  99. 位置:first 最前面 after[列] 在*列之后 默认是在表最后
  100. 2、删除字段:alter table 表 drop [column] 字段名
  101. 3、修改字段(改名):alter table 表 change [column] 原字段名 新字段名 数据类型
  102. 4、修改字段(不改名):alter table 表 modify 字段名 字段属性…
  103. 5、修改引擎:alter table 表名 engine=引擎名
  104. 6、修改表名:alter table 表名 rename to 新表名
  105. 7、将表移动到其他数据库
  106. alter table 表名 rename to 新库.新表名
  107. alter table student rename to php74.stu;
  108. 删除表
  109. drop table [if exists] 表1,表2,…
  110. 显示所有表
  111. show tables;
  112. 显示创建表的语句
  113. show create table; — 结果横着排列
  114. show create table \G — 将结果竖着排列
  115. 查看表结构
  116. desc[ribe] 表名
  117. 复制表
  118. 语法一:create table 新表 select 字段 from 旧表
  119. 特点:不能复制父表的键,能够复制父表的数据
  120. 语法二:create table 新表 like 旧表
  121. 特点:只能复制表结构,不能复制表数据
  122. 删除表
  123. drop table [if exists] 表1,表2,…
  124. 数据操作 (增 删 改 查)
  125. 插入数据
  126. 语法:insert into 表名 (字段名, 字段名,…) values (值1, 值1,…),(值2, 值2,…)
  127. 1、插入字段名的顺序和数据表中字段名的顺序可以不一致
  128. 2、插入值的个数、顺序必须和插入字段名的个数、顺序要一致。
  129. 3、如果插入的值的顺序和个数与表字段的顺序个数一致,插入字段可以省略。
  130. default关键字用来插入默认值,null用来插入空值.
  131. 更新数据
  132. 语法:update 表名 set 字段=值 [where 条件]
  133. 删除数据
  134. 语法:delete from 表名 [where 条件]
  135. delete from 表和truncate table 表区别?
  136. 1、delete from 表:遍历表记录,一条一条的删除
  137. 2、truncate table:将原表销毁,再创建一个同结构的新表。就清空表而言,这种方法效率高。
  138. 查询数据
  139. 语法:select [选项] 列名 [from 表名] [where 条件] [group by 分组] [order by 排序][having 条件] [limit 限制]
  140. 1 字段表达式
  141. 通过as给字段取别名 as可以省略
  142. 2 from子句
  143. from:来自,from后面跟的是数据源。数据源可以有多个。返回笛卡尔积。
  144. 3 dual表
  145. dual表是一个伪表。在有些特定情况下,没有具体的表的参与,但是为了保证select语句的完整又必须要一个表名,这时候就使用伪表。
  146. 4 where子句
  147. where后面跟的是条件,在数据源中进行筛选。返回条件为真记录
  148. MySQL支持的运算符
  149. — 比较运算符
  150. > 大于
  151. < 小于
  152. >= 大于等于
  153. <= 小于等于
  154. = 等于
  155. != 不等于
  156. — 逻辑运算符
  157. and 与
  158. or 或
  159. not 非
  160. — 其他
  161. in | not in 字段的值在枚举范围内
  162. between…and|not between…and 字段的值在数字范围内
  163. is null | is not null 字段的值不为空
  164. 5 group by 【分组查询】
  165. 将查询的结果分组,分组查询目的在于统计数据。
  166. 查询字段是普通字段,只取第一个值
  167. 通过group_concat()函数将同一组的值连接起来显示
  168. 1、 如果是分组查询,查询字段是分组字段和聚合函数。
  169. 2、 查询字段是普通字段,只取第一个值
  170. 3、 group_concat()将同一组的数据连接起来
  171. 6 order by排序
  172. asc:升序【默认】
  173. desc:降序
  174. 7 having条件
  175. having:是在结果集上进行条件筛选
  176. 小结:having和where的区别:
  177. where是对原始数据进行筛选,having是对记录集进行筛选。
  178. 8 limit
  179. 语法:limit [起始位置],显示长度
  180. 起始位置可以省略,默认是从0开始
  181. 9 查询语句中的选项
  182. 查询语句中的选项有两个:
  183. 1、 all:显示所有数据 【默认】
  184. 2、 distinct:去除结果集中重复的数据
  185. 2. pdo操作数据库的对象方法;
  186. 实例化PDO对象
  187. DSN:data source name,数据源名称,包含的是连接数据库的信息,格式如下:
  188. $dsn=’数据库类型:host=主机地址;port=端口号;dbname=数据库名称;charset=字符集’;
  189. $db = new PDO($dsn,’用户名’,’密码’);
  190. 数据库类型:
  191. MySQL数据库 => mysql:
  192. oracle数据库 => oci:
  193. SQL Server =>sqlsrv:
  194. 具体驱动类型参见手册“PDO驱动”
  195. 注意事项
  196. 1、如果连接的是本地数据库,host可以省略
  197. 2、如果使用的是3306端口,port可以省略
  198. 3、charset也省略,如果省略,使用的是默认字符编码
  199. 4、dbname也可以省略,如果省略就没有选择数据库
  200. 5、host、port、dbname、charset不区分大小写,没有先后顺序
  201. 6、驱动名称不能省略,冒号不能省略(因为冒号是驱动名组成部分),数据库驱动只能小写
  202. $dsn = 'mysql:host=127.0.0.1;port=3306;dbname=user';
  203. $username = 'root';
  204. $password = 'root123';
  205. $db = new PDO($dsn, $username, $password);
  206. var_dump($db); //输出 object(PDO)#1 (0) { }
  207. PDO执行数据查询语句query($sql)
  208. 方法:$pdo->query($sql)
  209. 返回的是PDOStatement对象
  210. 1 执行查询语句
  211. // 1. 执行查询语句
  212. $stmt = $db->query('select * from users');
  213. //var_dump($stmt); //输出 object(PDOStatement)#2 (1) { ["queryString"]=> string(19) "select * from users" }
  214. 2 获取数据
  215. 2.1 获取二维数组fetchAll()
  216. // 获取二维数组
  217. $rs = $stmt->fetchAll(); //默认返回关联和索引数组
  218. $rs=$stmt->fetchAll(PDO::FETCH_BOTH); //返回关联和索引数组
  219. $rs = $stmt->fetchAll(PDO::FETCH_NUM); //返回索引数组
  220. $rs = $stmt->fetchAll(PDO::FETCH_ASSOC); //返回关联数组
  221. $rs = $stmt->fetchAll(PDO::FETCH_OBJ); //返回对象数组
  222. 2.2 获得一维数组fetch()
  223. // 获得一维数组
  224. $rs = $stmt->fetch(); // 匹配完成后指针下移一条 数据1
  225. var_dump($rs);
  226. $rs = $stmt->fetch(PDO::FETCH_NUM); // 数据2
  227. var_dump($rs);
  228. //通过while循环获取所有数据
  229. $rs = [];
  230. while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
  231. $rs[] = $row;
  232. }
  233. echo '<pre>';
  234. var_dump($rs);
  235. 3 匹配列:fetchColumn()匹配当前行的第n列,列的编号从0开始,匹配完毕后指针下移一条
  236. //获取当前数据行的第0列值
  237. echo $stmt->fetchColumn(); //输出 1
  238. //获取当前数据行的第1列值
  239. echo $stmt->fetchColumn(1); //输出 user2 下移了
  240. 4 总行数,总列数rowCount() columnCount()
  241. echo '总行数:'.$stmt->rowCount(),'<br>'; // 总行数:100
  242. echo '总列数:'.$stmt->columnCount(); // 总列数:6
  243. PDO执行数据操作语句>exec($sql(insert update delete)
  244. 方法: $pdo->exec($sql)
  245. 执行数据增、删、改语句,执行成功返回受影响的记录数,如果SQL语句错误返回false。
  246. $res = $db->exec("insert into `users` values (null,'users101','先生',20,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)");
  247. echo $res; //输出 1
  248. $res = $db->exec("update `users` set username='王五' where id=101");
  249. echo $res; //输出 1
  250. $res = $db->exec("DELETE FROM `users` WHERE id=101;");
  251. echo $res; //输出 1
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议