mysql约束建表规范_MySQL 建库建表规范
1.约束
1.PrimaryKey(PK)主键
特点:唯一 + 非空,一张表中只能有一个主键约束,一般是一个数字列,最好是无意义的。
2.NOT NULL 非空
特点:不能为空,建议在MySQL中,业务关键列,尤其是索引列,设置为非空。
3.UNIQUE 唯一约束
特点:不能有重复值,可以有多个,一般像是手机号,身份证号
4.unsigned 数字列无符号(全是正数)
特点:必须要加在数字列后,表示数字无负数,一般适用于年龄。。。。。。。。。。
2.其他属性
1.AUTO_INCREMENT 自增长
特点:适用于ID主键列
2.DEFAULT 默认值
特点:在NOT NULL列中使用,不填写值,自动生成默认值。
3.COMMENT 注释
让表的数据更加具体化 特点:建议每个列都有一个注释。
3.DCL 数据控制语言
grant revoke
4.DDL 应用
1.库的定义
1.1 增
CREATE DATABASE oldguoCHARSET utf8mb4 COLLATE utf8mb4_bin;
1.2 删 (危险,不代表生产操作)
DROP DATABASE oldguo;
1.3 改
ALTER DATABASE oldguo CHARSET utf8mb4 COLLATE utf8mb4_bin;
1.4 查(DQL)
mysql> show create database oldboy;
+----------+--------------------------------------------------------------------+
| Database | Create Database |
+----------+--------------------------------------------------------------------+
| oldboy | CREATE DATABASE `oldboy` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ |
+----------+--------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| oldboy |
| oldguo |
| performance_schema |
| sys |
| test |
| world |
+--------------------+
8 rows in set (0.00 sec)
1.5 规范
(1). 库名和业务相关
(2). 库名不能用大写字母,可以用数字,小写字母,特殊符号。
为什么?因为在Windows中,不区分大小写,Linux严格区分大小写。
(3). 库名不能数字开头
(4). 库名不能是预留字符
比如,table,database
(5). 库名不能超过十八个字符
(6). 必须要设置字符集,尽量是utf8mb4.
(7). 收回所有用户的DROP权限。
2.表定义
2.1 增 create table
复制表和表内容
(1). create table stu select * from student; 这种复制方法,会丢失主键,索引之类的约束会丢失。
(2). create table st like student;
insert into st select * from student;
2.2 删 drop table
2.3 查
2.4 改
建表规范 2.1 增 create table
1.表名:
不能大写字母,要和业务有关,不能数字开头,长度控制在18个字符内,不能和关键字同名。
2.要设置存储引擎类型:
INNODB,要设置字符集
3.列明要有意义
4.选择合适的数据类型:
合适的,完整的,简短的(数据类型会影响到索引的性能)
5.每个表要有主键。实在是不知道怎么设置,也要找一个无关的自增长列设置为主键。
6.尽量每个列都有NOT NULL (特别是将来要作为索引的)
7.每列要有注释信息。
2.2 删 drop table
drop table teacher_bak; 删除表结构+数据
truncate table tarcher_bak; 只清除数据(清除数据页)
delete from table teacher_bak; 清空数据行(逐行删除)
2.3 查
show tables; 查看表
show create table teacher; 查看表创建的命令
desc teacher; 详细查看表结构
扩展,复制一张表,只有表结构,没有表数据
create table teacher_bak like teacher;
2.4 改
(1).增加列,默认插入在最后一列
ALTER TABLE xuesheng ADD xqq BIGINT NOT NULL UNIQUE COMMENT 'QQ号';
在某行后面加入一列
ALTER TABLE xuesheng ADD wechat BIGINT NOT NULL UNIQUE COMMENT '微信号' AFTER xtel;
在最前面加入一列
ALTER TABLE xuesheng ADD mail BIGINT NOT NULL UNIQUE COMMENT '邮箱' FIRST;
(2)删除列
ALTER TABLE xuesheng DROP mail;
ALTER TABLE xuesheng DROP xqq;
(3)修改表属性
修改表名:将xuesheng表修改为student
ALTER TABLE xuesheng RENAME to student;
2. 修改某一列的属性信息,尽量使用MODIFY,性能比较高
DESC student;
ALTER TABLE student MODIFY xname VARCHAR(128) NOT NULL COMMENT '姓名';
3. 修改列名和属性,性能较低
ALTER TABLE student CHANGE xsex xgender CHAR(2) NOT NULL DEFAULT 'm' COMMENT '性别';
面试题:上亿行的数据规划:
1.按月归档表
2.没用的历史表进行挪走或删除。
注意:
执行alter语句,都是需要进行缩表操作的,此时只能发生查询操作,不能做修改操作。
我们建议,alter语句,尽量在业务不繁忙期间发生。如果非得线上操作,建议使用pt-osc工具进行。
5.DML 数据操作语言
DML操作数据行数据
1.insert 插入行数据
INSERT INTO
teacher(tid,tname,tage,tsex,tyear,txl,tstar)
VALUES('t0001','oldboy', 48 , 'm' ,20,'本科',10);
5.2 update
SELECT * FROM student;
UPDATE student SET xname='王钢蛋' WHERE xid=6;
UPDATE student SET xname='李铁锤' WHERE xid=5;
5.3 delete
INSERT INTO student VALUES(21,'王二麻子',22,'f','921','345','上海市','2020-01-01');
DELETE FROM student WHERE xid=21;
扩展:
伪删除
(1) 添加状态列 is_del (1代表删除,0代表有效)
ALTER TABLE student ADD is_del TINYINT NOT NULL DEFAULT 0 COMMENT '1代表删除,0代表有效';
SELECT * FROM student;
(2) delete ---> update
原语句:
delete from student where xid=20;
改为 :
update student set is_del=1 where xid=20;
(3) 更改业务查询方法
原语句:
SELECT * FROM student;
改为:
SELECT * FROM student where is_del=0;
mysql约束建表规范_MySQL 建库建表规范相关推荐
- mysql数据表案例_mysql中库和表的简单操作案例
mysql中库和表的简单操作案例 发布时间:2020-12-05 09:54:06 来源:亿速云 阅读:71 作者:小新 这篇文章主要介绍mysql中库和表的简单操作案例,文中介绍的非常详细,具有一定 ...
- jdbc 生成建表语句_mysql数据库下建表语句
mysql建立数据库报错You have an error in your SQL syntax; check the manual that corresponds to your MySQL se ...
- mysql ddl复制_MySQL DDL-对库和表的操作
#DDL /* 数据定义语言 库和表的管理 一.库的管理 创建.修改.删除 二.表的管理 创建.修改.删除 创建:create 修改: alter 删除:drop */ 一.库的管理 #1.库的创建 ...
- mysql的teqcher表结构_Mysql之库表操作(胖胖老师)
SQL 概念:结构化查询语言(SQL = Structured Query Language), 也是一种编程语言(数据库查询和程序设计语言),可以用于数据的存取及查询,更新,管理关系型数据库系统 p ...
- mysql约束添加删除数据_mysql中约束的添加,修改,与删除
MySQL中的约束,添加约束,删除约束,以及其他的一些修饰: 一.NOT NULL(非空约束) 添加非空约束 1)建表时直接添加 CREATE TABLE t_user(user_id INT(10) ...
- mysql统计记录数据库设计_MYSQL数据库设计,查询规范
MySQL数据库 (一)建表规约 1.[强制]表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是unsignedtinyint(1表示是,0表示否) .说明:任何字段如果为非负数,必须是 ...
- mysql全局读写怎么锁_MySQL全局锁和表锁
最近正好在看操作系统中关于线程,锁的部分,也可以学习一下数据库种的锁. MySQL的锁分为全局锁,表级锁,行锁三类. 全局锁 名思义,全局锁就是对整个数据库实例加锁.MySQL提供了一个加全局读锁的方 ...
- 查看 mysql 占用的内存大小_mysql查看数据库和表的占用空间大小
查看数据库的大小 use 数据库名 SELECT sum(DATA_LENGTH)+sum(INDEX_LENGTH) FROM information_schema.TABLES where TAB ...
- mysql数据库入门教程(7):库和表的管理
DDL语言 #DDL /* 数据定义语言 库和表的管理 一.库的管理 创建.修改.删除 二.表的管理 创建.修改.删除 创建: create 修改: alter 删除: drop */ 一.库的管理 ...
- mysql innodb表移植_mysql Innodb引擎独立表空间下通过复制.ibd文件快速迁移数据文件...
假设需求:需要把库test1中的的数据迁移到test2中,并且test2中数据量特别大 硬性条件:1.mysql 使用 Innodb引擎,且开启独立表空间,2.两个库的mysql版本一致(不同版本下未 ...
最新文章
- Ultimate SLAM:结合事件、图像和惯性测量单元,在HDR和高速场景下实现鲁棒的视觉SLAM...
- [转]产品需求文档(PRD)的写作
- inux 后台执行命令
- HDU 1426 Sudoku Killer【DFS 数独】
- 腹式肠道操 缩胃瘦身有奇效 - 健康程序员,至尚生活!
- 【Python】分享几个用Python给图片添加水印的方法,简单实用
- Visual Assist X插件
- 我怀疑对象做了什么对不起我的事......
- 漫画:什么是计数排序
- 设置字符串位数,不足位数补0
- 你都有哪些丢人的经历?
- 这个黑科技耳机方便又时尚,听歌也不怕坐过
- 拓端tecdat|采用SPSS Modeler的Web复杂网络对所有腧穴进行关联规则分析
- Adobe flash player10安装失败的解决方法
- 为什么很多互联网公司喜欢招应届毕业生?
- 解决 无法删除文件夹 “文件夹访问被拒绝 你需要权限来执行此操作“ 的问题 理论上还可以使用本方法删除任何文件夹
- linux编写脚本读取txt文件,用bash脚本或者批处理 bat脚本 读取一个目录下.txt文件第一行内容存放到新文件a.txt...
- 离散卷积过程举例图示详解
- 人群计数数据集汇总和详细介绍,全网最全,crowd counting datasets
- 服务器系统linux当nas,使用Ubuntu 13.10当NAS服务器系统
热门文章
- 第八章 让开发板发出声音:蜂鸣器驱动读后感
- 天津Uber优步司机奖励政策(1月4日~1月10日)
- PAT 1015__部分正确__已解决
- 天涯htmlcss基础框架
- AndroidManifest.xml配置文件详解
- centos pptp+l2tp+radius+mysql+tc限速,安装配置
- 芯片老化验证流程_如何正确评估芯片的老化程度?
- event 和 window.event
- JavaScript 计时事件
- 培训第二弹:全国大学生智能汽车竞赛百度竞速组预告