MYSQL建表操作大全
建表语句
通用模板
简易版
DROP TABLE IF EXISTS `user_tb`; # 删除原表,IF EXISTS :防止报错CREATE TABLE t1(`id` varchar(50) not null,`name` varchar(20));
带主键版本
DROP TABLE IF EXISTS `user_tb`; # 删除原表,IF EXISTS :防止报错CREATE TABLE `user_tb`(# primary key : 标注主键 - 主键唯一`id` varchar(50) not null primary key, `name` varchar(20) );
带主键版本 - 复合主键
DROP TABLE IF EXISTS `user_tb`; # 删除原表,IF EXISTS :防止报错CREATE TABLE `user_tb`(`id` varchar(50) not null , `name` varchar(20), primary key (`id`,`name`));
说明:
1、所谓的复合主键,就是指你表的主键含有一个以上的字段组成 。
2、上面的name和id字段组合起来就是你user_tb表的复合主键
3、它的出现是因为你的name字段可能会出现重名,所以要加上ID字段这样就可以保证你记录的唯一性
一般情况下,主键的字段长度和字段数目要越少越好
4、一般在一个主键不能唯一标识这个表中的记录的时候才使用复合主键
- 比如商品SPU相等的时候
- 可能SPU1下有code为0010的SKU,SPU2下也有code为0010的SKU
- 这种情况下,就无法单纯依靠SPU来保证此条记录的唯一性
- 所以就靠这样的联合主键来确定这条记录的唯一性
带默认值
DROP TABLE IF EXISTS `user_tb`; # 删除原表,IF EXISTS :防止报错 CREATE TABLE `user_tb`(`id` varchar(50) not null primary key, `name` varchar(20), `is_validity` char(1) default '1' COMMENT '是否有效 1 :有效 0:无效') COMMENT='带默认值的测试表';
说明:
1、char(1) :只存储 1 0 用这个节省空间
2、COMMENT:为备注值
带默认值 - 主键自增、字段备注
DROP TABLE IF EXISTS `user_tb`; # 删除原表,IF EXISTS :防止报错 CREATE TABLE `user_tb`(`id` int(11) not null AUTO_INCREMENT comment 'id' , `name` varchar(20) comment '名字', `is_validity` char(1) default '1' COMMENT '是否有效 1 :有效 0:无效',primary key(`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 COMMENT='带默认值的测试表';
说明:
- 主键格式需要可加格式,才可以自增,这里的int 是可以的
完整模板
DROP TABLE IF EXISTS `user_tb`; # 删除原表,IF EXISTS :防止报错 CREATE TABLE `user_tb`(`id` varchar(50) COLLATE utf8_bin NOT NULL comment 'id', `custimer_name` varchar(50) COLLATE utf8_bin DEFAULT NULL comment '客户名字', `order_code` bigint(20) COLLATE utf8_bin DEFAULT NULL COMMENT '订单CODE',`goods_code` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '商品CODE',`goods_name` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '商品名称',`goods_market_price` decimal(18,6) DEFAULT NULL COMMENT '商品市场价钱',`goods_sell_price` decimal(18,6) DEFAULT NULL COMMENT '商品销售价钱',`order_number` int(10) DEFAULT NULL COMMENT '订单商品数量',`pay_fee` decimal(18,6) DEFAULT NULL COMMENT '付款金额',`pay_time` datetime DEFAULT NULL COMMENT '支付时间',`order_type` varchar(5) COLLATE utf8_bin DEFAULT NULL COMMENT '(订单类型 10:实物商品 20:虚拟商品 30:其他商品)',`order_status` varchar(5) COLLATE utf8_bin DEFAULT NULL COMMENT '(订单状态:10:待付款;20:已支付;30:支付失败;40:超时未支付订单自动关闭;',`is_validity` char(1) default '1' COMMENT '是否有效 1 :有效 0:无效',`create_code` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '创建人CODE',`create_name` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '创建人名称',`create_date` datetime DEFAULT NULL COMMENT '创建时间',`update_code` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '修改人CODE',`update_name` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '修改人名称',`update_date` datetime DEFAULT NULL COMMENT '修改时间',PRIMARY KEY (`id`),UNIQUE KEY `index_order_code` (`order_code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='完整测试表';
注意点:
- 1、MySQL的SQL特性:表名和字段名需要加反引号引住;
- 2、decimal(18,6):类型可用于交易金额,精度更准确,double会丢失精度;
- 3、COMMENT:中文描述
- 4、ENGINE=InnoDB: 使用InnoDB引擎(聚集索引)
- 5、DEFAULT CHARSET=utf8: 选择合适的编码、 默认编码集为utf-8
- 6、COLLATE utf8_bin :以二进制值比较,也就是区分大小写,collate是核对的意思(拓展:如果是uft-8_general_ci :普通比较,不区分大小写)
- 7、varchar(50):如果需要使用AUTO_INCREMENT id需要设置成 可加类型,比如int
索引与主键
- 增加索引- ALTER TABLE 库点table_name ADD PRIMARY KEY ( `column` );- column为添加的索引字段- 查询表中存在的索引信息- show indexes from 库点table_name- 增加索引- ALTER TABLE 库点table_name ADD INDEX ( `column` );- column 为添加的索引字段- 删除索引- alter table 库点table_name drop index `column`,add UNIQUE (`column`);- unique的作用:保证唯一
修改表结构
1、修改编码- ALTER TABLE 库点table_name MODIFY COLUMN `column` varchar(50) - CHARACTER SET utf8 COLLATE utf8_bin NULL;2、修改注释2.1、修改表注释- ALTER TABLE student COMMENT '学生表';2.2、修改列注释- ALTER TABLE student MODIFY COLUMN name VARCHAR(100) COMMENT '姓名';3、修改表中字段长度- 3.1、表中已存有数据:ALTER table 表名 MODIFY (字段名 字段类型(长度));- 3.2、表中未存有数据:ALTER TABLE 表名 MODIFY 字段名 字段类型(长度);4、添加字段- ALTER TABLE prod_fsk_statistics.calendar ADD year_ int COMMENT '年份';- ALTER TABLE prod_fsk_statistics.calendar ADD month_ int COMMENT '月份';
增删查改
1。1、插入单条-- INSERT INTO 表名 (字段1,字段2,......) VALUES (值1,值2,.....);insert into 库点table_name (`column_1`,`column_2`)VALUES (20,'商品_name');1.2、批量插入-- INSERT INTO 表名 (字段1,字段2,......)VALUES (值1,值2,......),(值1,值 2,......),(值1,值2,......);INSERT INTO form (id,username,age)VALUES (2,"王二",22),(3,"周三",23),(4,"刘四",24),(5,"吴五",25),(6,"陆六",26);2、修改-- UPDATE 表名(修改) SET(修改哪些字段)WHERE(查询条件)-- UPDATE 表名 SET 字段1 = 值1,字段2 = 值2,...... WHERE 字段1 = 值1;UPDATE form SET username = "张张",age = 22 WHERE id = 1;3、删除-- 删除语句-- DALETE FROM 表名 WHERE 字段1 = 值1DELETE FROM form WHERE username = "李四";4、查询
MySQL中utf8和utf8mb4有什么区别
1、MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。
2、内容描述
那上面说了既然utf8能够存下大部分中文汉字,那为什么还要使用utf8mb4呢? 原来mysql支持的 utf8 编码最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了。三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文种平面(BMP)。也就是说,任何不在基本多文本平面的 Unicode字符,都无法使用 Mysql 的 utf8 字符集存储。包括 Emoji 表情(Emoji是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和很多不常用的汉字,以及任何新增的 Unicode 字符等等(utf8的缺点)。
通常,计算机在存储字符时,会根据不同类型的字符以及编码方式分配存储空间。例如以下几种编码方式;
①ASCII编码中,一个英文字母(不分大小写)占用一个字节的空间,一个中文汉字占用两个字节的空间。一个二进制的数字序列,在计算机中作为一个数字单元存储时,一般为8位二进制数,换算为十进制。最小值0,最大值255。
②UTF-8编码中,一个英文字符占用一个字节的存储空间,一个中文(含繁体)占用三个字节的存储空间。
③Unicode编码中,一个英文占用两个字节的存储空间,一个中文(含繁体)占用两个字节的存储空间。
④UTF-16编码中,一个英文字母字符或一个汉字字符存储都需要占用2个字节的存储空间(Unicode扩展区的一些汉字存储需要4个字节)。
⑤UTF-32编码中,世界上任何字符的存储都需要占用4个字节的存储空间。
既然utf8能兼容绝大部分的字符,为什么要扩展utf8mb4?
随着互联网的发展,产生了许多新类型的字符,例如emoji这种类型的符号,也就是我们通常在聊天时发的小黄脸表情,这种字符的出现不在基本多平面的Unicode字符之中,导致无法在MySQL中使用utf8存储,MySQL于是对utf8字符进行了扩展,增加了utf8mb4这个编码。
所以,设计数据库时如果想要允许用户使用特殊符号,最好使用utf8mb4编码来存储,使得数据库有更好的兼容性,但是这样设计会导致耗费更多的存储空间。
MYSQL建表操作大全相关推荐
- 关于MySQL建表对DML的影响
今天一位同学问到线上曾经碰到过连续建表,导致阻塞普通的insert.update等.不过也没有保留现场.因此有疑问为什么建表会影响DML? 分析 首先这个现象不是在所有场景都会碰到( ...
- Python3 使用 pymysql 连接 MySQL 建表时出现 Warning3719 UTF8 警告
在学习 Python3 爬虫关系型数据库储存时,利用 pymysql 连接 MySQL 建表,测试用的代码如下,第一句 SQL 用于获取当前 MySQL 的版本信息,第二句 SQL 执行创建 spid ...
- 基于表的数据字典构造MySQL建表语句
表的数据字典格式如下: 如果手动写MySQL建表语句,确认麻烦,还不能保证书写一定正确. 写了个Perl脚本,可快速构造MySQL脚本语句. 脚本如下: #!/usr/bin/perl use str ...
- 关于MySQL分表操作的研究
关于MySQL分表操作的研究 一般来说,当我们的数据库的数据超过了100w记录的时候就应该考虑分表或者分区了,这次我来详细说说分表的一些方法.首先,我们需要想好到底分多少个表,前提当然是满足应用.这里 ...
- mysql建表影响效率_关于MySQL建表对DML的影响【转】
本文来自这里 今天一位同学问到线上曾经碰到过连续建表,导致阻塞普通的insert.update等.不过也没有保留现场.因此有疑问为什么建表会影响DML? 分析 首先这个现象不是在所有场景都会碰到(否则 ...
- mysql建表是要注意什么问题_MySQL建表注意事项
1.建表规范 -- 数据库名丶表名,全部使用小写字母,使用"_"下划线连接且长度小于12,做到见名知意 2.建议使用 innodb 引擎,这也是MySQL的默认引擎 3.字段类型选 ...
- ubuntu16.04下mysql建表无法输入中文解决方案
转载请注明,靴靴ubuntu16.04下mysql建表无法输入中文解决方案_MendyMeng的博客-CSDN博客 考研复试科目有数据库,于是在自己Ubuntu16.04.1环境下面安装了mysql5 ...
- cmd中mysql的操作语句,mysql命令行操作大全 mysql命令行操作总结
摘要 腾兴网为您分享:mysql命令行操作大全 mysql命令行操作总结,悦作业,英语字典,银万财富,小书亭等软件知识,以及webex,过租号,宁夏教育云,百货通,准妈妈课堂,京客隆网上超市,壁纸生成 ...
- mysql建表 外键_mysql建表外键怎么设
mysql建表外键怎么设 mysql建表时设置外键的方法:在"CREATE TABLE"语句中,通过"[CONSTRAINT ] FOREIGN KEY 字段名 [,字段 ...
- 【电商】mysql 建表的一些规则 和注意事项
文章目录 1.背景 2. 建表规范 2.1命名规则 [推荐]库名与应用名称尽量一致. [强制]表名 不使用复数名词 [强制]字段名 必须使用小写字母,禁止出现数字开头禁止两个下划线中间只出现数字. [ ...
最新文章
- 微服务、DevOps…不是效率银弹,请同时升级你的管理方式
- 解决Word 2007启动时弹出“无法访问您试图使用功能所在的网络位置”的问题...
- 影响数据库性能的因素
- 怎样把SharePoint中文备份恢复到英文版,修改sharepoint站点语言
- stack java实现_Stack (堆栈)使用JAVA实现
- c++语言表白超炫图形_R语言统计与绘图:组合图形布局
- ironpython调用c dll_IronPython脚本调用C#dll示例
- VC++6.0 内存泄露(Memory Leaks)征兆1
- 天正如何转为t3_天正插件 t3 天正文件转T3格式CAD图
- 05矩阵04——分块矩阵、分块矩阵的运算、分块矩阵的初等变换、分块初等矩阵的性质、按行分块、按列分块
- 服务器创建文件失败是什么意思,网站提示无法创建文件错误解决详情(图文)...
- 【no-descending-specificity】问题
- ios和android下数字没有垂直居中,手机端设置小号字体的上下居中问题
- nested exception is io.lettuce.core.RedisCommandExecutionException: ERR invalid expire time in setex
- Dynamics CRM 客户端程序开发:常用工具介绍之Dynamics XRM Tools
- ffmpeg录制桌面,麦克风和系统声音独立成2路音轨
- Java 添加、读取、删除PPT文档属性
- Tasker实现的app界面实时翻译 - 界面翻译4.0
- 使用GSL库实现非线性最小二乘拟合—原理与C代码实现(VS2019)
- php开发建站学校,闪灵CMS学校建站系统(含小程序)