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 oldguo  CHARSET 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 建库建表规范的更多相关文章

  1. MySQL建库建表

    一直使用SQL SERVER 数据库:最近项目使用MY SQL感觉还是有一点不适应.不过熟悉之后就会好很多. MY SQL 安装之后会有一个管理工具MySQL Workbench 感觉不太好用,数据库 ...

  2. mysql那些事(4)建库建表编码的选择

    mysql建数据库或者建表的时候会遇到选择编码的问题,以前我们都是习惯性的选择utf8,但是在mysql在5.5.3版本后加了utf8mb4的编码,utf8mb4可以存4个字节Unicode,mb4就 ...

  3. C# 利用*.SQL文件自动建库建表等的类

    /// <summary> /// 自动建库建表 /// </summary> public class OperationSqlFile { SqlConnection sq ...

  4. 【ITOO 2】.NET 动态建库建表:使用SQL字符串拼接方式

    导读:在最近接手的项目(高效云平台)中,有一个需求是要当企业用户注册时,给其动态的新建一个库和表.刚开始接手的时候,是一点头绪都没有,然后查了一些资料,也问了问上一版本的师哥师姐,终于有了点头绪.目前 ...

  5. 【ITOO 3】.NET 动态建库建表:实用EF框架提供的codeFirst实现动态建库

    导读:在上篇博客中,介绍了使用SQL字符拼接的方式,实现动态建库建表的方法.这样做虽然也能够实现效果,但是,太麻烦,而且,如果改动表结构,字段的话,会对代码修改很多.但是EF给我们提供了一种代码先行的 ...

  6. SQL Server建库-建表-建约束

    ----------------------------------------SQL Server建库-建表-建约束创建School数据库------------------------------ ...

  7. 使用T-sql建库建表建约束

    为什么要使用sql语句建库建表? 现在假设这样一个场景,公司的项目经过测试没问题后需要在客户的实际环境中进行演示,那就需要对数据进行移植,现在问题来了:客户的数据库版本和公司开发阶段使用的数据库不兼容 ...

  8. {MySQL的库、表的详细操作}一 库操作 二 表操作 三 行操作

    MySQL的库.表的详细操作 MySQL数据库 本节目录 一 库操作 二 表操作 三 行操作 一 库操作 1.创建数据库 1.1 语法 CREATE DATABASE 数据库名 charset utf ...

  9. day 36 MySQL的库、表的详细操作

    MySQL的库.表的详细操作   MySQL数据库 本节目录 一 库操作 二 表操作 三 行操作 一 库操作 1.创建数据库 1.1 语法 CREATE DATABASE 数据库名 charset u ...

  10. Mysql查询库、表存储量(Size)

    Mysql查询库.表存储量(Size) 1.要查询表所占的容量,就是把表的数据和索引加起来就可以了. SELECT SUM(DATA_LENGTH) + SUM(INDEX_LENGTH) FROM ...

随机推荐

  1. django 里面的更新数据(update)

    https://blog.csdn.net/qq_42606051/article/details/81162189 https://blog.csdn.net/luojie140/article/d ...

  2. mac查看python安装路径

    1.terminal : input: which Python 或者 which Python3 2.terminal: input : python  --->import sys  --- ...

  3. Eclipse快捷键 之 代码追踪

    在使用Java编写复杂一些的程序时,你会不会常常对一层层的继承关系和一次次方法的调用感到迷惘呢?幸亏我们有了Eclipse这么好的IDE可以帮我们理清头绪--这就要使用Eclipse强大的代码追踪功能 ...

  4. 学习Spring时用Idea中Maven Project创建一个子module出现了子pom.xml没有继承父pom.xml

    正常情况: 解决方法: 1.首先点击父项目右键 -->new-->Module 2.不用点击create from achetype直接点击next 3.在ArtifactId输入你要mo ...

  5. python- 粘包 struct,socketserver

    黏包 黏包现象 让我们基于tcp先制作一个远程执行命令的程序(命令ls -l ; lllllll ; pwd) res=subprocess.Popen(cmd.decode('utf-8'), sh ...

  6. docker--环境搭建

    我的电脑是win10,虽然现在win10开始也支持docker,但在linux机器会合适些,所以我先用VMware创建一个linux虚拟机--Centos7 安装虚拟机不多说,现在开始安装docker ...

  7. 【目录】mysql 进阶篇系列

    随笔分类 - mysql 进阶篇系列 mysql 开发进阶篇系列 55 权限与安全(安全事项 ) 摘要: 一. 操作系统层面安全 对于数据库来说,安全很重要,本章将从操作系统和数据库两个层面对mysq ...

  8. Groovy学习:第四章 Groovy特性深入

    作者:chszs 1. 断言 Java开发者常常使用JUnit或TestNG做单元测试,所以对断言是很清楚的.断言是用于验证假设的条件是否为真.在Groovy的断言中,如果假设的条件不为真,那么就会抛 ...

  9. ollvm 编译

    ollvm 的编译相对 llvm 更简单, 1:下载ollvm代码,去 https://github.com/obfuscator-llvm/obfuscator/tree/llvm-4.0 下载,并 ...

  10. BUUCTF RE部分题目wp

    RE 1,easyre拖进ida,得到flag 2,helloworld 将文件拖入apk改之理,得到flag 3,xor拖进ida,就是简单异或,写脚本 glo=[0x66,0x0a,0x6b,0x ...