登陆mysql

# mysql -uroot -p123456

# 显示数据库

SHOW DATABASES;

# 创建数据库

CREATE DATABASE test;

# 显示数据库中的表

SHOW TABLES;

# 创建pet表

CREATE TABLE pets (

name VARCHAR(20),

owner VARCHAR(20),

species VARCHAR(20),

sex CHAR(1),

birth DATE,

death DATE

) character set = utf8;

# 显示表结构

DESC pets;

# 插入数据

INSERT INTO pets VALUES ('旺财2', '周星驰2', 'a', 'a', '1990-01-01', NULL);

INSERT INTO pets VALUES ('旺财3', '周星驰3', 'b', 'b', '1990-01-01', NULL);

INSERT INTO pets VALUES ('旺财4', '周星驰4', 'c', 'c', '1990-01-01', NULL);

INSERT INTO pets VALUES ('旺财5', '周星驰5', 'd', 'd', '1990-01-01', NULL);

INSERT INTO pets VALUES ('旺财6', '周星驰6', 'e', 'e', '1990-01-01', NULL);

INSERT INTO pets VALUES ('旺财7', '周星驰7', 'f', 'f', '1990-01-01', NULL);

INSERT INTO pets VALUES ('旺财8', '周星驰8', 'g', 'g', '1990-01-01', NULL);

# 查询

SELECT * FROM pets;

# 删除数据

DELETE FROM pets WHERE name='旺财2';

# 修改数据

UPDATE pets SET name='旺旺财' WHERE owner='周星星';

常用数据类型

# 数值

# TINYINT          1 字节    小整数值

# # SMALLINT       2 字节    大整数值

# MEDIUMINT        3 字节    大整数值

# INT或INTEGER  4 字节    大整数值

# BIGINT          8 字节    极大整数值

# FLOAT            4 字节    单精度

# DOUBLE           8 字节    双精度

# DECIMAL  对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2

# 日期/时间

# DATE 3  1000-01-01/9999-12-31  YYYY-MM-DD 日期值

# TIME 3  '-838:59:59'/'838:59:59'   HH:MM:SS   时间值或持续时间

# YEAR 1  1901/2155  YYYY   年份值

# DATETIME 8  1000-01-01 00:00:00/9999-12-31 23:59:59    YYYY-MM-DD HH:MM:SS    混合日期和时间值

# TIMESTAMP    4   1970-01-01 00:00:00/2038    结束时间是第 2147483647 秒

#         北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07

#         YYYYMMDD HHMMSS 混合日期和时间值,时间戳

# 字符串

# CHAR 0-255字节    定长字符串

# VARCHAR  0-65535 字节 变长字符串

# TINYBLOB 0-255字节    不超过 255 个字符的二进制字符串

# TINYTEXT 0-255字节    短文本字符串

# BLOB 0-65 535字节 二进制形式的长文本数据

# TEXT 0-65 535字节 长文本数据

# MEDIUMBLOB   0-16 777 215字节 二进制形式的中等长度文本数据

# MEDIUMTEXT   0-16 777 215字节 中等长度文本数据

# LONGBLOB 0-4 294 967 295字节  二进制形式的极大文本数据

# LONGTEXT 0-4 294 967 295字节  极大文本数据

mysql建立表约束

# 主键约束

CREATE table user (

id int primary key,

name varchar(20)

) character set = utf8;

INSERT INTO user values(1, '张三');

# 联合主键

# id和name在一起不重复就行

CREATE table user2 (

id int,

name varchar(20),

password varchar(20),

primary key (id, name)

) character set = utf8;

INSERT into user2 values (1, '张三', '123');

INSERT into user2 values (2, '张三', '123');

INSERT into user2 values (1, '李四', '123');

# id 和 name与第一项相同

INSERT into user2 values (1, '张三', '123');

# 联合组件任何一项都不能为NULL

INSERT into user2 values (NULL, '张三', '123');

# 自增约束

CREATE table user3 (

id int primary key auto_increment,

name varchar(20)

) character set = utf8;

INSERT INTO user3 (name) values ('张三'); # 连续执行三次

# 忘记创建组件约束的情况

CREATE table user4 (

id int,

name varchar(20)

) character set = utf8;

ALTER table user4 add primary key auto_increment(id); # 补充添加自增主键约束

ALTER table user4 drop primary key; # 删除主键约束

ALTER table user4 modify id int primary key auto_increment; # 修改某一个字段为自增主键

desc user4;

# 唯一约束

# 约束该字段的值不能重复

CREATE table user5 (

id int,

name varchar(20)

) character set = utf8;

alter table user5 add unique(name);

INSERT into user5 (name) values ('张三'); # 连续执行两次

CREATE table user6 (

id int,

name varchar(20),

unique(name)

) character set = utf8;

CREATE table user7 (

id int,

name varchar(20) unique

) character set = utf8;

# 联合唯一约束

CREATE table user8 (

id int,

name varchar(20),

unique(id, name)

) character set = utf8;

# 删除唯一约束

alter table user7 drop index name;

# 添加唯一约束

alter table user7 modify name varchar(20) unique;

# 非空约束

CREATE table user9 (

id int,

name varchar(20) not null

) character set = utf8;

# 默认约束

# 当我们插入字段的时候,如果没有传值,就会用默认约束

CREATE table user10 (

id int,

name varchar(20) not null,

age int default 10

) character set = utf8;

# 外键约束

# 涉及到两个表:父表、子表

CREATE table classes(

id int primary key,

name varchar(20)

) character set = utf8;

CREATE table students(

id int primary key,

name varchar(20),

class_id int,

foreign key(class_id) references classes(id)

) character set = utf8;

INSERT INTO classes values (1, '一班');

INSERT INTO classes values (2, '二班');

INSERT INTO classes values (3, '三班');

INSERT INTO classes values (4, '四班');

INSERT INTO students values (1001, '张三', 1);

INSERT INTO students values (1002, '李四', 2);

INSERT INTO students values (1003, '王五', 3);

INSERT INTO students values (1004, '赵六', 4);

# id 为5的班级不存在,所以报错

INSERT INTO students values (1005, '钱七', 5);

# 不能删除父表中的数据,因为这个数据子表要关联

DELETE FROM classes WHERE id = 4;

数据库的三大设计范式

# 1NF: 数据表中的所有字段都是不可分割的原子值?

CREATE table student2 (

id int primary key,

name varchar(20),

address varchar(30)

) character set = utf8;

INSERT INTO student2 VALUES(1, '张三', '中国辽宁省沈阳市高新区...');

INSERT INTO student2 VALUES(2, '李四', '中国吉林省长春市高新区...');

INSERT INTO student2 VALUES(3, '王五', '中国黑龙江省哈尔滨市高新区...');

# 中国辽宁省沈阳高新区... 这个字段值是可以继续拆分的:中国=>辽宁省=>沈阳市=>高新区...

# 修改后

CREATE table student3 (

id int primary key,

name varchar(20),

country varchar(20),

province varchar(20),

city varchar(20),

detail varchar(60)

) character set = utf8;

INSERT INTO student3 VALUES(1, '张三', '中国', '辽宁省', '沈阳市', '高新区...');

INSERT INTO student3 VALUES(2, '李四', '中国', '吉林省', '长春市',' 高新区...');

INSERT INTO student3 VALUES(3, '王五', '中国', '黑龙江省', '哈尔滨市', '高新区...');

# 设计的越详细,对于某些实际操作可能越好,但是不一定都是好处

# 具体要根据项目的需求而定

# 2NF:必须满足1NF的前提下,除主键外的第一列都必须满足依赖与主键。

# 如果要出现不完全依赖,只可能发生在联合主键的情况下。

CREATE TABLE orders(

product_id int,

customer_id int,

product_name varchar(20),

customer_name varchar(20),

primary key(product_id, customer_id)

) character set = utf8;

# 问题?

# 除主键以外的其他列,只依赖与主键的部分字段。

# 所以上面的例子需要拆表:

CREATE TABLE orders(

order_id int primary key,

product_id int,

customer_id int

) character set = utf8;

CREATE TABLE product(

id int primary key,

name varchar(20)

) character set = utf8;

CREATE TABLE customer(

id int primary key,

name varchar(20)

) character set = utf8;

# 分成三个表之后,就满足第二范式

# 3NF:必须满足2NF,除主键列的其他列之间不能有传递依赖关系。

CREATE TABLE orders(

order_id int primary key,

product_id int,

customer_id int,

customer_phone varchar(15)

) character set = utf8;

# 修改为:

CREATE TABLE orders(

order_id int primary key,

product_id int,

customer_id int

) character set = utf8;

CREATE TABLE customer(

id int primary key,

name varchar(20),

phone varchar(15)

) character set = utf8;

# 总结:

# 也就是在每列不能拆分的情况下(1NF),

# 其他列必须依赖主键的全部(2NF),

# 且只依赖于主键的全部(3NF)

mysql约束类型 A P_mysql笔记: 数据类型、约束、范式相关推荐

  1. mysql time类型解析_mysql时间数据类型解析

    1.MySQL的五种日期和时间类型 MySQl中有多种表示日期和时间的数据类型.其中YEAR表示年份,DATE表示日期,TIME表示时间,DATETIME和TIMESTAMP表示日期和实践.它们的对比 ...

  2. Mysql数据库---约束类型_mysql数据库的数据类型及约束

    1.整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节  范围(-128~127) smallint(m) 2个字节  范围(-32768~32767) mediumint(m) ...

  3. mysql 体重 类型 身高_MySQL常用数据类型

    上篇文章我们讲到MySQL的常用命令,那么这篇文章我们分享一下MySQL数据库常用的数据类型有哪些,生产环境下我们在建表的时候,我们都是需要根据数据的类型去创建我们的表字段的,那么表字段的类型在我们数 ...

  4. mysql各类型长度_mysql 各数据类型的大小及长度

    Android RecyclerView 的简单使用 Android L SDK发布的,新API中最有意思的就是RecyclerView (后面为RV) 和 CardView了, 按照官方的说法, R ...

  5. Mysql数据库---约束类型

    Mysql数据库的约束类型有:主键约束(Primary Key),外键约束(Foreign Key),非空约束(Not Null),唯一性约束(Unique),默认约束(Default). 一.主键约 ...

  6. oracle常用的约束条件类型,oracle数据库的5种约束类型

    oracle 数据库 数据表的5个约束类型: 1.主键约束 2.外键约束 3.唯一约束 4.检查约束 5.非空约束 F 主键约束:用来唯一标示表中的一个列,一个表中的主键约束只能有一个,但是可以在一个 ...

  7. mysql 将字符串转换数字类型的_MySQL 字符串类型用数字可以查出来 MySQL字符串类型会转换成数字 MySQL隐式类型转换...

    一.发现问题 1.在一次MySQL查询中,某字段为 varchar 字符串类型,传入参数值为 int 数字类型,发现查询的结果和预期的不一致. 如: 某两列 name='11' , name = '1 ...

  8. MySQL 约束类型

    # MySQL 约束类型 约束实际上就是表中数据的限制条件,它通过对表的行或列的数据做出限制,来确保表的数据的完整性.唯一性.比如name字段中要让其用户名不重复,这就需要添加约束.或者必须注册的时候 ...

  9. 《SQL高级应用和数据仓库基础(MySQL版)》学习笔记 ·003【表的约束、表的CRUD操作(DDL语句)】

    文章目录 一.表的约束 1.约束类型 2.添加约束 二.表的CRUD操作(DDL语句) 1.C(Create):创建 2.R(Retrieve):查询 3.U(Update):更新 4.D(Delet ...

最新文章

  1. [收集] C++ memset ,memcpy 和strcpy 的区别
  2. 小波变换理解:消失矩、支撑长度的理解
  3. C语言实现字符串匹配的Rabin-Karp算法(附完整源码)
  4. Cloudstack安装(二)
  5. postgresql interval 字段拼接
  6. mysql实现主从复制的方式_mysql实现主从复制、读写分离的配置方法(二)
  7. 九度 1532:棋盘寻宝扩展(背包方案统计)
  8. HSF框架日常问题记录1
  9. SAN(存储区域网络),WWN, WWPN,WWNN区别
  10. 【解决】如何将腾讯QLV格式的视频转换成MP4
  11. 会议记录管理系统(6) - 查找会议记录模块设计
  12. 编译go文件时内部包引用受限的问题(use of internal package /PATH/ not allowed)
  13. mysql表文件与结构_MySQL文件结构、逻辑架构及sql执行流程分析
  14. 关于python机器学习cross_val_score()交叉检验的参数cv实际默认为5这件事,你怎么看?
  15. java大数据量调优(超赞值得收藏)
  16. 【数学基础】KKT条件
  17. android onCreate与onCreateView的区别
  18. 基于WebSocket实现网页聊天室
  19. zlib minizip 压缩与解压缩
  20. 记一次 .NET 某电子病历 CPU 爆高分析

热门文章

  1. CentOS6.4之Linux软件包管理
  2. 【算法导论】第7章快速排序
  3. DM***+OSPF测试
  4. 巨人的前瞻:独家专访IBM磁盘存储CTO
  5. 如何学习HTML语言
  6. 你和数据分析大神之间,就差这7个沟通技巧
  7. 数字化转型的4个阶段,从报表到可视化再到数据平台,谁更重要?
  8. 我更爱荷叶freeeim
  9. 【飞秋】ASP.NET 之 常用类、方法的超级总结,并包含动态的EXCEL导入导出功能,奉上类库源码
  10. 如何让程序异常退出后重启