mysql常用操作(一)

【数据库设计的三大范式】
1、第一范式(1NF):数据表中的每一列,必须是不可拆分的最小单元。也就是确保每一列的原子性。
例如:userInfo:'山东省烟台市 18865518189' 应拆分成 userAds='山东省烟台市' userTel='18865518189'
2、第二范式(2NF):满足1NF后,要求:表中的所有列都必须依赖于主键,而不能有任何一列与主键没有关系,也就是说,一个表只描述一件事情;
例如:订单表,只能描述订单相关的信息,所以所有的字段都必须与订单ID相关
产品表,只能描述产品相关的信息,所以所有的字段都必须与产品ID相关
因此,不能在一张表中同时出现订单信息与产品信息
3、第三范式(1NF):满足2NF后,要求:表中每一列都要与主键直接相关,而不是间接相关,(表中的每一列,
只能依赖于主键)
例如:订单表中,需要有客户相关信息,在分离出客户表之后,订单表中,只需要有一个客户id即可。
而不能有其他的客户信息。因为其他的用户信息是直接关联于用户ID,而不是关联于订单ID

【第二范式与第三范式的本质区别】
在于有没有分出两张表,第二范式是说一张表中包含了多种不同实体的属性,必须要分成多张表,
第三范式是要求已经分好了多张表的话,那么一张表中只能有另一张表的ID,而不能有其他的任何信息,(其他的任何信息,一律用主键在另一张表查询)

创建表

CREATE TABLE IF NOT EXISTS tb1( id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,`name` VARCHAR(255) NOT NULL, age SMALLINT UNIQUE,height DOUBLE(3,2) DEFAULT 1.2
-- PRIMARY KEY(id)
);

 

定义列:列名 数据类型 列定义关键字
name是系统关键字,所以使用反引号包裹
IF NOT EXISTS可以省略,省略后若表已存在,重复创建时会报错
常见的列定义关键字:
UNSIGNED: 设置列 为 无符号列,只能设置类型为数字类型的列
PRIMARY KEY:设置主键约束
AUTO_INCREMENT:设置为自动增长列,自动增长列必须是主键

【主键】
1、主键的注意事项:主键默认非空!只有逐渐才能设置自动增长(逐渐不一定自增,自增一定是主键)
2、设置方式:① 在列定义是设置:id INT UNSIGNED PRIMARY KEY
② 在列定义完成后设置:PRIMARY KEY(id)
PRIMARY KEY:设置主键约束
NOT NULL:设置列为非空约束
UNIQUE:设置唯一性约束。该字段不能出现重复值
DEFAULT:设置默认值约束,height DOUBLE(3,2) DEFAULT 1.2 height如果不输入,默认1.2
FOREIGN  KEY:设置外键约束。

【外键】
1、设置外键有哪些注意事项?
① 只有INNODB的数据库引擎支持外键,修改my.ini文件
② 外键与参照列的数据类型必须相同(数值型要求长度和无符号都相同,字符串要求类型相同,长度可不同)
③ 设置外键的字段必须要有索引,如果没有索引,设置外键时会自动生成索引,删除该外键时,需删除索引
2、设置外键的语法
[CONSTRAINT 外键名] FOREIGN KEY(外键字段) REFERENCES 参照表(参照字段)[ON DELETE SET NULL ON UPDATE CASCADE]-- 设置参照完整性
3、外键约束的参照操作
参照操作:当对参照表的参照字段进行删除或更新时,外检表中的外键如何应对。
参照操作可选值:RESTRICT 拒绝参照表删除或更新参照字段
NO ACTION 与 RESTRICT相同,但这个指令只在MySQL有效
CASCADE 删除或更新参照表的参照字段时,外键表的记录同步删除更新
SET NULL 删除或更新参照表的参照字段时,外键表的外键设为NULL

-- 修改表名 ALTER TABLE 旧表名 RENAME [TO] 新表名;
ALTER TABLE tb2 RENAME TO tb3;-- 同时修改多表 RENAME TABLE tb3 TO tb1[,`USER` to user1];
RENAME TABLE tb3 TO tb1,`USER` to user1;-- 修改字段 列
-- ALTER TABLE 表名 CHANGE 旧列名 新列名 列定义 [FIRST|AFTER 某一列];
-- FIRET:将这个字段调整为表格第一列  AFTER 某一列:将这个字段放到某一列后面
ALTER TABLE tb1 CHANGE `name` `username` VARCHAR(200) NOT NULL AFTER age;-- 只修改列定义,不能改名
ALTER TABLE tb1 MODIFY `username` VARCHAR(200) NOT NULL AFTER age;-- 删除表中某一列
ALTER TABLE tb1 DROP height;-- 新增一列,default可选,往后可选
ALTER TABLE tb1 ADD height DOUBLE(8,2) DEFAULT 1.2 AFTER age;-- 新增多列,不能调整列的位置,只能插在最后
ALTER TABLE tb1 ADD(weight DOUBLE(3,2) UNSIGNED,school VARCHAR(255)
);-- 增加主键约束
ALTER TABLE tb1 ADD PRIMARY KEY(id);-- 删除主键约束
ALTER TABLE tb1 DROP PRIMARY KEY;-- 添加唯一性约束
ALTER TABLE tb1 ADD UNIQUE KEY(username);-- 删除唯一性约束:由于创建唯一性约束会默认创建索引,所以删除时,需删除索引
ALTER TABLE tb1 DROP INDEX username;-- 设置默认值约束
ALTER TABLE tb1 ALTER age SET DEFAULT 20;-- 删除默认值约束
ALTER TABLE tb1 ALTER age DROP DEFAULT;-- 设置外键约束:ALTER TABLE tb1 ADD FOREIGN KEY(clsid) REFERENCES classes(id) [ON DELETE SET NULL ON UPDATE CASCADE];ALTER TABLE tb1 ADD FOREIGN KEY(clsid) REFERENCES classes(id) ON DELETE SET NULL ON UPDATE CASCADE;-- 删除外键约束,由于创建外键时会默认创建索引,所以删除外键后,要删除索引
ALTER TABLE tb1 DROP FOREIGN KEY user_fk_classes;
ALTER TABLE tb1 DROP INDEX user_fk_classes;

 

【SQL语句的组成】
DML 数据操作语言(插入、删除和修改数据库中的数据) INSERT UPDATE DELETE
DQL 数据查询语言(用来查询数据库中的数据) SELECT
DCL 数据控制语言(用来控制存取许可、存取权限等) GRANT REVOKE
DDL 数据定义语言(用来建立数据库、数据库对象和定义表的列) CREATE DROP

-- 数据插入语句 INSERT
-- INSERT [INTO] 表名 [列名] VALUES (列值)[,(列值),……]
-- 注意:如果省略列名,则后面的列值必须为所有的列赋值,包括自增列和默认列;如果不省略列名,则后面的列值需要与前面的列名一一对应;并且需要给所有非NULL列赋值
INSERT INTO tb1 (username,age,sex) VALUES ("张三",12,"女");
INSERT tb1 VALUES (7,"张三",12,"女");
INSERT INTO tb1 (username,age,sex) VALUES ("张三",12,"女"),("张三",12,"女");
INSERT INTO tb1 (username,age,sex) VALUES ("张张",12,"女");

 

-- 数据更新语句
-- UPDATE 表名 SET 列名=列值[,列名=列值,……] [WHILE 条件]
-- WHERE条件可以省略,但是表示修改表中所有的行
UPDATE tb1 SET sex="男"
UPDATE tb1 SET username="李二狗",age=18,sex="女" WHERE id=8

【常见where条件判断】
1、关系运算符:> < <> = != >= <=
2、逻辑运算:NOT AND OR
3、ISNULL(字段) 检测是否为空
SELECT * FROM tb1 WHERE ISNULL(age); --所有年龄为空的用户
4、BETWEEN …… AND ……介于两个值之间
SELECT * FROM tb1 WHERE age BETWEEN 10 AND 13;
5、IN 在某些值之间的数据
SELECT * FROM tb1 WHERE id in(1,3,5,7,9);
6、LIKE :相似匹配
① 相似匹配时,使用%表示任意字符个数(0到多个)
SELECT * FROM tb1 WHERE username LIKE "张%"; 用张开头
SELECT * FROM tb1 WHERE username LIKE "%张%"; (任意位置包含张)
SELECT * FROM tb1 WHERE username LIKE "%张"; 用张结尾
② 相似匹配时,使用_表示一个字符的个数
SELECT * FROM tb1 WHERE username LIKE "_张%"; 第二个字是张
7、EXISTS(子查询语句):如果子查询语句返回数据>=1行,EXISTS返回true,否则返回false
SELECT * FROM tb1 WHERE EXISTS(SELECT * FROM tb2);--如果tb2返回至少1行数据,则条件成立,返回tb1
8、ALL(子查询):子查询返回的数据,需要全部满足,才能成立
SELECT * FROM tb1 WHERE username !=ALL(SELECT username FROM tb1 WHERE id>7);--用户名 不能等于 子查询返回用户名列表中的任意一个
9、ALL(子查询):子查询返回的数据,满足其中一个,即可成立
SELECT * FROM tb1 WHERE username =ANY(SELECT username FROM tb1 WHERE id>7);--用户名 等于 子查询返回用户名列表中的任意一个


删除表中数据
DELETE [FROM] tb1 WHERE username LIKE "_张%";

数据查询语句
SELECT 列名,[列名,……] FROM 表名 ORDER BY id 排序的列名 ASC/DESC;
SELECT * 表示查询所有字段
ORDER BY表示对查出的数据进行排序,必须在where后面

-- 列表达式
-- 根据已有的列,查询出来的结果,我们使用case结构虚拟出来的列,称为列表达式-- AS关键字
-- 用于给列名起别名,AS关键字还可以省略
SELECT username AS '名字',sex AS '性别',age,( -- 给username列起别名“名字” , sex列起别名“性别”CASE -- case表示判断的开始WHEN sex="男" THEN 1 -- 如果查询出sex是男,则虚拟的列表达式的值就是1WHEN sex="女" THEN 2ELSE 3 -- 上面所有都不成立时,列表达式值为3END -- END表示判断的结束
) AS sexno FROM tb1; -- 给虚拟出的这一列,起别名叫sexno-- DISTINCT 对查询后的结果去重(消除重复列)

 

转载于:https://www.cnblogs.com/pandapang/p/7078304.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392305.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pmp 成本估算准确高_如何更准确地估算JavaScript中文章的阅读时间

pmp 成本估算准确高by Pritish Vaidya通过Pritish Vaidya 准确估算JavaScript中篇文章的阅读时间 (Accurate estimation of read time for Medium articles in JavaScript) 介绍 (Introduction) Read Time Estimate is the estimation of the time taken by the reader to rea…

Android数据适配-ExpandableListView

Android中ListView的用法基本上学的时候都会使用&#xff0c;其中可以使用ArrayAdapter&#xff0c;SimpleAdapter&#xff0c;BaseAdapter去实现&#xff0c;这次主要使用的ExpandableListView展示一种两层的效果&#xff0c;ExpandableListView是android中可以实现下拉list的…

JavaWeb 命名规则

命名规范命名规范命名规范命名规范 本规范主要针对java开发制定的规范项目命名项目命名项目命名项目命名 项目创建&#xff0c;名称所有字母均小写&#xff0c;组合方式为&#xff1a;com.company.projectName.component.hiberarchy。1. projectName&#xff1a;项目名称2. com…

多元概率密度_利用多元论把握事件概率

多元概率密度Humans have plenty of cognitive strengths, but one area that most of us struggle with is estimating, explaining and preparing for improbable events. This theme underpins two of Nassim Taleb’s major works: Fooled by Randomness and The Black Swa…

nginx php访问日志配置,nginx php-fpm 输出php错误日志的配置方法

由于nginx仅是一个web服务器&#xff0c;因此nginx的access日志只有对访问页面的记录&#xff0c;不会有php 的 error log信息。nginx把对php的请求发给php-fpm fastcgi进程来处理&#xff0c;默认的php-fpm只会输出php-fpm的错误信息&#xff0c;在php-fpm的errors log里也看不…

阿里的技术愿景_技术技能的另一面:领域知识和长期愿景

阿里的技术愿景by Sihui Huang黄思慧 技术技能的另一面&#xff1a;领域知识和长期愿景 (The other side of technical skill: domain knowledge and long-term vision) When we first start our careers as software engineers, we tend to focus on improving our coding sk…

leetcode 721. 账户合并(并查集)

给定一个列表 accounts&#xff0c;每个元素 accounts[i] 是一个字符串列表&#xff0c;其中第一个元素 accounts[i][0] 是 名称 (name)&#xff0c;其余元素是 emails 表示该账户的邮箱地址。 现在&#xff0c;我们想合并这些账户。如果两个账户都有一些共同的邮箱地址&#…

es6重点笔记:数值,函数和数组

本篇全是重点&#xff0c;捡常用的怼&#xff0c;数值的扩展比较少&#xff0c;所以和函数放一起&#xff1a; 一&#xff0c;数值 1&#xff0c;Number.EPSILON&#xff1a;用来检测浮点数的计算&#xff0c;如果误差小于这个&#xff0c;就无误 2&#xff0c;Math.trunc()&am…

SMSSMS垃圾邮件检测器的专业攻击

Note: The methodology behind the approach discussed in this post stems from a collaborative publication between myself and Irene Anthi.注意&#xff1a; 本文讨论的方法背后的方法来自 我本人和 Irene Anthi 之间 的 合作出版物 。 介绍 (INTRODUCTION) Spam SMS te…

php pdo 缓冲,PDO支持数据缓存_PHP教程

/*** 作者&#xff1a;初十* QQ&#xff1a;345610000*/class myPDO extends PDO{public $cache_Dir null; //缓存目录public $cache_expireTime 7200; //缓存时间&#xff0c;默认两小时//带缓存的查询public function cquery($sql){//缓存存放总目录if ($this->cache_Di…

mooc课程下载_如何使用十大商学院的免费课程制作MOOC“ MBA”

mooc课程下载by Laurie Pickard通过劳里皮卡德(Laurie Pickard) 如何使用十大商学院的免费课程制作MOOC“ MBA” (How to make a MOOC “MBA” using free courses from Top 10 business schools) Back when massive open online courses (MOOCs) were new, I started a proje…

leetcode 1584. 连接所有点的最小费用(并查集)

给你一个points 数组&#xff0c;表示 2D 平面上的一些点&#xff0c;其中 points[i] [xi, yi] 。 连接点 [xi, yi] 和点 [xj, yj] 的费用为它们之间的 曼哈顿距离 &#xff1a;|xi - xj| |yi - yj| &#xff0c;其中 |val| 表示 val 的绝对值。 请你返回将所有点连接的最小…

Nagios学习实践系列

其实上篇Nagios学习实践系列——基本安装篇只是安装了Nagios基本组件&#xff0c;虽然能够打开主页&#xff0c;但是如果不配置相关配置文件文件&#xff0c;那么左边菜单很多页面都打不开&#xff0c;相当于只是一个空壳子。接下来&#xff0c;我们来学习研究一下Nagios的配置…

在Salesforce中处理Email的发送

在Salesforce中可以用自带的 Messaging 的 sendEmail 方法去处理Email的发送 请看如下一段简单代码&#xff1a; public boolean TextFormat {get;set;} public string EmailTo {get;set;} public string EmailCC {get;set;} public string EmailBCC {get;set;} public string …

kvm vnc的使用,鼠标漂移等

1.宿主机的vnc&#xff08;virtual Network Computing&#xff09;配置 安装rpm包 yum install tigervnc-server -y 为了防止干扰直接关闭防火墙和selinux /etc/init.d/iptables stop setenforce 0 配置vnc密码和启动vncserver服务 vncpasswd vncserver 2.客户机的vnc 在qemu…

php深浅拷贝,JavaScript 中的深浅拷贝

工作中经常会遇到需要复制 JavaScript 数据的时候&#xff0c;遇到 bug 时实在令人头疼&#xff1b;面试中也经常会被问到如何实现一个数据的深浅拷贝&#xff0c;但是你对其中的原理清晰吗&#xff1f;一起来看一下吧&#xff01;一、为什么会有深浅拷贝想要更加透彻的理解为什…

使用Python进行地理编码和反向地理编码

Geocoding is the process of taking input text, such as an address or the name of a place, and returning a latitude/longitude location. To put it simply, Geocoding is converting physical address to latitude and longitude.地理编码是获取输入文本(例如地址或地点…

java开发简历编写_如何通过几个简单的步骤编写出色的初级开发人员简历

java开发简历编写So you’ve seen your dream junior developer role advertised, and are thinking about applying. It’s time to write that Resume! Nothing better than sitting down to a blank piece of paper and not knowing how to start, right?因此&#xff0c;您…

leetcode 628. 三个数的最大乘积(排序)

给定一个整型数组&#xff0c;在数组中找出由三个数组成的最大乘积&#xff0c;并输出这个乘积。 示例 1: 输入: [1,2,3] 输出: 6 解题思路 最大的乘积可能有两种情况 1.两个最小负数和一个最大正数 2.三个最大正数 代码 class Solution {public int maximumProduct(int[…

[Object-C语言随笔之三] 类的创建和实例化以及函数的添加和调用!

上一小节的随笔写了常用的打印以及很基础的数据类型的定义方式&#xff0c;今天就来一起学习下如何创建类与函数的一些随笔&#xff1b; 首先类的创建&#xff1a;在Xcode下&#xff0c;菜单File&#xff0d;New File&#xff0c;然后出现选择class模板&#xff0c;如下图&…