一.数据库CDGS.

  增   create database 库名;

  删   drop 库名;

  改

    alter database 库名称 修改的属性名称;

  查

    show databases;#查看所有数据库.

    show create database 库名;#查看建库的语句

  命名规范:

    1.不能使用纯数字

    2.可以是数字 字母 下划线的组合

    3.可以下划线开头

    4.不能是关键字 如create

     大致和Python变量名相同

     !!!!!不区分 大小写

  表

  增

    use db1;#建表时要明确数据库

    create table 表名(字段名 类型(长度),......)

    create table 库名.表名(字段名 类型(长度),......)

  删

    drop table 表名;

  改

    alter table 表名 drop 字段名;#删除字段名

            change 旧的字段名 新的字段名 新的类型;#修改字段

            modify  字段名 新的类型;#修改字段  

            add 字段名称 类型; #添加字段名

  重命名

    rename table 旧表名 to 新表名;

  修改表的属性

    alter table 表名 属性名 值;

  查

    show tables;#查看所有表

    desc 表名; #查看表结构

    show create table 表名;#查建表语句  

  记录相关操作

    增 insert into 表名 values(值1,值2,....);

    删 delete from 表名 where 字段名称 = 值;

    改 update 表名 set 字段名 = 新的值 where 字段名 = 值;

    查 select * from 表名; *通配符 查看所有字段

      select 字段名1,字段名2.. from 表名;

二.数据类型

  整数类型

  默认有符号

  设置为无符号

    1.create table t2(age tinyint unsigned);

    2.建表后用alter修改

!!!!对于整数类型而言长度不是数据所占的字节数 是显示数据是的宽度(字符数)

默认情况下 存储的数值的十进制位数 小于所设置的显示宽度时 不会填充 没有任何效果

加上zerfill 指定当存储的数值的十进制位数  小于所设置的显示宽度时 用0填充

主要记住 整型后面的长度的含义 有自付是不同的

  tinyint

  smallint

  mediumint

  int

  bigint

总结:除了存储范围没啥区别

  都是整数

  默认有符号

  对于显示宽度 原理是相同的

  长度参数如果不指定 会有默认值

严格模式

  什么是严格模式 对插入的数据严格要求 不在范围内直接报错 例如往tinyint中插入大于255的值将报错

  什么是非严格模式 不 对插入的数据严格要求 不在范围也可以保存 保存的当前类型最大支持

  5.6默认是非严格模式

  5.6以后默认严格模式

  查看SQL模式

    select @@sql_mode;

    show varables like "sql_mode";

  修改SQL模式

    set @@sql_mode = "值";

  正常情况不需要改

  

  浮点类型

    float     4字节

    double  8字节

    decimal 不固定

    create table t9(num float(m,d))

    m 表示总长度 d 表示小数部分的长度

    长度表示不是数据存储范围 而是字符长度

    10.12 总长度4  小数部分2

    每个类型的最大长度

    float(255,30)

    double(255,30)

    decimal(65,30)

    区别:

      float与double的精度不同 都是不准确的小数

      decimal 准确的小数  不会丢失精度

    具体使用哪种类型得更具使用场景判断

    float满足大部分使用场景

    decimal适合银行系统 科学研究等

    括号中m和d的值 可以限制存储范围 与整型不同

    重点:记住m和d的含义

  字符串类型

    常用两种

    char   定长字符串

    varchar 可变长度字符串

    注意字符串中 长度指定是数据的字符长度 与字节没关系

    create table t13(c1 char,c2 varchar(10));

    在创建时 varchar必须指定长度 char有默认值

    不同点:

      a char(3) b char(3)

      A   |B   |

      char类型在取数据时 就根据长度来获取 不关心真实数据长度

      无论的数据有多长 占用的空间是固定的 造成了一定空间浪费

       a varchar(30) b varchar(30)

      (1)A(1)B

      varchar类型在取数据时 先获取数据长度 在根据长度获取真实数据 关心真实数据长度

      先存储长度需要一个字节 再存储真实数据 不会浪费空间

      但是 由于需要计算数据的长度 所以存取速度回比定长慢

    相同点:

      括号中的数字 都是表示存储最大自付长度

   char 使用评率更改

     mysql会在存储数据时自动将数据末尾的空格去掉

  

mysql会在存储数据时自动将数据末尾的空格去掉
如果必须要存空格 需要修改sql_mode 增加 PAD_CHAR_TO_FULL_LENGTH 意思是把空格当作有效数据

由于自动去除空格这个机制 在使用等于符号 和like时有区别
select *from t1 where name = "yh "; 会自动去除空格
select *from t1 where name like "yh "; 不会自动去除空格
like 用于模糊匹配 使用%表示0或任意个任意字符 使用_表示一个任意字符

日期和时间
year
time
date
datetime *****
timestamp *****
timestamp特点是:可以给null 自动输入当前时间 当这条记录被修改了会自动更新当前时间

枚举
enum 可以指定一堆字符串的值 在插入数据时 数据必须这堆字符串中的其中一个 ("男的","女的") 多选一

集合
set 可以指定一堆字符串的值 在插入数据时 数据必须这堆字符串中的其中一个或多个 ("男的","女的") 多选多

共同点:数据都是字符串类型

3.约束****
是一种对数据限制
已经学习过的 数据类型 unsigned无符号 字符串长度 浮点的长度

约束的作用是?
为了保证数据的正确性,完整性
例如要存储密码 char(20) 只限制了类型和长度, 无法保证数据的正确性

额外的约束
语法:
创建时指定约束
create table 表名称(字段名 类型(长度) 约束名称1 约束名称n,....)
后期修改的方式添加 约束
alter table 表名称 modify 字段名 类型(长度) 约束名称1 约束名称n,....

NOT NULL 非空约束 限制该字段的值不能为空
UNIQUE 唯一性约束 限制该字段的值是唯一的不能出现重复
DEFAULT 默认值约束 如果插入数据时没有指定该字段的值则使用默认值
PRIMARY KEY 主键约束 限制该字段 不能为空 并且是唯一的 可以唯一标识一条数据 *****
FOREIGN KEY 外键约束 用来指向另一个表的主键

每一个表都应该有一个主键 需要唯一标识 否则可以可能出现完全相同的两个数据 无法区分
UNIQUE 不能重复 但是可以为空 这样也不能唯一标识
UNIQUE NOT NULL 不能为空且唯一 可以唯一标识一条数据 书写顺序无所谓

UNIQUE NOT NULL 与 主键的区别
UNIQUE NOT NULL 不能被其他表引用 (不能作为其它表的外键)
UNIQUE NOT NULL 约束一个表中可以有多个 但是主键只能有一个

索引:用于加速查询
InnoDB 中 索引是树形结构
为了提高查询效率 InnoDB为找一个不为空 且唯一的字段作为主键
如果表中不存在这样的字段 会自动帮你建一个隐藏主键字段 但是无法提升查询效率

只要是使用innoDB 就应该为每个表指定一个非空 且唯一的字段
InnoDB阻止数据时 首先使用主键 如果没有主键 找一个非空且唯一 如果也没有 建一个隐藏字段

多字段联合主键: 不常用
学生表 stu_id course_id 做为联合主键
1 1 已有数据
1 2 可以插入
2 1 可以插入
1 1 不能插入
只有当两个字段都重复才算重复

当一个表中 由于业务需求没有一个非空且唯一的字段时 我们可以建一个新的字段专门作为主键
管理主键的值挺麻烦的 你得记录上一次的主键值
mysql可以帮你自动管理主键 auto_increment 自动增长
auto_increment 只能用于整型字段 并且该字段必须具备索引
所以 通常 主键都会加上auto_increment

手动修改自动增长计数
alter table 表名 auto_increment 新的值;
注意:如果新的值小于当前的最大值 是无效的

通常建一个表就要建一个主键 主键的类型通常是整型

insert 语句
insert into 表名 values(值1,值n,....)
要求值得顺序 个数 必须与表字段完全对应
另一种写法
insert into 表名(字段名1,字段名n,....) values(值1,值n,....)
可以选择性得插入某些字段 要求值得顺序 必须与表名后面声明得字段一致

存储引擎
发动机
汽油机
柴油机 柴油价格便宜 动力还强 噪音大 不完全燃烧

电机 加速快 噪音小 续航问题

一个产品或服务的核心部分称之为引擎
mysql的核心功能存取数据
mysql存储引擎就是负责存取数据那一段代码

作业:

1.int(10) 该数据类型占几个字节,10的含义是什么?

4 ,最小显示位数
2.总结char 和varchar的区别以及优缺点:

char不可变,速度快,资源浪费

varchar可变 ,熟读慢,节约资源

3.float(10,5) 能存储的最大数据是多少

99999.99999
4 创建学生表:有学生 id,姓名,密码,年龄 默认密码000000 性别必须是w 或 m 姓名 密码不能为空

Create table student4(id int primary key,name char(4) not null,psw char(6) default "000000" not null,age int,sex enum("m","w"));

5 创建学校表:有学校id,学校名称,地址 校区不能重复

Create table school(id int primary key,name char(4) not null,campus char(10)unique,address char(10) unique);
6 创建课程表:有课程id,课程名称,课程价格,课程周期,所属校区(其实就是学校id) 校区不能为空,

Create table cscb(id int primary key,name char(4) ,price int not null,cycle float(2,1),campus char(10),
foreign key (campus) references school(id)
);

添加学生:张三,20岁,密码123
李四,18岁,密码111
创建学校:oldboyBeijing 地址:北京昌平
oldboyShanghai 地址:上海浦东
创建课程:Python全栈开发一期,价格2w, 周期5个月,属于上海校区
Linux运维一期 价格200,周期2个月,属于上海校区
Python全栈开发20期 ,价格2w,周期5个月,属于北京校区

MySQL数据类型 约束的更多相关文章

  1. Database学习 - mysql数据类型约束

    mysql数据类型 - 属性

  2. mysql 数据类型+约束+关联

    1.什么是存储引擎存储引擎就是表的类型,针对不同的存储引擎,mysql会有不同的处理逻辑 2.存储引擎介绍InnoDB| DEFAULT | Supports transactions, row-le ...

  3. Mysql 数据类型、约束类型

    mysql数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型.   数值类型 MySQL支持所有标准 ...

  4. MySQL 数据类型简介 创建数据表及其字段约束

    数据类型介绍 MySQL 数据类型分类 整型 浮点型 字符类型(char与varchar) 日期类型 枚举与集合 具体数据类型见这篇博客 MySQL表操作中的约束 primary key 主键约束 非 ...

  5. MySQL数据类型——数值类型

    1.1.1 整型 整型 占用字节 范围 范围 tinyint 1 -27~27-1 -128~127 smallint 2 -215~215-1 -32768~32767 mediumint 3 -2 ...

  6. MYSQL中约束及修改数据表

    MYSQL中约束及修改数据表 28:约束约束保证数据的完整性和一致性约束分为表级约束和列级约束约束类型包括:    NOT NULL(非空约束)    PRIMARY KEY(主键约束)    UNI ...

  7. mysql数据类型简介

    MySQL的数据表类型很多,其中比较重要的是MyISAM,InnoDB这两种. 这两种类型各有优缺点,需要根据实际情况选择适合的,MySQL支持对不同的表设置不同的类型.下面做个对比: MyISAM表 ...

  8. MySQL(数据类型和完整约束)

    MySQL数据类型 MySQL支持多种数据类型,主要有数值类型.日期/时间类型和字符串类型. 1.数值数据类型 包括整数类型TINYINT.SMALLINT.MEDIUMINT.INT.BIGINT. ...

  9. Database学习 - mysql数据类型

    MySQL数据类型 可以被分为3类: 1.整型,数值类型 2.日期和时间类型 3.字符串(字符)类型 整型(INT) 数据类型 大小 M(默认值) 范围(有符号) 范围(无符号) 用途 tinyint ...

随机推荐

  1. Vue:选中商品规格改变字体和边框颜色(默认选中第一种规格)

    效果图: CSS: <div class="label"> <p>标签类别</p> <ul> <li v-for=" ...

  2. 激活WebStorm2017.3.1

    亲测有效,测试日期:20181202 转发自:https://blog.csdn.net/bjzhaoxiao/article/details/81486490

  3. MessagePack Java 0.6.X 动态类型

    我们知道 Java 是一个静态类型的语言.通过输入 Value MessagePack能够实现动态的特性. Value 有方法来检查自己的类型(isIntegerType(), isArrayType ...

  4. Centos 7自定义屏幕分辨率

    $ xrandrScreen 0: minimum 1 x 1, current 1680 x 900, maximum 8192 x 8192Virtual1 connected primary 1 ...

  5. 7.9模拟赛T1图的遍历(dfs)

    图的遍历(dfs) [题目描述] 对于一个有向图G来说,我们存在一个经典的遍历算法,就是DFS (深度优先搜索遍历).将G以1号点为起点进行DFS后,我们可以 得到G的一棵DFS遍历树T.就此,我们可 ...

  6. LOJ #2731 [JOI2016春季合宿]Solitaire (DP、组合计数)

    题目链接 https://loj.ac/problem/2731 题解 首先一个很自然的思路是,设\(dp[i][j]\)表示选了前\(i\)列,第\(2\)行第\(i\)列的格子是第\(j\)个被填 ...

  7. 费马小定理证明 (copy的,自己捋清楚)

    费马小定理:假如p是质数,且gcd(a,p)=1,那么 a^(p-1)≡1(mod p) 证明(copy的百度百科,加点自己的解释) 引理1. 若a,b,c为任意3个整数,m为正整数,且(m,c)=1 ...

  8. 部分和问题(dfs)

    部分和问题 描述 给定整数a1.a2........an,判断是否可以从中选出若干数,使它们的和恰好为K. 输入 首先,n和k,n表示数的个数,k表示数的和.接着一行n个数.(1<=n<= ...

  9. C++入门经典-例6.21-比较string字符串,比较两个字符串

    1:使用“>”.“!=”.“>=”等比较运算符可以比较两个字符串的内容.比较的方法是将两个string字符串从头开始比较每一个字符,直到出现两者不一致.比较这两个不相同的字符的字面值,得出 ...

  10. TCP层recvmsg系统调用的实现分析

    概述 recvmsg系统调用在tcp层的实现是tcp_recvmsg函数,该函数完成从接收队列中读取数据复制到用户空间的任务:函数在执行过程中会锁定控制块,避免软中断在tcp层的影响:函数会涉及从接收 ...